大多数浏览器和
Developer App 均支持流媒体播放。
-
验证 HTTP 实时流
HTTP Live Streaming 能够在各种不同的网络条件下提供可靠的媒体内容交付。了解 HLS 创作的最佳做法,并探索如何通过 HTTP Live Streaming 工具验证您的流媒体,以及用结论来改进您的流性能。
资源
相关视频
Tech Talks
WWDC17
-
下载
大家好 欢迎来到“验证HTTP直播流”会话 我是Eryk 是一名Apple的媒体工程师 现在就开始吧 验证确定完善性或准确性 我们验证流的目的是什么 是要确保该流的正确性 至少是结构的正确 结构检测并不能发现所有潜在问题 但可以消除大部分的
为了更准确 首先要确保播放列表和片段的格式正确 那么软件可以解析流吗 HLS验证 第二 我要有些额外要求 例如 HLS规格不需信息帧播放列表 但我们需要 因为想要改善用户体验 第三 我们希望这些流来反映既定的最佳实践 一切正常 最终都是为了 确保流在设备上运行正常
现在让我们谈谈规格
最重要的是HLS规格本身 如果你有过使用HLS的经验 你可能看过这份文档几次
这是因特网工程作业推动 (IETF) 网络草案 搜索“draft pantos” 就能找到 几年前发布了第一版 我们一年更新两到三次 文档详细说明了播放列表结构 存在何种标签 格式是什么 并向客户和服务器解释职责 HLS编辑规范 这是我们最新推出的一个文档 HLS编辑规范
可以在参考库中找到 我们一开始在去年秋天推出tvOS版 在 WWDC 我们已经升级覆盖iOS和OS 这份文件试图涵盖构成HLS的内容
规范要求有几个来源 一些来自HLS规范的回波规范 例如 不连续性点位置 播放列表持续时间 一些必须要有设备的支持 例如 你的视频都需要是H.264 或者每秒内容不能超过60帧
其他一些来自期望的用户体验 例如我们期望的I-Frame间隔 或者我们希望 大家来支持trick play
一些是根据我们过去七年的经验和分析 我要说的是我们的传送建议 我们推荐的比特率 我们对隐私和安全的建议
我列出来的要求仅仅只是几个例子 让大家对这个文档有个概念 规范本身分成各种类别 例如视频编码 Trick Play 媒体分解 传送等等
现在我们不会让大家手动验证 所以来看看我们提供的工具 但首先 你需要获得工具 你能在开发人员流页面 developer.apple.com/streaming 找到所以关于HLS的重要信息
如果我们往下滚动 大概右边一半的位置 有一个链接“工具”下载 请注意你必须注册成为 开发人员激活Apple ID 才能进入页面 但记住开发人员账户是免费的
一旦注册了 就可以进入下载页面
下载本身是个磁盘映像包含一个安装包 现在截图有点过时了 你应该看到一个2016年6月 或更新的磁盘映像 我们一年会更新几次工具 顺便说句 若在 WWDC 期间查看 新版本可能还没有发布
运行安装程序后 出现了服务器工具 我要提醒大家 这些工具只在OS X上运行 HTTP直播流工具 头两个是验证工具 会在后面介绍 接下来三个是文件 流和字幕的分割工具 想要简要介绍下字幕分割工具 对于分割大型网页VTTT 非常有用 最后两个 是Variant Playlist Creator 用于创建主要播放列表 最后一个用于设置定时元数据格式 你可以插入使用分割工具 现在所有工具已经载入 你可以通过这些H选项获得帮助
在我们介绍验证工具前 我想简单介绍下mediafilesegmenter 调用很简单 只要传到电影文件 就能生成媒体播放列表和片段 而这个工具有许多选项 但并没有看起来那么复杂 选项可以分成几类
选项必须进行命名文件 构建播放列表 如何进行加密等等 甚至不用使用该介绍 mediafilesegmenter 可以很好进行交叉检查 你对片段做的所有处理
进行验证 媒体流验证器是关键工具 你可以在主播放列表调用
在终端和json文件上生死输出 json文件包含输出所有的重要信息 还有更多数据
我想要调用几个选项 首先你可以调整 json文件的名字和路径
还可以调整超时 那么什么是超时? 默认情况下 验证器超时 就是 5分钟后停止处理 现在可能时间不够 在要求流上处理一个大视频 对于实时内容 5分钟足够进行初步检查 你希望在更长的时间段进行检查 来确定流的基本正确性
这个就是媒体流验证器输出
我们调出媒体流验证器的URL 首先显示版本号 然后输出一些下载播放列表 和文件的痕迹
再输出每个发现变量 复制和I-Frame变量的信息 现在很难进行 所以我们创建了HLS报告 这是个python 脚本采用json并进行总结提取
再生成HTML文件作为输出
文件名与json文件相同 除了拓展名不同
我还想调用几个选项 我们可以改变HTML文件的名字
dash I或dash ID 选项很有用 在你想要匹配HTML输出 和json文件选项时 当我说到例子时会 更详细介绍工作原理
现在Verbose选项非常有用 可以告诉你许多关于变量和复制的信息 很遗憾 今天没足够时间详细介绍输出 但我想调用演示下
提交到App Store 快速放在一边 你可以在提交 App Store前验证流 也可以在提交时 在你的注释域内 要包括一个测试流URL 这样查看人就有可以查看的流
嗯 这个演示 我要运行一些演示 但不是在屏幕上运行全部 大家要尝试跟着理解这些小文本 我拿到输出会带着大家浏览
首先 一个小命令行实例
运行媒体流验证器 注意我给json文件的命名
我刚才拿到个假URL 大家来试试
现在我们之前看到了输出 就跳过 但记住运行可能需要几分钟
一旦完成 我们就能运行HLS报告 传到验证器创建的json文件
如果HLS报告运行正常 我们就不会有输出 就只有HTML文件 如果我们查看当前目录 就只有两个文件 验证器创建的json文件 和HLS报告创建的HTML文件
让我们看一些示例报告 首先来看看有几个常见问题的播放列表
这个就是报告 第一个要检查的是流类型
一般会是VOD LIVE 或EVENT
这些反应了三种HLS支持的 基本流类型 但也有可能拿到 值为“UNKNOWN” 这就意味着我们无法识别播放列表 更糟的话 可能拿到混合值 现在这说明有一些未知因素 就是有些媒体播放列表无法识别 或者更糟 有发生冲突的类型 例如 有些变量为EVENT 而一些却是LIVE
现在报告下一项就是变量概览表 有一个视频变量条目
如果我们刚好有混合流 就会成为表内的 增加列说明播放列表类型 往右看就能 看到有更多的列 特别是 当我们要给VOD一个处理百分比列时
如果少于100%就说明 超时设置不够长 如果有实时内容 就不会看到处理百分比 相反 会看到两列 平均分段计数和平均播放列表时长
下一项要检查的是差异百分比列 这列说明测量比特率相比 主播放列表显示的值超过多少 现在这些值都太高了 注意变量超过了40%
现在这些值都应在 -10%-+10%范围内 如果值为正 就说明你申报的值应该增加 如果值为负 申报的值就应减少
现在请注意我们有两个 原因是我们播放列表中 申报了带宽和平均带宽 我们可以对比两个的申报值和测量值
现在从百分比项很难 看出真正的区别 如果你添加--pl选项 意味播放列表 到HLS报告命令行 将看到两个新列 播放列表率和播放列表平均率 从这个 我们可以看到例如变量1 申报值是392kb每秒 但测量值是551kb每秒
现在我们切换回没-p选项的版本 向下滚动 有另一张表 复制概述
在主播放列表我们将音频作为独立流 作为复制 就在这儿报告
根据这张表 必须要修复的问题就是 要正确播放必须修复的问题 或者是我们认为硬性要求的重要问题
请看项目#2和#4 就是我们刚才提的问题 申报和测量的最高和平均比特率 相互不匹配
后面再解决项目3
向下滚 发现必须修复的问题 对于必须修复的问题我们强烈建议修复
现在就是根据报告信息 可以对报告信息进行回溯 找到媒体流验证器和HLS报告的版本 这对大家给我们发生错误报告 和HLS报告输出 很重要或者是让大家 在下载更新版工具后 可以返回查看老版本 现在是项目5 显示我们的播放列表中没有字幕或标题 我们在下一个示例中修复 让我们看看项目7
项目7说默认视频变量 不是我们建议的
说的是变量#8
让我们返回到变量概述 可以发现项目8高亮了项目数字 说明这个就是默认变量 记住这个默认变量 就是客户最初播放的第一个变量
也是主播放列表的第一个变量 请注意这个最大速率是每秒8M 作为默认值太高了
好了 这些都是我们会遇到的常见问题 我们第二个例子 之前已经在第一个例子修复指出的问题
调整了申报值 现在差异百分比是接近0 我们已经修复默认变量 变得更合理 在#4变量下 将不同的媒体播放列表 移到主播放列表的第一位
再看右侧 我们修复超时设置 现在正在处理整个播放列表
现在我们已经修复了关于标题的问题 通过添加字幕播放列表修复的 现在注意字幕的复制 #12复制 没有最大或平均率
原因是字幕播放列表没有经过处理 我们把n/a放在已处理百分比栏上 提醒这个正在处理中
但还有个大问题要修复 就是没有I-Frame播放列表
当我们添加I-Frame播放列表时 报告有哪些改变呢 第一部分看起来一样 当往下滚动 除了其他的概述表外 还有个I-Frame变量概述
现在注意我们的差异百分比值有点不够 但这些都在范围内 记住范围是+/-10%
现在看看这边的两列 比例平均数和乘数 比例平均数是I-Frame播放列表 影响最大的平均数据
就是有点拗口 记住测量平均比特率 指的是数据速率为 1 X playback速率 但Trick Play的 I-Frames整点 的播放速率大于1 X speed
现在乘数告诉我们最低的播放速率 在该速率下会达到最差情况值
值高些会有改善 原因是我们放慢帧速率是为了 将实际显示帧速率保持在一个固定值 对于这些值我们要做的 就是与这儿的比例平均数据进行对比 与分辨率相同的正常变量数据速率对比
应该要接近值 或者I-Frame变量低于值 否则 Trick Play 可能会造成分辨率下降
在报告中 我已经有了一个新栏 这是因为我在HLS报告中 添加了——ID选项
正如我之前所说 能帮助你找到json文件中 相同的数据 所以让我们看看第一个 数据ID 16 哪个是我们分辨率最低的 I-Frame播放列表呢 在json文件找找
这是json的简短文本视图 json 的最高级别是字典 我们对变量值感兴趣 哪个是字典的数组呢
那些字典中某一个会有数据ID 16 我想说这里并不是按照数据ID排列的
这个有数据ID 16 那个是json变量条目 其数据与报告中的行匹配 那是最低的I-Frame变量 现在 我们已经跳过许多的数据 信息比这张幻灯片上显示的多得多 用自己喜欢的工具 在json文件周围寻找 或者自己编写一些特殊工具 这些json可以变得很大 它们超过100,000行是很正常的
我们最后一个例子 我们选择播放列表 再添加不同类型的音频
顶部看起来很类似 往下滚动
看看我们的复制 现在 不再只是单一的立体声音频 我们添加了两个多声道音频复制 一个是AC-3的杜比数字 叫做aud2 另一个是EC-3的杜比数字升级 叫做aud3 让我们去看看变量部分
注意到因为AE-3 和EC-3无法替代 也不能替换AAC 每个都有自己的默认变量
也就是说一旦选择了AC-3的 aud3 就默认变量#12 原因是该变量是aud2组中第一个 出现在主播放列表中的
同样 如果选择EC-3 默认变量为#20 注意aud2和aud3变量之间的 比特率差异 例如变量#9和变量#17 这是因为音频不同的比特率 我们看到的变量比特率 是包括复制的组合比特率
好了 以上就是我举的例子 那么在哪儿可以找到自己想看的示例呢 HTTP直播流示例 好 这个直播流网页上 有三个现成的例子 如果前往 developer.apple.com/streaming 可以看到示例网页指示 你可以找到该网页的URL
或者也可以阅读幻灯片上的内容
头两个在你验证的时候会有意见 原因是这些流是在很久以前创建的 我们决定不对其进行升级 但第三个变量是新的 几乎完美 示例流 好了 该结束了 总结 有三件事希望大家能记住 服从编辑规范 验证 验证 再验证媒体流 包括在提交应用时测试流URL
更多信息 请前往 WWDC 网站 使用该会话编号510
相关会话 “HTTP实时总结的新特性” 今年在HTTP直播流有许多新改变 我建议大家参加或观看会话 “HTTP直播流的新特性”
谢谢 祝大家在会议中有所收获 -
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。