【问题标题】:AVPlayer vs. AVAudioPlayerAVPlayer 与 AVAudioPlayer
【发布时间】:2011-03-18 00:10:24
【问题描述】:

documentation for AVPlayer 声明如下:

[The] 播放器同样适用于本地和远程媒体文件

但是,documentation for AVAudioPlayer 声明如下:

Apple 建议您使用此类进行音频播放,除非您正在播放从网络流中捕获的音频

对于我正在做的工作,我需要 AVAudioPlayer 的一些功能,但我所有的音频都是流式传输的。我需要从 AVAudioPlayer 获得的 AVPlayer 没有的主要内容是“正在播放”属性。没有该属性就很难构建播放器 UI。

那么 AVPlayer 和 AVAudioPlayer 有什么区别使得后者不适合网络流媒体?有没有办法从 AVAudioPlayer 提供的 AVPlayer 中获取一些信息,例如“正在播放”属性?

【问题讨论】:

    标签: iphone audio streaming ios4 core-audio


    【解决方案1】:

    AVPlayer 实际上具有与 AVAudioPlayer 的播放属性类似的属性。 看看rate 属性。

    【讨论】:

    • 是的,我现在正在使用它,但它不是超级方便。不过感谢您的想法!
    • 嗨 Macinjosh,如果您弄清楚两者之间的确切区别,请发布。
    【解决方案2】:
    1. AVPlayer 可以使用带有 iPod 库 URL 的 AVURLAsset 从 AVPlayerItem 播放。 AVAudioPlayer 无法从 iPod 库 url 播放。

    2. AVPlayer 没有音量属性,需要使用只能由硬件开关或 MPVolumeView 控制的系统音量设置。但是你可以设置 AVAudioPlayer 的混音音量。

    3. AVPlayer 在搜索后似乎报告了错误的 currentTime。但 AVAudioPlayer 报告准确。

    【讨论】:

    • 如果您需要 AVPlayer 的准确计时,请创建 AVURLAssets 并在初始化时传递选项 AVURLAssetPreferPreciseDurationAndTimingKey。嘘!
    • 这仍然准确吗?在过去的 3 年中是否出现了任何重要的变化?谢谢
    • 错了。对我来说,AVPlayer 在性能和获取当前时间的准确性方面表现完美。当您必须处理图形播放时间路径时,AVPlayer 非常棒。它没有运行愚蠢的 NSTimer,而是在 GCD Block 中运行更流畅。检查示例 - (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block;效果很好。
    • @mkc842,从 iOS 6 开始,AVAudioPlayer 可以从 iPod 库 URL 播放。此外,您可以使用此答案的代码设置 AVPlayer 的音量:stackoverflow.com/a/6178912/462162
    【解决方案3】:

    7年后……

    从依赖 Swift 和 CocoaPods 的角度来看,所以我的答案是仅比较 iOS 8+

    1。 iPod 库支持

    identical support since iOS6

    2。音量控制

    相同的支持:

    3。寻求控制

    AVPlayer 和 AVAudioPlayer 在搜索后似乎都报告了不正确的 currentTime:

    4。改变来源

    • 您只需一个AVPlayer 即可播放多个文件
    • 播放多个文件需要多个AVAudioPlayer

    【讨论】:

    • 我要补充一点,AVPlayer 的完成和错误处理搞砸了(通知中心、kvo、当本地路径错误时根本不报告错误等)。 AVAudioPlayer 具有 do-catch 错误和完成处理程序。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多