http-live-streaming 协议分析
http-live-streaming 协议分析:
不受限制的多媒体数据流的传输。协议支持媒体数据加密与流切换(例如不同码率)。
媒体数据创建后立即传输,播放接近实时。媒体数据通常采用HTTP进行传输。
播放列表由一个有序的媒体URI列表和信息标签组成,每个媒体URI指向一个媒体文件,这个媒体文件是单个连续媒体流上的一个片断。
为了播放媒体流,客户端首先获取播放列表文件,然后获取并播放播放列表中的每个媒体流文件。客户端依据下文定义方式重复加载播放列表文件以获取追加片断。
播放列表必须是扩展的M3U播放列表文件,后缀是.m3u8,Content-Type是"application/vnd.apple.mpegurl"
#EXTM3U:扩展标记
#EXTINF:#EXTINF:<duration>,<title> 媒体文件的时长(单位s)和标题(可选)
#EXT-X-MEDIA-SEQUENCE:<number>标识播放列表第一个URI的序列号,后面URL的序列号顺序递增
#EXT-X-KEY:METHOD=<method>[,URI="<URI>"][,IV=<IV>]媒体加密方法(NONE,AES-128)和key获取路径以及key的初始化向量,IV=<IV>字段为version2新增
#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ>标识下一个媒体文件的开始时间
#EXT-X-ALLOW-CACHE:<YES|NO>
客户端是否允许缓存下载文件
#EXT-X-ENDLIST
标识播放列表不再追加媒体文件
#EXT-X-STREAM-INF:[attribute=value][,attribute=value]*
<URI>
标识下一个URI是一个播放列表
Attribute包括:
BANDWIDTH=<n>:码率上限估计值
PROGRAM-ID=<i>:整个播放列表中单个presentation的唯一标识符
CODECS="[format][,format]*":媒体采样类型,符合RFC 4281规定
RESOLUTION=<N>x<M>:N:水平像素,M:垂直像素
#EXT-X-DISCONTINUITY
标明前后媒体文件编码特性的变化,包括:
file format
number and type of tracks
encoding parameters
encoding sequence
timestamp sequence
播放列表中每个URI标识一个媒体文件,它是媒体展示的一个片断。媒体文件必须是MPEG-2TS流或者MPEG-2 Audio基本流。
MPEG-2传输流只能包含一个MPEG-2 Program,每个文件开头必须有PAT和PMT,含视频的片断文件至少包含一个关键帧和能够让解码器完全初始化的足够信息。
除非第一个或者前置EXT-X-DISCONTINUITY标签的媒体文件,播放列表的媒体文件必须是前后连续的。
客户端必须具备处理音频类型或视频类型存在多个轨的情况,没有特别偏好的客户端选择所能支持的、PID号最低的一个进行播放。
客户端必须忽略TS中无法识别的私有流。
一个媒体文件中采样的编码参数,以及多个每个文件中对应媒体流的编码参数,必须保持一致。客户端应该具备处理编码参数变化的能力,比如调整视频内容尺寸适应分辨率的变化。
1、服务器必须把MPEG-2流切分为长度几乎相等的单个媒体文件,切分点必须支持对单个媒体文件的有效解码,比如按照包和关键帧边界来切分。单个媒体文件长度通常为10s。
2、服务器需要给每个单独媒体文件创建一个可访问的URI。
3、服务器必须创建播放列表文件,格式按照3节要求,URI按播放顺序排列,播放列表中每个URI的媒体文件必须是可被客户端完整访问的。
4、播放列表文件必须包含EXT-X-TARGETDURATION,指明播放列表中所有媒体文件的maximum EXTINF,并且其值在整个展示过程中保持不变,典型是10s。
5、服务器需要给播放列表文件创建一个可访问的URI。
6、播放列表文件的更新对客户端而言必须是原子的。
7、播放列表应该包含EXT-X-VERSION协议版本号。
8、播放列表通过HTTP分发时,服务器应该支持客户端的"gzip" Content-Encoding
9、服务器不能更改EXT-X-ALLOW-CACHE标签值
10、每个媒体文件URI前必须有EXTINF标签
11、服务器可以在媒体文件URI前放置EXT-X-PROGRAM-DATE-TIME标签,建立绝对日期时间与媒体文件的关联。日期和时间值提供媒体时间线与wall-clock时间的映射信息,可用于播放过程中的seek等目的。如果服务器提供这种映射,应该在每个EXT-X-DISCONTINUITY后放置EXT-X-PROGRAM-DATE-TIME。
12、如果播放列表包含展示的最后一个媒体文件,应放置EXT-X-ENDLIST。
13、如果播放列表没有EXT-X-ENDLIST,服务器必须更新播放列表文件,其中至少包含一个新的媒体文件URI。更新时间相对上次更新时间间隔应该在[0.5,1.5]倍的#EXT-X-TARGETDURATION时间范围内(通常为[5,15]s)。
14、如果服务器打算删除整个展示,令播放列表对客户端不可见,但播放列表中媒体文件对客户端仍然可见,至少保留播放列表间隔时长。
文章源地址:http://blog.csdn.net/yangzhiloveyou/article/details/8922341