0%

流媒体传输协议

流媒体协议是服务器与客户端之间通信遵循的规定。

RTSP

该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。数据源包括现场数据与存储在剪辑中的数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、多播UDP与TCP提供途径,并为选择基于RTP上发送机制提供方法。

RTMP

RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据实时传输开发的开放协议,因为是开放协议所以都可以使用。

  • RTMP协议用于对象、视频、音频的传输,这个协议建立在TCP协议或者轮询HTTP协议之上。
  • RTMP协议就像一个用来装数据包的容器,这些数据可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。

HLS

HTTP Live Streaming 把整个流分成一个个基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP(传输协议)、M3U8(索引文件)、TS(音视频媒体信息)。

编码格式要求:

  • 视频编码格式:H264

  • 音频的编码格式:AAC、MP3、AC-3

  • 视频的封装格式:ts

  • 保存 ts 索引的 M3U8 文件

优势:

  • 相对于 RTMP 来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽

  • 在服务端做负载均衡要简单。因为 HLS 是基于无协议的 HTTP 实现的,客户端只需要按照顺序下载存储在服务器的普通 ts 文件进行播放即可。而 RTMP 是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。

  • HLS 协议本身实现了码率自适应,在不同的带宽情况下,设备可以自动切换到最适合自己码率的视频播放。

劣势:

延迟,很难做到 10s 以下,而 RTMP 可以降到 3s~4s。

M3U8

  • EXTM3U

    • 首行
  • EXT-X-VERSION

    • 格式版本
  • EXT-TARGETDURATION

    • 最大切片时长的四舍五入值
  • EXT-X-MEDIA-SEQUENCE

    • 直播切片序列
  • EXTINF

    • 每个切片时长
    • 下方为分片路径
  • EXT-X-ENDLIST

    • 不会产生更多切片,该 M3U8 停止更新
  • EXT-X-STREAM-INF

    • 多级 M3U8 文件,支持二级

    • 后接参数:

      • BANDWIDTH,最高码率值
      • AVERAGE-BANDWIDTH,平均码率值
    • 下面接子 M3U8 路径

客户端逻辑

  1. 通过给定URI获取播放列表。若是Master Playlist,客户端选择一个Variant Stream来播放。
  2. 客户端检查#EXT-X-VERSION版本是否满足。
  3. 客户端忽略不可识别的tags、属性键值对。
  4. 加载Media Playlist,选择一个segment开始播放。
  5. 播放完一个segment后,根据客户端当前的具体情况选择一个新的segment,并重复执行播放操作。
  6. 对与直播,需要定期刷新Media Playlist,并选择合适的segment播放。

客户端码率切换

HLS服务器提供几种可选的码率。客户端需要自主完成码率切换。客户端判断是否切换码率的因素:

  • 设备实际的下载速度(与Master Playlist的Variant Stream标签中的码率/带宽做比较)
  • 设备运行情况(CPU、内存、屏幕分辨率)

参考

欢迎关注我的其它发布渠道