objective-c – AVFoundation的AVAssetWriterInput expectMediaDataInRealTime属性究竟做了什么?

objective-c – AVFoundation的AVAssetWriterInput expectMediaDataInRealTime属性究竟做了什么?,第1张

概述我正在开发一个从磁盘读取媒体数据的应用程序,将其转换为适当的像素格式,然后将其传递给AVAssetWriter进行压缩并写入磁盘.我正在自己读取交错而不使用AVAssetReader.我的读者确保以串行方式呈现恰好一帧的视频数据和一帧的音频数据.我遇到的问题是如果我没有将expectedMediaDataInRealTime属性设置为YES,那么视频资产编写器将在完全30帧之后始终为isReady 我正在开发一个从磁盘读取媒体数据的应用程序,将其转换为适当的像素格式,然后将其传递给AVAssetWriter进行压缩并写入磁盘.我正在自己读取交错而不使用AVAssetReader.我的读者确保以串行方式呈现恰好一帧的视频数据和一帧的音频数据.我遇到的问题是如果我没有将expectedMediaDataInRealTime属性设置为YES,那么视频资产编写器将在完全30帧之后始终为isReadyForMoreMediaData返回NO.如果我在30帧之前停止写入,它工作正常,输出文件有效.但是,如果我将expectedMediaDataInRealTime设置为YES,它可以在整个持续时间内完美运行,可以是几千帧.在expectMediaDataInRealTime设置为YES的情况下启动转码 *** 作后,我在压缩一个非常长的视频的过程中观察了应用程序的内存使用情况,并且没有任何不合理的内存使用情况,也没有任何内存泄漏.并且得到的MOV文件似乎写得相当正常,例如正如人们所料,音频数据与视频数据交错.

那么,如果设置为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属性究竟做了什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1009147.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存