Live Streaming Protocol--三种主流的流媒体协议MEPG DASH,HLS,Smooth Streaming及其manifest 文件字段解释

原文链接: https://blog.csdn.net/beautyfuel/article/details/53464705

文章目录

      • MPEG DASH协议
      • Manifest.mpd
        • 1. Manifest.mpd简介
        • 2. Manifest.mpd字段
      • HLS协议
        • 1. manifest.m3u8字段
        • 2. ts文件
      • smoothstreaming协议

本篇博客参考于博客1,并且根据自己的理解,进行了重新整理.

MPEG DASH协议

三大流媒体协议:MPEG DASH, HLS,Smooth Streaming

MPEG DASH诞生的目的是为了统一标准,因此是兼容SmoothStreaming和HLS的.同时支持TS profile和 ISO profile,支持节目观看等级控制,支持父母锁. mpeg dash支持的DRM类型包括PlayReady和Marlin,而HLS支持的是AES128(密钥长度为128位的高级加密标准Advanced Encryption Standard)加密类型。

Manifest.mpd

1. Manifest.mpd简介

Manifest.mpd (MPD:Media Presentation Description) 文件是MPEG DASH编码视频的索引文件,该文件包含了整个mpeg dash码流的构成(manifest以.mpd结尾).包括视频流与音频流信息,视频chunk信息,视频码率,帧率,编码,带宽等信息.类似于HLS编码视频的m3u8文件是.MPD是一个XML Document,通过MPD的内容可以构造出用于HTTP GET下载的URL。其优势就是不需要流媒体服务器缓存该视频的全部视频流,客户端请求视频服务器,服务器将manifest.mpd发送给客户端,客户端可以根据视频的URL+不同的byte range指定(chunk的url)进行任意chunk的下载,更加灵活.
Live Streaming Protocol--三种主流的流媒体协议MEPG DASH,HLS,Smooth Streaming及其manifest 文件字段解释_第1张图片

2. Manifest.mpd字段

1. Period
一条完整的mpeg dash码流可能由一个或多个Period构成,每个Period代表某一个时间段。比如某条码流有60秒时间,Period1从0-15秒,Period2从16秒到40秒,Period3从41秒到60秒。同一个Period内,意味着可用的媒体内容及其各个可用码率(Representation)不会发生变更。直播情况下,“可能”需要周期地去服务器更新MPD文件,服务器可能会移除旧的已经过时的Period,或是添加新的Period。新的Period中可能会添加新的可用码率或去掉上一个Period中存在的某些码率(Representation)。
2. Adaptationset
一个Period由一个或者多个Adaptationset组成。Adaptationset由一组可供切换的不同码率的码流(Representation)组成,这些码流中可能包含一个(ISO profile)或者多个(TS profile)media content components,因为ISO profile的mp4或者fmp4 segment中通常只含有一个视频或者音频内容,而TS profile中的TS segment同时含有视频和音频内容,当同时含有多个media component content时,每个被复用的media content component将被单独描述。
3. Representation
每个Adaptationset包含了一个或者多个Representations,一个Representation包含一个或者多个media streams,每个media stream对应一个media content component。为了适应不同的网络带宽,dash客户端可能会从一个Representation切换到另外一个Representation,如果不支持某个Representation的编码格式,在切换时可以忽略之。
4. media content component
一个media content component表示一个不同的音视频内容,比如不同语言的音轨属于不同的media content component,而同一音轨的不同码率(mpeg dash中叫做Representation)属于相同的media content component。如果是TS profile,同一个码率可能包括多个media content components。
5. Segment
与HLS协议的segment概念是一样的,每个Representation由一个或者多个segment组成,只由一个segment组成的形式不能应用于网络直播。每个segment由一个对应的URL指定,也可能由相同的URL+不同的byte range指定。dash 客户端可以通过HTTP协议来获取URL(+byte range)对应的分片数据。MPD中描述segment URL的形式有多种,如Segment list,Segment template,Single segment。

  • Initialization Segment: Representation的Segments一般都采用1个Init Segment+多个普通Segment的方式,还有一种形式就是Self Initialize Segment,这种形式没有单独的Init Segment,初始化信息包括在了各个Segment中。Init Segment中包含了解封装需要的全部信息,比如Representation中有哪些音视频流,各自的编码格式及参数。对于 ISO profile来说(容器为MP4),包含了moov box,H264的sps/pps数据等关键信息存放于此(avCc box)。
  • Subsegment: Segment可能进一步划分为subsegment,每个subsegment由数个Acess Unit组成,Segment index提供了subsegment相对于Segment的字节范围和presentation time range 。客户端可以先下载Segment index

6. SAP, 无缝切换, SEEK
SAP:Stream Acess Point,可以简单理解为I帧,每个Segment的第一个帧都是SAP,因此Seek时可直接Seek到某一个Segment的起始位置,利用Init Segment+Seek到的某个Segment的数据,在解封装后可实现完美解码。一般来说,同一个Adaptation set中的多个Representation是Segment Align的(当Adaptation set的属性@segmentAlignment不为false时),因此,当从Representation A切换到Representation B时,如果当前Representation A的第N个Segment已经下载完成,切换时直接下载Representation B的第N+1个Segment即可。

HLS协议

Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。

1. manifest.m3u8字段

HLS协议的manifest 以 .m3u8结尾. M3U8文件, 用文本方式对媒体文件进行描述,由一系列标签组成。

  • 主manifest文件
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8
  • 子manifest文件
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, no desc
fileSequence0.ts
#EXTINF:10, no desc
fileSequence1.ts
#EXTINF:10, no desc
fileSequence2.ts
#EXTINF:10, no desc
fileSequence3.ts
#EXTINF:10, no desc
fileSequence4.ts

#EXTM3U:每个M3U8文件第一行必须是这个tag。
#EXT-X-TARGETDURATION:指定最大的媒体段时间长度(秒)
#EXTINF中指定的时间长度必须小于或等于这个最大值。该值只能出现一次。
#EXTINF:描述单个媒体文件的长度。后面为媒体文件,如./0.ts

2. ts文件

ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。
ts文件分为三层:ts层Transport Stream、pes层 Packet Elemental Stream、es层 Elementary Stream. es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息

smoothstreaming协议

manifest 以 .ism结尾,并有一个附属文件ismc共同描述了一个content.

如有任何疑问,欢迎留言.

你可能感兴趣的:(Media,Streaming)