
那么,如果设置为YES没有明显的缺点,为什么我会将expectedMediaDataInRealTime设置为NO?这仅适用于使用Apple API读取数据(使用AVAssetReader)吗?文档说该属性控制“以理想的交错模式写入媒体数据以提高存储和回放效率”,但是当expectedMediaDataInRealTime设置为YES时,isReadyForMoreMediaData永远不会返回NO并且文件看起来写得很完美.因此,如果AVAssetWriter在此属性设置为YES时可以执行此 *** 作,为什么设置为NO时无法执行此 *** 作?来源完全一样.
除了“确保readyForMoreMediaData的值被恰当地计算”之外,这个属性究竟做了什么呢(这对我来说绝对没有意义)?
解决方法 根据我的理解,将expectedMediaDataInRealTime设置为YES意味着编码器期望实时数据流馈送,例如摄像机等.在这种情况下,您将不断向编码器提供数据,isReadyForMoreMediaData将告诉您是否可以提供数据到编码器.如果isReadyForMoreMediaData为NO,则必须删除当前样本,并等待下一个样本到达并再次检查isReadyForMoreMediaData是否为YES.另一方面,如果expectedMediaDataInRealTime为NO,则表示编码器未采用实时源,而是采用脱机数据流,例如AVAssetReader.在这种情况下,因为您可以自己控制流速,因此,当isReadyForMoreMediaData为NO时,您可以保持输入和编码器并等待isReadyForMoreMediaData变为YES(例如,使用无限循环来休眠并等待isReadyForMoreMediaData变化等).
我假设的目的是使内部机制尝试尽可能对齐地交错音频和视频时间戳,不会让播放器,解码器预先获取大量数据进行播放.它是数据源端数据完整性和回放端体验之间的折衷.虽然,我想你可以一直使用expectedMediaDataInRealTime为YES,但是如果isReadyForMoreMediaData == NO,最好丢弃早期喂食的样本.
总结以上是内存溢出为你收集整理的objective-c – AVFoundation的AVAssetWriterInput expectMediaDataInRealTime属性究竟做了什么?全部内容,希望文章能够帮你解决objective-c – AVFoundation的AVAssetWriterInput expectMediaDataInRealTime属性究竟做了什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)