流媒体(streaming media)是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。
通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。由于媒体是以连续的数据流发送的,因此在媒体到达时即可播放。可以像下载的文件一样进行暂停、快进或后退操作。
在这篇文章中,首先将说明什么是 video streaming protocol;其次会讨论流协议(streaming protocl)和编解码器之间的区别;最后,将介绍五种常见的流协议。
1. 什么是 video streaming protocol
先看一下什么是流视频协议,大多数数字视频是为了两件事情:存储和播放。要满足这样的需求,视频需要满足小文件和通用播放这两点。
大多数视频文件都不适合流式传输。流式传输需要将音视频分割成小块(chunk),将这些小块按顺序发送,并在接收时播放。如果正在直播,则视频源来自于摄像机;否则,来自于文件。
流媒体协议是一种标准化的传递方法,用于将视频分解为多个块,将其发送给视频播放器,播放器重新组合播放。
这是对 streaming protocol 简单的总结,streaming protocl 协议涉及多方面,可以变得非常复杂。大部分流协议是码率自适应(adaptive bitrate)的,这项技术可以在任一时间为用户提供最佳质量视频。不同协议有不同优势,例如,延迟、数字版权管理(Digital rights management,简称DRB),支持平台数量。
2. 流协议和编、解码器区别
编、解码器(codec)指视频压缩技术。不同的编、解码器用于不同的目的。例如,Apple ProRes 一般用于编辑视频。H.264一般用于在线播放视频。即使不需要使用流式协议,视频也需要使用解编码器进行编码、解码。
视频格式(format)也容易引起疑惑。通常,视频格式指视频文件格式(container format)。常见 container format 包括 .mp4、.m4v、.avi、.mov等,container format 只是一个框(box),框中通常包含视频文件、音频文件和元数据。视频文件格式并不是流式的核心概念。
下面的例子有助于理解这些概念。假设你是商人,需要批量运输衣服(衣服就是视频)。编解码器就是将衣服压缩成捆以节省空间的机器。容器格式就是装压缩后衣服的集装箱。流协议就是将其运输到目的地的铁轨、信号灯和驾驶员。
很多 streaming protocol 只支持几种解编码器。
3. 五种常见流协议
现在,比较一下常见的视频流协议以及每种协议的适用情景。
3.1 Real-Time Messaging Protocol (RTMP)
RTMP 是一个古老的协议。RMTP 最初由 Macromedia 开发,后被 Adobe 收购,至今仍被使用。
由于 RTMP 播放视频需要依赖 Flash 插件。而 Flash 插件多年来一直受安全问题困扰,正在被迅速淘汰。因此,目前 RTMP 主要用于提取 stream。也就是,当设置解编码器将视频发送到托管平台时,视频将使用 RTMP 协议发送到 CDN,随后使用另一种协议(通常是HLS)传递给播放器。
何时使用 RTMP
RTMP 协议延迟非常低,但由于需要 Flash 插件,不建议使用该协议,但流提取是例外。在流提取方便,RTMP 非常强大,且几乎得到了普遍支持。
3.2 Dynamic Adaptive Streaming over HTTP (MPEG-DASH)
MPEG-DASH 是最新的协议之一。尽管未被广泛使用,但该协议有一些很大的优势。
首先,MPEG-DASH 支持码率自适应。这意味着将始终为观众提供他们当前互联网连接速度可以支持的最佳视频质量。网络速度波动时 DASH 可以保持不间断播放。
其次,MPEG-DASH 几乎支持所有编解码器,还支持加密媒体扩展(Encrpted Media Extensions,简写EME)和媒体扩展源(Media Source Extension,简写MSE),这些扩展用于浏览器的数字版权管理标准API。
何时使用 MPEG-DASH
如今只有一些广播公司在使用,将来或许会成为标准技术。但由于兼容性问题,这样的时刻还没有到来。
3.3 Microsoft Smooth Streaming (MSS)
Microsoft smooth streaming 技术于2008年推出。如今,以 Microsoft 为重点的开发人员和在 Xbox 生态系统的开发人员仍在使用,除此之外已逐渐失去用户。
Smooth streaming 支持码率自适应,并且拥有强大的数字版权管理工具。
何时使用 Smooth Streaming
除非目标用户是 Xbox 用户,或计划只开发 Windows 平台的 app,否则,不推荐使用该协议。
3.4 HTTP Dynamic Streaming (HDS)
Adobe 携带 HDS 再次进入了流协议世界。HDS 是 RTMP 的后继产品,也是依赖 Flash 的协议,但增加了码率自适应,并以高质量著称。
HDS 是延迟最低的流协议之一。但由于分段和加密操作,HDS 延迟并不如 RTMP 那样低。在流媒体体育比赛和其他重要事件中广受欢迎。
何时使用 HDS
通常,不建议使用 HDS。对于任何公司而言,采用基于 flash 的技术无法吸引用户,围绕 flash 搭建播放器不是一个好主意。
3.5 HTTP Live Streaming (HLS)
HTTP Live Streaming 由 Apple 开发,旨在能够从 iPhone 中删除 flash,如今已成为使用最广泛的协议。
桌面浏览器、智能电视、Android、iOS 均支持 HLS。HTML5 视频播放器也原生的支持HLS,但不支持 HDS 和 RTMP。这样就可以触达更多的用户。
HLS 支持码率自适应,并且支持最新的 H.265 解编码器,同样大小的文件,H.265 编码的视频质量是 H.264 的二倍。
此前,HLS 缺点一直是高延迟。但 Apple 在 WWDC 2019 发布了新的解决方案,可以将延迟从8秒降低到1至2秒。具体可以查看Introducing Low-Latency HLS。
何时使用 HLS
HLS 是目前使用最广泛的协议,且功能强大。数据显示,如果视频播放过程中遇到故障,只有8%的用户会继续在当前网站观看视频。使用广泛兼容的自适应协议(例如HLS),可以提供最佳的受众体验。
关于 HTTP Live Streaming 更详细的介绍,可以查看我的另一篇文章:HTTP Live Streaming 详解。
参考资料:
- Which Video Streaming Protocol Should You Use?
- Streaming Protocols: Everything You Need to Know
- streaming media
本文地址:https://github.com/pro648/tips/wiki/五种常见流媒体协议
欢迎更多指正:https://github.com/pro648/tips/wiki