原文地址:https://tools.ietf.org/html/draft-pantos-http-live-streaming-23

1、HTTP直播流介绍

  HTTP实时流媒体提供了一个可靠的,成本效益的手段通过互联网提供连续和长时间的视频。它允许接收器使媒体的比特率适应当前网络条件,以保持不间断播放最好的质量。它支持插页式内容边界。它为媒体加密提供了一个灵活的框架。它可以有效地提供相同内容的多个呈现,例如:音频翻译。它提供了与大规模HTTP的兼容性缓存基础设施以支持向大量受众传递。

自2009年首次发布草案以来,HTTP Live Streaming已经有了已经被广泛的内容制作者实施和部署,工具供应商,分销商和设备制造商。在里面随后的八年,协议已被广泛的提炼与各种媒体流媒体实现者进行回顾和讨论。

本文档的目的是为了促进互操作性在HTTP实时流媒体实现之间通过描述媒体传输协议。使用这个协议,客户端可以收到一个来自服务器的连续媒体流以便并行呈现。

本文档介绍协议的第7版。

2、概念

多媒体演示由统一资源指定标识符(URI)[ RFC3986 ]播放列表。

播放列表是媒体播放列表或主播放列表。两者都是包含URI和描述性标签的UTF-8文本文件。

媒体播放列表包含媒体片段的列表,当播放时依次播放多媒体演示。

这里是一个媒体播放列表的例子:

   #EXTM3U
#EXT-X-TARGETDURATION: #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 ]中的描述进行解释。

3、媒体细分

媒体播放列表包含一系列组成的媒体片段整体介绍。媒体段由URI和可选地一个字节范围。

媒体播放列表中显示了每个媒体段的持续时间通过其EXTINF标签(第4.3.2.1节)。

媒体播放列表中的每个片段都有唯一的整数媒体序列数。媒体中第一个片段的媒体序列号播放列表为0,或在播放列表中声明(第4.3.3.2节)。每隔一段的媒体序列号等于媒体序列号之前的段加1。

每个媒体段必须带有编码的延续从以前的媒体段的末尾的比特流序列号,一系列的值,如时间戳和连续性计数器必须不中断。唯一的例外是媒体播放列表中第一个出现在媒体播放列表中的媒体细分媒体分段明确表示为不连续(第4.3.2.3节)。未标记的介质不连续可以触发播放错误。

包含视频的任何媒体片段都应该包含足够的内容信息来初始化视频解码器并解码连续集合包含段中最后一帧的帧; 网络如果细分中有足够的信息,效率会得到优化解码段中的所有帧。例如,任何媒体细分包含H.264视频应该包含一个IDR; 之前的帧第一个IDR将被下载,但可能被丢弃。

4、支持的媒体段格式

所有媒体片段必须采用本节所述的格式。其他媒体文件格式的传输未定义。

一些媒体格式需要一个相同的字节序列来初始化a可以解析Media Segment之前的解析器。这种格式特定的序列被称为媒体初始化部分。媒体初始化部分可以由EXT-X-MAP指定(第4.3.2.5节)标签。媒体初始化部分不可以包含样本数据。

简单的媒体播放列表

   #EXTM3U
#EXT-X-TARGETDURATION:
#EXT-X-VERSION:
#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:
#EXT-X-TARGETDURATION:
#EXT-X-MEDIA-SEQUENCE: #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:
#EXT-X-MEDIA-SEQUENCE:
#EXT-X-TARGETDURATION: #EXT-X-KEY:METHOD=AES-,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-,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=,AVERAGE-BANDWIDTH=
http://example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,AVERAGE-BANDWIDTH=
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,AVERAGE-BANDWIDTH=
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8

主播放列表I帧

   #EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=
low/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=,URI="low/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=
mid/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=,URI="mid/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=
hi/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=,URI="hi/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=,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=,CODECS="...",AUDIO="aac"
low/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,CODECS="...",AUDIO="aac"
mid/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,CODECS="...",AUDIO="aac"
hi/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=,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=,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=,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=,CODECS="...",VIDEO="hi"
hi/main/audio-video.m3u8

流媒体技术学习笔记之(十八)互联网草案HTTP直播流2017年5月的更多相关文章

  1. 流媒体技术学习笔记之(八)海康、大华IpCamera RTSP地址和格式

    海康: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 说明: username: 用户名 ...

  2. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  3. Android学习笔记(十八)——再谈升级数据库

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 之前我们为了保证数据库中的表是最新的,只是简单地在 onUpgrade()方法中删除掉了当前所有的表,然后强制 ...

  4. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  5. 流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录

    官方文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 一.最简单安装: apt-get install ffmpeg 二.安装最新版本 大 ...

  6. 流媒体技术学习笔记之(十四)FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务

    FFmpeg推送视频流,Nginx RTMP模块转发,VLC播放器播放,实现整个RTMP直播 查看本机电脑的设备 ffmpeg -list_devices true -f dshow -i dummy ...

  7. 流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S)

    1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的 ...

  8. 流媒体技术学习笔记之(十六)H264编码profile & level控制

    H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseline Profile:基本画质.支持I/P 帧,只支持无交错(Progressive)和 ...

  9. 流媒体技术学习笔记之(十五)FFmpeg编码遇到的错误、警告、Debug记录

    When encoding H.264 using ffmpeg I get the following type of warnings en masse: Past duration 0.6063 ...

随机推荐

  1. visualvm监控类是否是多例模式

    使用 visualvm干的第一件事情:监控类是否是多例模式 具体操作为: 1.首先启动本地项目,打开 jvisualvm,选择Tomcat(注意,在jdk目录下的名称里,命名前加了一个 j,别找不到了 ...

  2. linux(fedora) 第一课

    1.Linux查看ip地址:ifconfig(interface config) 2.find / -name ifconfig (查找 从/开始找 找名字 匹配ifconfing) 复制命令:Ctr ...

  3. angular2路由与express路由冲突的问题

    angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...

  4. HDU--1540 Tunnel Warfare(线段树区间更新)

    题目链接:1540 Tunnel Warfare 以为单组输入 这个题多组输入 结构体记录每个区间左边和右边的连续区间 ms记录最大 在查询操作时: 1.这个点即将查询到右区间 看这个点 x 是否存在 ...

  5. [HEOI2014]平衡

    [HEOI2014]平衡 转化为求选择k个数,和为(n+1)*k的方案数 保证,每个数[1,2*n+1]且最多选择一次. 限制k个很小,所以用整数划分的第二种方法 f[i][j],用了i个,和为j 整 ...

  6. java面试——jvm

    背景:用来总结java面试过程中与jvm相关的问题. 垃圾回收以及优化总结 <JVM 垃圾回收器工作原理及使用实例介绍> 介绍常用的垃圾回收算法,垃圾收集器,垃圾收集器相关的调试参数. J ...

  7. CF954F Runner's Problem(DP+矩阵快速幂优化)

    这题是一年前某场我参加过的Education Round codeforces的F题,当时我显然是不会的. 现在看看感觉应该是能做出的. 不扯了写题解: 考虑朴素的DP,在不存在障碍的情况下:f[i] ...

  8. XTest

    腾讯优测是一个移动云测试平台,为应用.游戏.H5混合应用的研发团队提供产品质量检测与问题解决服务. 这是腾讯内部针对微信内的H5,做了一套专门的UI自动化框架.而且都是用真机来跑这些框架,在真机上模拟 ...

  9. python enumarate方法的使用

    '''enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中.'''

  10. Ubuntu16安装wine(转)

    原文:ubuntu16.04安装最新版本的wine 1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安 ...