关于iphone:AVPlayer vs. AVAudioPlayer

AVPlayer vs. AVAudioPlayer

AVPlayer 的文档说明如下:

[The] player works equally well with local and remote media files

但是,AVAudioPlayer 的文档说明如下:

Apple recommends that you use this class for audio playback unless you are playing audio captured from a network stream

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

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


  • AVPlayer 可以使用带有 iPod 库 URL 的 AVURLAsset 从 AVPlayerItem 播放。 AVAudioPlayer 无法从 iPod 库 url 播放。

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

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


  • 7年后……

    从依赖于 Swift 和 CocoaPods 的angular来看,所以我的答案是仅比较 iOS 8。

    1. iPod库支持

    自iOS6以来的相同支持

    2.音量控制

    相同的支持:

    • 您可以直接设置 AVAudioPlayer 的混合音量。
    • 您可以使用 AVPlayerItem 上的 AVAudioMix 设置 AVPlayer 的混合音量

    3.寻求控制

    AVPlayer 和 AVAudioPlayer 在搜索后似乎都报告了错误的 currentTime:

    • 对于 AVAudioPlayer,建议先stop()AVAudioPlayer再寻找
    • 对于 AVPlayer,建议在初始化 AVURLAssets 时传递选项 AVURLAssetPreferPreciseDurationAndTimingKey。并依赖于观察者块给出的值。

    4. 改变来源

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


    AVPlayer 其实和 AVAudioPlayer 的播放属性有类似的属性。
    看看 rate 属性。