AVPlayer - 播放时切换流质量

2024-02-17

我在用着AVPlayer为了播放 youtube 视频,对于每个 youtube 视频 ID,我检索几个不同质量的流 url。

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

这不是什么新鲜事,YouTube 在他们的应用程序和许多其他应用程序中都这样做了。

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

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


你应该看看苹果文档 https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html关于 HTTP 直播。

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

您连接到索引文件并存储其内容,该内容将是多个 URL 以及带宽要求。查看示例here https://developer.apple.com/library/mac/technotes/tn2288/_index.html。然后使用可达性 https://developer.apple.com/library/IOS/samplecode/Reachability/Introduction/Intro.html类来检查网络状态并连接到适当的流。启动可达性通知程序并通过更改您连接到的流来对事件做出反应。这样就会导致属于该流的TS文件被下载并缓冲播放,实现你想要的类型切换。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVPlayer - 播放时切换流质量 的相关文章

随机推荐

  • 我可以将用户限制在 Google 地图上的特定范围和缩放级别吗?

    我正在网页上实现 Google 地图 出于本项目的目的 我想限制用户可以拖动地图的距离 以便他们只能查看位于两个坐标内的某个区域 一个指定西北 另一个指定东南 如果你明白我的意思 使用 Google Maps API 实现此目的的最佳方法是
  • 批处理文件:无法回显循环内的变量

    我已经跌入谷底 我似乎无法完成这项工作 setlocal EnableDelayedExpansion for g in 1 2 3 do set a c g 32 echo c pause 但它说ECHO已打开 我知道这意味着它没有什么可
  • 如何在 iOS 中以编程方式设置宽高比约束? [复制]

    这个问题在这里已经有答案了 我已经为我的视图控制器使用了自动布局 我已经在约束中设置了 V 和 H 位置 但我想知道当按钮变为 5s 6 和 6 Plus 时如何增加按钮大小 这是我为登录按钮添加约束的方式 NSArray btncon V
  • NSFetchedResultsController 和实体继承

    我的模型事件中有一个父实体 还有两个子实体 生日 周年纪念日 我正在使用核心数据中内置的实体继承功能 以便生日和周年纪念日的父对象是事件 所以我使用以下命令进行获取 NSFetchRequest fetchRequest NSFetchRe
  • R tmap 打印意大利

    我想画一张地图 我需要打印的国家 地区是意大利 我使用以下代码 library sf library raster library dplyr library spData library spDataLarge library tmap
  • Bootstrap 4 面包屑中的文本右对齐

    我想右对齐 Bootstrap 4 的面包屑类中的链接 我用 BS3 中的 pull right 类很容易地做到了这一点 但是 BS4 的 float right 并不能完成这项工作 例如
  • Jquery Ajax 请求调用两次并且第一个请求未在标头中发送令牌

    我正在使用 ajax 调用基于 WCF REST 的服务 ajax 方法在页面加载之前调用 我希望在ajax请求的标头中发送一个 Token 在 fiddler 中 我看到的是这样的 1 请求头中没有令牌的服务请求 AJAX 调用失败 2
  • Highstock inputDateParser 触发三次

    我不确定是什么原因导致它在选择日期后触发三次日期日历 http bootstrap datepicker readthedocs org en release index html 这是设置的选项rangeSelector rangeSel
  • 使用 topojson 映射美国邮政编码时出错

    加载美国邮政编码 topojson 文件后 我在 d3 js 中收到错误 groupdata该行未定义 function bind group groupData var i n group length m groupData lengt
  • boost::bimap 用于枚举

    我正在尝试为 C 中的枚举创建一个简单的双向查找工具 我的单向查找工作正常 enum MyEnum One Two Three const boost unordered map
  • 如何在 Android 中打开拨号器并一步返回您的应用

    在我的应用程序中 我有一个带有电话号码的按钮 当用户单击它时 拨号器应用程序将打开 并显示电话字段中的号码 但是 如果我想从拨号器返回到我的应用程序 我应该按 返回 按钮 3 次 第一次按会关闭拨号器键盘 第二次按会将我带到拨号器历史记录菜
  • NHibernate 投影和“Having”子句

    我正在使用 NHibernate 通过条件 API 查询我的数据库 我的标准如下 ICriteria c Session CreateCriteria typeof Transaction ProjectionList projection
  • 清除 Marshmallow 以上操作系统版本上的缓存

    我想制作一个 Android 应用程序来清理其他应用程序的缓存 我已经弄清楚如何为棉花糖以下的 Android 版本执行此操作 This https github com Frozen Developers android cache cl
  • CSS - 将页面居中 - 然后使页面高度为 100%

    我正在尝试将页面居中 然后将其制作100 在高度上 我有一个名为 content 的 div 作为 HTML 页面中所有元素的父元素 接下来我需要做什么 我想远离任何 CSS hacks 目前该功能在 IE7 中有效 但在 Firefox
  • C++ 基数转换

    你好 我正在尝试将一些代码从 Windows 移植到 Linux 我有这个 itoa word aux 2 但 GCC 不承认 itoa 我如何以 C 方式进行到基数 2 的转换 谢谢 Here http en wikipedia org
  • 为什么 CreateProcess 在 Windows Server 2003 64 位中失败?

    我们有一个 32 位应用程序 它在其进程中启动其他 32 位应用程序 该应用程序在其他 64 位平台上运行良好 但在 Windows Server 2003 64 位平台上 我们在尝试启动应用程序时遇到错误 error 193 not a
  • Delphi中如何通过所有子目录搜索文件

    我已经在 Delphi 中实现了这段代码 它将搜索文件或给定的名称 但省略搜索所有子目录 如何才能做到这一点 Code if FindFirst filePath faAnyFile searchResult 0 then try repe
  • newFixedThreadPool.setCorePoolSize() 不使用线程,创建新的线程,这可能会产生开销

    newFixedThreadPool setCorePoolSize 不使用线程 而是创建新线程 解释 我创建了一个大小为 2 的 newFixedThreadPool 如果该池的两个线程都很忙 我会使用 setCorePoolSize 向
  • 使用 PHP 在网站上切换语言

    我只是在寻求一些建议 我正在创建一个提供 至少 2 种语言的网站 我设置它的方法是使用 PHP 语言的 XML 文件来检索 XML 节点中的值 假设您有任何 XML 文件 加载方式如下 一旦文件内容可用 我只需将每个节点输出到 HTML 标
  • AVPlayer - 播放时切换流质量

    我在用着AVPlayer为了播放 youtube 视频 对于每个 youtube 视频 ID 我检索几个不同质量的流 url 我想根据网络状态播放特定的流质量 例如 如果用户使用 3G 我想播放最低质量的 URL 但如果用户移动到 wifi