当前位置: 首页 > news >正文

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

 

转载于:https://www.cnblogs.com/panyuluoye/p/4967832.html

相关文章:

  • 你真的会玩SQL吗?实用函数方汇总
  • Lingo中命令脚本文件使用范例
  • c++ 复数类
  • 软件项目发展历史人月神话这本书好
  • Linux -- ubuntu下安装程序的三种方法
  • iOS 利用UIWebView与JavaScript交互的最简单办法(本人已验证可行)
  • 2015-10-14 晴 tcp/ip
  • 00.Python manage.py shell和 Python的分析
  • Visifire实现统计图
  • SecureCRT系列:生成公私钥
  • 技巧之:恢复linux被误删文件(方案有3)
  • 非法词判断
  • 教你爱上Blocks(闭包)
  • 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
  • 导出excel
  • Apache Pulsar 2.1 重磅发布
  • CSS实用技巧
  • gitlab-ci配置详解(一)
  • IndexedDB
  • JS数组方法汇总
  • TCP拥塞控制
  • 回流、重绘及其优化
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • zabbix3.2监控linux磁盘IO
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #{}和${}的区别是什么 -- java面试
  • #if 1...#endif
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (145)光线追踪距离场柔和阴影
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Java)【深基9.例1】选举学生会
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十一)手动添加用户和文件的特殊权限
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)WLAN定义和基本架构转
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • **CI中自动类加载的用法总结
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • ::什么意思
  • ?.的用法
  • @font-face 用字体画图标
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [android] 切换界面的通用处理
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项