AVPlayer - 播放时切换流质量

时间:2014-07-16 20:32:13

标签: ios objective-c youtube avplayer

我正在使用AVPlayer播放youtube视频,对于每个YouTube视频ID,我会检索不同质量的几个流网址。

我想根据网络状态播放特定的流质量。例如,如果用户在3G上,我想播放质量最低的URL,但如果用户移动到wifi,我想无缝切换到质量更好的流。

这不是什么新鲜事,youtube正在他们的应用程序和许多其他人那样做。

所以我想知道用AVPlayer进行这种切换的最佳方式是什么,我不希望用户注意到切换,而不会暂停视频播放或缓冲。
有什么建议吗?

我不确定youtube服务器是否支持这种功能,或者我是否需要在客户端执行此功能。

3 个答案:

答案 0 :(得分:8)

您应该查看有关HTTP直播的Apple documentation

实现您想要并在文档中讨论的切换类型的唯一方法是使用m3u索引文件和包含视频数据的TS文件。

您连接到索引文件并存储其内容,这将是多个URL以及带宽要求。请参阅示例here。然后使用 Reachability类检查网络状态并连接到相应的流。启动Reachability通知程序,并通过更改您连接的流来响应事件。这将导致属于流的TS文件被下载和缓冲以进行回放,从而实现所需的切换类型。

正如我之前所说,缺点是需要使用TS文件。这意味着您必须从Youtube下载视频文件,使用Apple提供的mediafilesegmenter命令行工具准备并存储在FTP服务器上!根本不是理想,只要我知道这是唯一的方法。

答案 1 :(得分:3)

查看AVPlayer replaceCurrentItemWithPlayerItem:方法。如果我是你,我会使用Reachbility来观察用户的网络状态。当网络可达性降低时,您可以执行以下操作:

AVPlayerItem *item = [AVPlayerItem playerItemWithURL:urlOfLowerQuality];
[item seekToTime:player.currentTime];
[player replaceCurrentItemWithPlayerItem:item];

答案 2 :(得分:0)

使用ReachabilityManager检查wifi或3G数据类型的当前状态。根据数据模式切换url type.While切换url获取视频的当前时间,需要设置视频的搜索时间。