【问题标题】:Redirection playback output of avplayer itemavplayer item的重定向播放输出
【发布时间】:2012-03-09 01:46:32
【问题描述】:

我想要做的是获取与音频文件(不涉及视频)相对应的 AVAsset 的输出样本,并将它们发送到接收样本块的音频效果类,我希望能够这是实时的。

我目前正在查看 AVfoundation 类参考和编程指南,但我看不到将播放器项目的输出重定向并将其发送到我的效果类的方法,然后从那里将转换后的样本发送到音频输出(使用 AVAssetReaderAudioMixOutput?)并从那里听到。我看到 AVAssetReader 类为我提供了一种使用

获取样本块的方法
[myAVAssetReader addOutput:myAVAssetReaderTrackOutput];
[myAVAssetReaderTrackOutput copyNextSampleBuffer];

但 Apple 文档指定 AVAssetReader 类未生成且不应用于实时情况。有没有人建议去哪里看,或者我是否有正确的方法?

【问题讨论】:

    标签: ios avfoundation


    【解决方案1】:

    MTAudioProcessingTap 非常适合这个。通过利用 AVPlayer,您可以避免必须自己使用 AVAssetReaderOutput 阻止样本,然后自己在音频队列或音频单元中渲染它们。

    相反,将 MTAudioProcessingTap 附加到 AVAsset 的 audioMix 的 inputParameters,您将获得块中的样本,这些样本很容易放入效果单元中。

    这样做的另一个好处是,它可以处理从 URL 派生的 AVAsset,这些 URL 不能总是被其他 Apple API(如音频文件服务)打开,例如用户的 iPod 库。此外,您还可以获得 AVPlayer 免费提供的所有功能,例如音频中断容忍,否则如果您使用 AVAssetReader 解决方案,则必须手动实现。

    要设置点击,您必须设置系统在播放期间适当调用的一些回调。这种处理的完整代码可以在this tutorial here找到。

    【讨论】:

    • 我知道已经有一段时间了,但是:您知道在更改 AVPlayer 的播放器项目时如何正确关闭水龙头(在我的情况下,当 AVQueuePlayer 前进到下一个项目时)?当 playerItem 以及相关的 audioMix 超出 ARC 的范围时,它是否只是优雅地解除分配?我从来没有看到 unprepare 和 finalize 的点击回调被调用。
    【解决方案2】:

    在 iOS 6 和 Mac OS 10.8 中有一个新的 MTAudioProcessingTap 对象。观看 WWDC 2012 的 Session 517 视频 - 他们准确地展示了您想要做什么。

    WWDC Link

    【讨论】:

      【解决方案3】:

      AVAssetReader 不适合实时使用,因为它会为您处理解码,并且在各种情况下copyNextSampleBuffer 可能会阻塞随机时间。

      话虽如此,AVAssetReader 可以很好地用于提供循环缓冲区的生产者线程。这取决于您所需的用法,但我已经成功地使用这种方法来提供 RemoteIO 输出,并在 RemoteIO 回调中进行效果/信号处理。

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多