Dash Hls SmoothStreaming manifest 文件字段解释

来源:互联网 发布:c语言流程图怎么画 编辑:程序博客网 时间:2024/06/11 02:43

DASH


manfest 中以 .mpd 结尾


<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="static" mediaPresentationDuration="PT25.959S" availabilityStartTime="2012-12-17T15:56:16Z" maxSegmentDuration="PT2.080S" minBufferTime="PT2.001S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period id="0">
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" maxWidth="640" maxHeight="360" maxFrameRate="30000/1001" par="16:9">
<SegmentTemplate presentationTimeOffset="9498" timescale="90000" initialization="seg_$RepresentationID$_init.mp4" media="seg_$RepresentationID$_n$Number$.mp4" duration="180000" startNumber="0"/>
<Representation id="b1000k_v" width="640" height="360" frameRate="30000/1001" sar="1:1" scanType="progressive" bandwidth="1000000" codecs="avc1.4D401E"/>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" lang="en" segmentAlignment="true" startWithSAP="1"><SegmentTemplate presentationTimeOffset="2533" timescale="24000" initialization="seg_$RepresentationID$_init.mp4" media="seg_$RepresentationID$_n$Number$.mp4" duration="48000" startNumber="0"/>
<Representation id="a" audioSamplingRate="24000" bandwidth="64000" codecs="mp4a.40.5">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet></Period></MPD>


MPEG DASH作为三大流媒体协议之一,诞生的目的是为了统一标准,因此是兼容SmoothStreaming和HLS的,然而协议内容较多,相对复杂,从各自协议的页数对比就能看出。

 

MPD:Media Presentation Description.

    描述整个mpeg dash码流的构成,相当于HLS协议的m3u8文件,MPD是一个XML Document,通过MPD的内容可以构造出用于HTTP GET下载的URLMPD文件可以被加密,请参考http://www.w3.org/TR/xmlenc-core/,可以使用数字签名和验证,请参考http://www.w3.org/TR/xmldsig-core/。

    注:XML标准是由W3C制定的,关于XML schemahttp://www.w3.org/2001/XMLSchema。

 

MpegdashHLS,以及Smooth Streaming的对比:

    Smooth Streaming我自己不太了解。mpeg dash试图同时兼容这两种协议,因此显得更为复杂,同时支持TS profile和 ISO profile,支持节目观看等级控制,支持父母锁?mpeg dash支持的DRM类型包括PlayReadyMarlin,而HLS支持的是AES128密钥长度为128位的高级加密标准Advanced Encryption Standard)加密类型。

 

Period:

    一条完整的mpeg dash码流可能由一个或多个Period构成,每个Period代表某一个时间段。比如某条码流有60秒时间,Period1从0-15秒,Period216秒到40秒,Period341秒到60秒。同一个Period内,意味着可用的媒体内容及其各个可用码率(Representation)不会发生变更。直播情况下,“可能”需要周期地去服务器更新MPD文件,服务器可能会移除旧的已经过时的Period,或是添加新的Period。新的Period中可能会添加新的可用码率或去掉上一个Period中存在的某些码率(Representation)。


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将被单独描述。

 

media content component:

    一个media content component表示表示一个不同的音视频内容,比如不同语言的音轨属于不同的media content component,而同一音轨的不同码率(mpeg dash中叫做Representation)属于相同的media content component。如果是TS profile,同一个码率可能包括多个media content components。

 

Representation:

    每个Adaptationset包含了一个或者多个Representations,一个Representation包含一个或者多个media streams,每个media stream对应一个media content component。为了适应不同的网络带宽,dash客户端可能会从一个Representation切换到另外一个Representation,如果不支持某个Representation的编码格式,在切换时可以忽略之。

 

media content componentRepresentationmedia stream的关系:

    一个media content component可包含多个不同的编码版本(Encoded Versions),每一个编码版本都是一个media stream,每个Representation可包含1..Nmedia streamTS profile ,在同一个Segment中复用了音频和视频。),每个media stream对应一个不同的media content component

 

Sub-Representation:

    一个Representation可能包含多个Sub-Representation,这种情况还没遇到过。

 

Segment

    与HLS协议的segment概念是一样的,每个Representation由一个或者多个segment组成,只由一个segment组成的形式不能应用于网络直播。每个segment由一个对应的URL指定,也可能由相同的URL+不同的byte range指定。dash 客户端可以通过HTTP协议来获取URL+byte range)对应的分片数据。MPD中描述segment URL的形式有多种,如Segment listSegment templateSingle segment

 

Initialization Segment

    RepresentationSegments一般都采用1Init Segment+多个普通Segment的方式,还有一种形式就是Self Initialize Segment,这种形式没有单独的Init Segment,初始化信息包括在了各个Segment中。Init Segment中包含了解封装需要的全部信息,比如Representation中有哪些音视频流,各自的编码格式及参数。对于 ISO profile来说(容器为MP4),包含了moov box,H264的sps/pps数据等关键信息存放于此(avCc box)。

    另外,同一个Adaptation set的多个Representation还可能共享同一个Init Segment,该种情况下,对于ISO profile来说,诸如stsd boxavCc box等重要的box会含有多个entry,每个entry对应一个Representation,第一个entry对应第一个Representation,第二个entry对应第二个Representation,以此类推。

 

Subsegment:

    Segment可能进一步划分为subsegment,每个subsegment由数个Acess Unit组成,Segment index提供了subsegment相对于Segment的字节范围和presentation time range 。客户端可以先下载Segment index

 

Subset

    每个Period可能包含多个SubsetSubset定义 了一个集合,该集合包含1个或者多个AdaptationSet。客户端在播放mpeg dash流时,要求任何时间播放的所有AdaptationSets必须是某个Subset包含的AdaptationSets的一个子集。

 

SAP和无缝切换以及SEEK

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




HLS


主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

gear1/prog_index.m3u8 是子manifest,在对应的相对路径下可以寻找到:


子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


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

1、M3U8文件

   用文本方式对媒体文件进行描述,由一系列标签组成。

#EXTM3U

#EXT-X-TARGETDURATION:5

#EXTINF:5,

./0.ts

#EXTINF:5,

./1.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.







0 0