HLS公开课(三)URL生成规则

614 阅读2分钟

M3U8中的URL的表示无处不在, 不管是基础的HLS片段还是Master的HLS类型, 都需要了解URL的计算规则: 下面介绍四种URL的表示:

1.直接给出url

#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

上面的每一个片段都直接指出了片段的具体url是什么,就是完整的url请求,我们在解析的时候就不需要对片段的具体为值进行拼接了,直接请求url即可

2.单文件名相对位置

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXTINF:9.009,
first.ts
#EXTINF:9.009,
second.ts
#EXTINF:3.003,
third.ts
#EXT-X-ENDLIST

这儿没有任何url, 只有片段的名字, 例如我们请求的视频url是media.example.com/index.m3u8 这样我们请求media.example.com/index.m3u8的…

3.带文件路径的相对位置

例如 douban.donghongzuida.com/20210109/15… 解析出来如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
1000k/hls/index.m3u8

这个1000k/hls/index.m3u8 就不是文件名这个简单了,是一个相对路径, 完整的路径是: douban.donghongzuida.com/20210109/15…

有时候也可以写成如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
/1000k/hls/index.m3u8

甚至可以写成如下:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
/15467_73a719b2/1000k/hls/index.m3u8

这时候你会生成douban.donghongzuida.com/20210109/15…, 显然是不对的.

这时候应该找 douban.donghongzuida.com/20210109/15… 共同的那部分,然后将共同的部分抹掉, 这样就能得到新的url了

4. 双斜杠相对位置

双斜杠后面一般直接就是域名了, 例如下面

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
//douban.donghongzuida.com/20210109/15467_73a719b2/1000k/hls/index.m3u8

这时候直接增加一个协议就可以的.

推荐一个视频下载的github项目: github.com/JeffMony/Vi…