我正在使用AVPlayer播放youtube视频,对于每个YouTube视频ID,我检索了几个不同质量的流网址.
我想根据网络状态播放特定的流质量.例如,如果用户在3G上,我想播放质量最低的URL,但如果用户移动到wifi,我想无缝切换到质量更好的流.
这不是什么新鲜事,youtube正在他们的应用程序和许多其他人这样做.
所以我想知道用AVPlayer进行这种切换的最佳方法是什么,我不希望用户注意到切换,而不会暂停视频播放或缓冲.
有什么建议吗?
解决方法
你应该看看HTTP直播上的Apple
documentation.
实现所需切换类型的唯一方法是使用m3u索引文件和包含视频数据的TS文件.
您连接到索引文件并存储其内容,这将是多个URL以及带宽要求.参见示例here.然后使用
Reachability类检查网络状态并连接到相应的流.启动Reachability通知程序并通过更改您连接的流来对事件做出反应.这将导致下载和缓冲属于流的TS文件以进行回放,从而实现所需的切换类型.
正如我之前所说,缺点是需要使用TS文件.这意味着您必须从Youtube下载视频文件,使用Apple提供的mediafilesegmenter命令行工具准备并存储在FTP服务器上!根本不理想,但据我所知,这是唯一的方法.