【发布时间】:2011-07-16 16:46:00
【问题描述】:
我正在使用 AVPlayer 流式传输以两种质量格式提供的音频内容。
问题在于,当从较低格式传递到较高格式时(当 wi-fi 可用时由框架自动完成)播放时会出现延迟。
有没有办法手动选择所需的质量以防止延迟?
【问题讨论】:
标签: iphone objective-c streaming avplayer
我正在使用 AVPlayer 流式传输以两种质量格式提供的音频内容。
问题在于,当从较低格式传递到较高格式时(当 wi-fi 可用时由框架自动完成)播放时会出现延迟。
有没有办法手动选择所需的质量以防止延迟?
【问题讨论】:
标签: iphone objective-c streaming avplayer
更新:在您对此投反对票之前,请注意这是在 iOS 4 期间准确且被接受的答案。对于更新的 iOS 8 答案,see here。
我自己研究了这个问题,但没有找到答案,这意味着我很肯定没有办法做到这一点。 Apple 文档并不总是提供有关您可以做什么的所有详细信息,但是如果您查看所有可用的属性、方法等,您会发现没有任何东西可以让您调整流。
我认为这就是 HLS 的全部意义所在。 Apple 希望 iPhone 用户能够获得最佳的流媒体体验。如果他们为开发人员提供了调整正在使用哪个流的控件,那么就达不到目的了。当涉及到切换流时,系统最清楚。如果手机无法处理额外的带宽,那么它不会(或不应该)切换到更高的流。我发现的一些你可能想看看的东西......
您的文件是否以 10 秒为增量进行分块?如果还不止这些,您可能需要缩短它们。
某些文件转换程序无法获得完全正确的比特率,如果是这种情况,您的手机可能会认为它具有 96 kbps 提要的带宽,但实际上您的提要是 115 kbps。看看这篇文章中接受的答案:iPhone - App Rejected again, HTTP Live Streaming 64kbps baseline feed
【讨论】:
NSURLProtocol,随时以编程方式决定AVPlayer 加载哪些数据。服务器也需要调整。虽然有可能,但绝非易事。
现在在 iOS8 中是可能的。
在 AVPlayerItem 上结帐 preferredPeakBitRate。
以下复制自 Apple 的文档:
此项目所需的网络带宽消耗限制(以比特/秒为单位)。
SWIFT: var preferredPeakBitRate: Double
目标-C:@property(nonatomic) 双首选PeakBitRate
将 preferredPeakBitRate 设置为非零值表示播放器应尝试将项目播放限制为该比特率,以每秒比特数表示。
如果无法降低网络带宽消耗以满足preferredPeakBitRate,则在继续播放该项目的同时尽可能降低。
【讨论】:
Use Pantomime,是一个适用于 iOS、OSX 和 tvOS 的轻量级框架,可以读取和解析 HTTP Live Streaming 清单。 Pantomime
【讨论】: