使用 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 读取音频,然后失败

使用 AVAssetReader 读取 mp4 文件时第一个音频 CMSampleBuffer 丢失

AVAssetReader 正在寻找

如何使用 AVAssetReader 在 iOS 上正确读取解码的 PCM 样本——目前解码不正确

如何向 AVAssetReader copyNextSampleBuffer 添加回调?

启动 AVAssetReader 停止对远程 I/O AudioUnit 的回调