原文地址:https://tools.ietf.org/html/draft-pantos-http-live-streaming-23php
一、HTTP直播流介绍html
HTTP实时流媒体提供了一个可靠的,成本效益的手段经过互联网提供连续和长时间的视频。它容许接收器使媒体的比特率适应当前网络条件,以保持不间断播放最好的质量。它支持插页式内容边界。它为媒体加密提供了一个灵活的框架。它能够有效地提供相同内容的多个呈现,例如:音频翻译。它提供了与大规模HTTP的兼容性缓存基础设施以支持向大量受众传递。缓存
自2009年首次发布草案以来,HTTP Live Streaming已经有了已经被普遍的内容制做者实施和部署,工具供应商,分销商和设备制造商。在里面随后的八年,协议已被普遍的提炼与各类媒体流媒体实现者进行回顾和讨论。服务器
本文档的目的是为了促进互操做性在HTTP实时流媒体实现之间经过描述媒体传输协议。使用这个协议,客户端能够收到一个来自服务器的连续媒体流以便并行呈现。网络
本文档介绍协议的第7版。框架
二、概念ide
多媒体演示由统一资源指定标识符(URI)[ RFC3986 ]播放列表。工具
播放列表是媒体播放列表或主播放列表。二者都是包含URI和描述性标签的UTF-8文本文件。优化
媒体播放列表包含媒体片断的列表,当播放时依次播放多媒体演示。编码
这里是一个媒体播放列表的例子:
#EXTM3U #EXT-X-TARGETDURATION:10 #EXTINF:9.009, http://media.example.com/first.ts
#EXTINF:9.009, http://media.example.com/second.ts
#EXTINF:3.003, http://media.example.com/third.ts
第一行是格式标识符标签#EXTM3U。该线包含#EXT-X-TARGETDURATION表示全部媒体片断将会是10秒或更少。而后宣布三个媒体分段。第一和第二是9.009秒长, 三是3.003秒。
要播放此播放列表,客户端首先下载它而后下载并播放在其中声明的每一个媒体分段。该客户端将按照本文档中的描述从新加载播放列表以发现任何额外的细分。数据应该经过HTTP [ RFC7230 ] 传送,可是一般一个URI能够指定任何能够可靠传输的协议指定的资源按需。
主播放列表能够描述更复杂的演示。一个主播放列表提供了一组变体流,其中每个描述了相同内容的不一样版本。
变体流包括指定媒体的媒体播放列表以特定的比特率编码,以特定的格式编码,并以包含视频的媒体的特定分辨率。
一个Variant流也能够指定一组Renditions。译丛是内容的替代版本,例如制做的音频不一样的语言或不一样的摄像机角度录制的视频。
客户应该在不一样的变体流之间切换以适应网络情况。客户应根据用户选择Renditions优先。
关键词“必须”,“不得”,“须要”,“应该”,“不该该”,“应该”,“不该该”,“推荐”,“可能”和“可选”文档将按照RFC 2119 [ RFC2119 ]中的描述进行解释。
三、媒体细分
媒体播放列表包含一系列组成的媒体片断总体介绍。媒体段由URI和可选地一个字节范围。
媒体播放列表中显示了每一个媒体段的持续时间经过其EXTINF标签(第4.3.2.1节)。
媒体播放列表中的每一个片断都有惟一的整数媒体序列数。媒体中第一个片断的媒体序列号播放列表为0,或在播放列表中声明(第4.3.3.2节)。每隔一段的媒体序列号等于媒体序列号以前的段加1。
每一个媒体段必须带有编码的延续从之前的媒体段的末尾的比特流序列号,一系列的值,如时间戳和连续性计数器必须不中断。惟一的例外是媒体播放列表中第一个出如今媒体播放列表中的媒体细分媒体分段明确表示为不连续(第4.3.2.3节)。未标记的介质不连续能够触发播放错误。
包含视频的任何媒体片断都应该包含足够的内容信息来初始化视频解码器并解码连续集合包含段中最后一帧的帧; 网络若是细分中有足够的信息,效率会获得优化解码段中的全部帧。例如,任何媒体细分包含H.264视频应该包含一个IDR; 以前的帧第一个IDR将被下载,但可能被丢弃。
四、支持的媒体段格式
全部媒体片断必须采用本节所述的格式。其余媒体文件格式的传输未定义。
一些媒体格式须要一个相同的字节序列来初始化a能够解析Media Segment以前的解析器。这种格式特定的序列被称为媒体初始化部分。媒体初始化部分能够由EXT-X-MAP指定(第4.3.2.5节)标签。媒体初始化部分不能够包含样本数据。
简单的媒体播放列表
#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXTINF:9.009, http://media.example.com/first.ts
#EXTINF:9.009, http://media.example.com/second.ts
#EXTINF:3.003, http://media.example.com/third.ts
#EXT-X-ENDLIST
Live Media播放列表,使用HTTPS
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:2680 #EXTINF:7.975, https://priv.example.com/fileSequence2680.ts
#EXTINF:7.941, https://priv.example.com/fileSequence2681.ts
#EXTINF:7.975, https://priv.example.com/fileSequence2682.ts
说明:绝对
带有加密媒体段的播放列表
#EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:7794 #EXT-X-TARGETDURATION:15 #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52" #EXTINF:2.833, http://media.example.com/fileSequence52-A.ts
#EXTINF:15.0, http://media.example.com/fileSequence52-B.ts
#EXTINF:13.333, http://media.example.com/fileSequence52-C.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53" #EXTINF:15.0, http://media.example.com/fileSequence53-A.ts
主播放列表
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000 http://example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000 http://example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000 http://example.com/hi.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" http://example.com/audio-only.m3u8
主播放列表I帧
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000 low/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=2560000 mid/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=7680000 hi/audio-video.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5" audio-only.m3u8
主播放列表与替代音频
#EXTM3U #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \ DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \ URI="main/english-audio.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \ DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \ URI="main/german-audio.m3u8" #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \ DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="en", \ URI="commentary/audio-only.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac" low/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac" mid/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac" hi/video-only.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac" main/english-audio.m3u8
主播放列表与替代视频
#EXTM3U #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \ DEFAULT=YES,URI="low/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \ DEFAULT=NO,URI="low/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \ DEFAULT=NO,URI="low/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low" low/main/audio-video.m3u8 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \ DEFAULT=YES,URI="mid/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \ DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \ DEFAULT=NO,URI="mid/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid" mid/main/audio-video.m3u8 #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \ DEFAULT=YES,URI="hi/main/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \ DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8" #EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \ DEFAULT=NO,URI="hi/dugout/audio-video.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi" hi/main/audio-video.m3u8