AVPlayer 与 AVAudioPlayer
Posted
技术标签:
【中文标题】AVPlayer 与 AVAudioPlayer【英文标题】:AVPlayer vs. AVAudioPlayer 【发布时间】:2011-03-18 00:10:24 【问题描述】:documentation for AVPlayer 声明如下:
[The] 播放器同样适用于本地和远程媒体文件
但是,documentation for AVAudioPlayer 声明如下:
Apple 建议您使用此类进行音频播放,除非您正在播放从网络流中捕获的音频
对于我正在做的工作,我需要 AVAudioPlayer 的一些功能,但我所有的音频都是流式传输的。我需要从 AVAudioPlayer 获得的 AVPlayer 没有的主要内容是“正在播放”属性。没有该属性就很难构建播放器 UI。
那么 AVPlayer 和 AVAudioPlayer 有什么区别使得后者不适合网络流媒体?有没有办法从 AVAudioPlayer 提供的 AVPlayer 中获取一些信息,例如“正在播放”属性?
【问题讨论】:
【参考方案1】:AVPlayer 实际上具有与 AVAudioPlayer 的播放属性类似的属性。
看看rate
属性。
【讨论】:
是的,我现在正在使用它,但它不是超级方便。不过感谢您的想法! 嗨 Macinjosh,如果您弄清楚两者之间的确切区别,请发布。【参考方案2】:AVPlayer 可以使用带有 iPod 库 URL 的 AVURLAsset 从 AVPlayerItem 播放。 AVAudioPlayer 无法从 iPod 库 url 播放。
AVPlayer 没有音量属性,需要使用只能由硬件开关或 MPVolumeView 控制的系统音量设置。但是你可以设置 AVAudioPlayer 的混音音量。
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 的音量:***.com/a/6178912/462162【参考方案3】:
7年后……
从依赖 Swift 和 CocoaPods 的角度来看,所以我的答案是仅比较 iOS 8+。
1。 iPod 库支持
identical support since iOS6
2。音量控制
相同的支持:
您可以直接设置AVAudioPlayer
的混音音量。
You can set the mix volume of AVPlayer
with an AVAudioMix
on the AVPlayerItem
3。寻求控制
AVPlayer 和 AVAudioPlayer 在搜索后似乎都报告了不正确的 currentTime:
对于 AVAudioPlayer,it is suggested tostop()
the AVAudioPlayer
before seeking
对于AVPlayer,建议在初始化AVURLAssets时传递AVURLAssetPreferPreciseDurationAndTimingKey
选项。 And rely on values given by observer block。
4。改变来源
您只需一个AVPlayer
即可播放多个文件
播放多个文件需要多个AVAudioPlayer
【讨论】:
我要补充一点,AVPlayer 的完成和错误处理搞砸了(通知中心、kvo、当本地路径错误时根本不报告错误等)。 AVAudioPlayer 具有 do-catch 错误和完成处理程序。以上是关于AVPlayer 与 AVAudioPlayer的主要内容,如果未能解决你的问题,请参考以下文章