HLS 流可以是实时的,也可以是点播 (VOD)。部署 HLS 流的要求如下:
分发 HLS 媒体的最简单方法是使用 <video>
M3U8
播放列表文件作为视频源,创建一个包含 HTML5
标签的网页。对于不支持 HTML5 视频元素的浏览器或不支持 HLS
的浏览器,我们可以在 <video>
和 </video>
标记之间包含回退代码。例如,我们可以使用 QuickTime
插件回退到渐进式下载影片或实时流处理协议 (RTSP)
流。下面的示例演示基本网页的 HTML
代码。
<html>
<head>
<title>HTTP 实时流式处理示例</title>
</head>
<body>
<视频 src=“http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8” 高度=“300” 宽度=“400”>
</video>
</body>
</html>
HLS 流可以从普通的 Web 服务器提供。配置 Web 服务器,并将所提供文件的 MIME 类型与其文件扩展名相关联。下表显示了 HLS 的 MIME 类型。
文件扩展 | MIME类型 |
---|---|
.m3u8 | vnd.apple.mpegURL |
.ts | video/MP2T |
.mp4 | video/mp4 |
如果我们的 Web 服务器在 MIME 类型方面受到限制,则可以提供以 MIME 类型结尾.m3u的文件 音频/mpegURL 以实现兼容性。
索引文件通常很长,并且经常重新下载,但由于它们是文本文件,因此可以非常有效地压缩它们。通过启用 M3U8 索引文件的实时 gzip 压缩来减少服务器开销。HTTP 实时流式处理客户端会自动解压缩压缩的索引文件。
我们可能需要缩短 M3U8 文件的生存时间 (TTL) 值,以实现下游 Web 缓存的正确缓存行为。M3U8 文件在直播期间经常被覆盖,每个请求都应下载最新版本。请咨询我们的内容交付服务提供商以获取具体建议。对于 VOD,索引文件是静态的,仅下载一次,因此缓存不是一个因素。
媒体流验证器工具是用于验证 HLS 流和服务器的命令行实用程序。
媒体流验证器模拟 HLS 会话,并验证索引文件和媒体段是否符合 HLS 规范。它执行多项检查以确保可靠的流式传输。如果发现任何错误或问题,将显示详细的诊断报告。始终在提供新流或备用流集之前运行验证器。
通过加密保护我们的媒体。文件分段器和流分段器工具都具有加密选项,我们可以将它们配置为定期更改加密密钥。我们与谁共享密钥取决于我们。
密钥文件需要初始化向量来解码加密媒体。初始化向量可以定期更改,就像键一样。目前对媒体进行加密同时最小化开销的建议是每 3 到 4 小时更改一次密钥,并在每 50 Mb 数据后更改初始化向量。
即使对密钥的访问受到限制,如果密钥文件是通过 HTTP 发送的,窃听者也可能获取密钥文件的副本。此问题的一种解决方案是通过HTTPS安全地发送密钥。在尝试通过 HTTPS 提供密钥文件之前,请测试通过 HTTP 从内部 Web 服务器提供密钥。这允许我们在将 HTTPS 添加到组合之前调试设置。一旦你有一个已知的工作系统,你可以切换到HTTPS。
使用 HTTPS 为 HLS 提供密钥的要求是:
验证我们的 HTTPS 服务器上是否具有由受信任的颁发机构签名的 SSL 证书。如果没有,我们仍可以通过为服务器创建自签名 SSL 证书颁发机构和叶证书来测试我们的设置。将证书颁发机构的证书附加到电子邮件中,将其发送到要用作 HLS 客户端的设备,然后点击“邮件”中的附件以使设备信任服务器。
确保密钥文件的身份验证域与第一个播放列表文件的身份验证域相同。实现此目的的最简单方法是从 HTTPS 服务器提供多变量播放列表文件。播放列表文件下载一次,因此这不会造成过多的负担。其他播放列表文件可以使用HTTP提供。
启动我们自己的对话框供用户进行身份验证,或将凭据存储在客户端设备上。HLS 不提供用于身份验证的用户对话框。如果我们正在编写自己的客户端应用程序,则可以存储基于 cookie 或 HTTP 凭据并在连接中提供它们(_:didReceive:)回调。我们提供的凭据将被缓存并由媒体播放器重复使用。
示例级加密格式记录在 HTTP 实时流的 MPEG-2 流加密格式中。为了获得最强大的内容保护级别,直接通过HTTPS提供密钥的替代方法是使用FairPlay流。