AVPlayer – 在播放时切换stream的质量
我正在使用AVPlayer
播放YouTubevideo,对于每个YouTubevideoID我检索几个不同品质的streamurl。
我想根据networking状态播放特定的stream媒体质量。 例如,如果用户在3G上,我想播放质量最低的URL,但是如果用户移动到WiFi,我想无缝切换到更好的质量stream。
这不是什么新鲜事,YouTube正在他们的应用程序和其他许多应用程序中这样做。
所以我想知道用AVPlayer
进行这种切换的最佳方法是什么,我不希望用户注意到切换,而不会暂停video播放或缓冲。
任何build议?
我不确定在YouTube服务器上是否支持这种function,或者是否需要在客户端执行此function。
你应该看看关于HTTP直播的Apple 文档 。
实现所需的交换types的唯一方法是在文档中讨论使用m3u索引文件和包含video数据的TS文件。
您连接到索引文件并存储其内容,这将是多个URL以及带宽要求。 看到这里的例子。 然后使用Reachability类来检查networking状态并连接到适当的stream。 启动Reachability通知程序,通过更改连接的stream来响应事件。 这将导致属于该stream的TS文件被下载并缓冲回放,实现您想要的切换types。
正如我以前所说,缺点是要使用TS文件。 这意味着你必须从Youtube上下载video文件,使用Apple提供的mediafilesegmenter命令行工具准备好并存储在FTP服务器上! 根本不理想,但据我所知只有这样做的唯一方法。
查看AVPlayer的 replaceCurrentItemWithPlayerItem:
方法。 如果我是你,我会使用Reachbility
来观察用户的networking状态。 当networking可达性降低时,可以这样做:
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:urlOfLowerQuality]; [item seekToTime:player.currentTime]; [player replaceCurrentItemWithPlayerItem:playerItem];
使用ReachabilityManager检查数据types无线或3G的当前状态。 根据数据模式切换urltypes。切换url需要video当前时间,需要设置video查找时间。