1官方文档
官方文档地址:
HTTP Live Streamingdraft-pantos-http-live-streaming-11
http://tools.ietf.org/html/draft-pantos-http-live-streaming-11
此文档共计发布了11个版本
本系统自2012年发布,当时采用的是 No.08版,之后跟随新版做了部分修订,主体保持不变。
http://tools.ietf.org/html/draft-pantos-http-live-streaming-08
而在HLS官方文档的更新中,做到了前向兼容,没有出现版本升级造成旧的TAG无法使用的问题。
为了保证老版本的IOS对HLS的支持,本系统当前采用了HLS V2。
例如:
Durations MUST be integers if the protocol version of the Playlist fileis less than 3.
2 本系统提供的内容示例
本系统提供的主索引(manifest)如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=204800, RESOLUTION=240x180
/xxxx/200.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460800, RESOLUTION=480x360
/xxxx/450.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=870400, RESOLUTION=480x360
/xxxx/850.m3u8
对于4月1日之前的视频,提供的内容如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=204800
/xxxx/200.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460800
/xxxx/450.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=870400
/xxxx/850.m3u8
两者的区别在于:
今年4月之后新生产的视频补充了一个属性:RESOLUTION,以视频的分辨率信息
3 关键TAG说明:
以下将对manifest的关键TAG以官方标准文档为基础,做一个中文说明以及补充。
涉及到的TAG有:
EXTM3U
EXT-X-STREAM-INF
PROGRAM-ID
BANDWIDTH
RESOLUTION
<URI>
3.1 EXTM3U
请参阅[Page 6]
仅仅是为了对苹果传统的播放列表m3u文件做一个区别。约定俗成即可。
3.2 EXT-X-STREAM-INF
请参阅[Page 14]
该标签仅仅对跟随它的URI所指定的多媒体资源有效。
3.3 PROGRAM-ID
请参阅[Page 14]
以上文的示例说明:
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=204800, RESOLUTION=240x180
该TAG对应的是一个整数,这个整数可以任意指定。本系统默认指定1. 如无需要,可以直接忽略。
3.4 BANDWIDTH
请参阅[Page 14]
表达码率信息。
以上文的示例说明:
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=204800, RESOLUTION=240x180
需要注意两点:
首先,换算关系 bits/second 以及 kilo-bits/second。需要获得我们日常所说的200码率、450码率,需要 ${ BANDWIDTH } / 1024。如:204800 / 1024 = 200
第二,本系统的输出确保必须带有该TAG。这也是文档所要求的,亦即MUST
特别说明:HLS标准协议严格区分了 MUST和 MAY / SHOULD的区别。
在通常情况下,缺失MUST TAG会造成manifest无法正常解析,视频无法播放。
而缺失MAY TAG or SHOULD TAG不会对IOS内核的播放器造成影响。但是对于ANDROID等non-native media player可能会出现问题。
3.5 RESOLUTION
请参阅[Page 14]
提供视频解析率信息。
其格式如下定义:
如:RESOLUTION=240x180
此TAG不是必要的,而且在老视频的manifest中并不提供,如无需要,可以直接忽略。本系统提供该TAG出于其他需要。
此标签的提供并不对文档所提及的3.4.10.1. Alternative Renditions造成影响。
3.6<URI>
HLS并未对URI的格式做任何说明,
至于URI的语法等可参考如下链接;
W3C 《URIs, URLs, andURNs: Clarifications and Recommendations 1.0》
http://www.w3.org/TR/uri-clarification/
或者更为详细的:
5.2. Resolving Relative References toAbsolute Form [Page 20]
http://www.ietf.org/rfc/rfc2396.txt
示例:
(取自http://en.wikipedia.org/wiki/Uniform_resource_identifier示例内容)
亦即,HLS协议对URI并无要求或者遵循RFC2396即可。
关于URI的补充说明:
Adobe的HDS协议对URI做了硬性的规定:
详见<media>说明:
亦即,HDS对URI的处理逻辑是:如果url非绝对路径,那么,它必须与baseURL相关(如果指定)或者与manifest文件同一个目录。
对比可见,HLS并不强制要求路径不能以”/”开头,client开发过程中,最好严格依照标准协议处理,对其他的口头消息来源不予采信。