使用 AVAssetReader 读取多个轨道
Posted
技术标签:
【中文标题】使用 AVAssetReader 读取多个轨道【英文标题】:Read multiple tracks with AVAssetReader 【发布时间】:2011-07-25 01:28:49 【问题描述】:我需要从 AVAsset 中读取音频和视频的原始样本。做这个的最好方式是什么?我可以将多个 AVAssetReaderTrackOutput 对象附加到一个 AVAssetReader。但是 [AVAssetReaderOutput copyNextSampleBuffer] 是同步的。按时间顺序读取两个轨道的最佳方法是什么为每个 AVAssetReaderTrackOutput 分配一个线程是否安全?
【问题讨论】:
【参考方案1】:好问题 - 每个 AVAssetReaderTrackOutput 一个线程似乎 在 ios 上可以正常工作,但是否应该没有记录。根据 AVFoundation 的实现方式,您可能会导致对 AVAssetReader 和 AVAsset 的异步访问。那应该工作吗?没人知道。
为了真正安全,您应该创建两个 AVAssetReader 甚至两个 AVAsset(它们可能只是 AVURLAssets)。
【讨论】:
我建议使用 2 个读卡器,我可能犯了一些错误,但只使用一个时我的行为很奇怪。 什么样的奇怪行为? [AVAssetReader initWithAsset] 失败? startReading 和 init 失败的异常,我没有写下确切的错误是什么。我这样做更多是出于好奇而不是必要。以上是关于使用 AVAssetReader 读取多个轨道的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVAssetReader 读取 mp4 文件时第一个音频 CMSampleBuffer 丢失
如何使用 AVAssetReader 在 iOS 上正确读取解码的 PCM 样本——目前解码不正确