hls学习总结

声明:

        本文只是自己的一些学习总结,可能有不对的地方, 请您指正,同时希望我的文档对您有所帮助。

正文:

        hls是我最近接触的一种流媒体传输协议,而具体的关于hls的介绍大家可以去Google或者百度一下,接下来我只介绍自己学习后认为重要的知识点。

一,m3u8文件

        hls的主要是通过m3u8文件来存放各个切片的索引,而我们要下载视频时就是根据这些m3u8中给出的URL来下载ts切片。

        而具体的m3u8则分为一阶m3u8和二阶m3u8,而在一阶m3u8中主要列出了在不同码率下的二阶m3u8,而不同的码率其实就是对应不同的清晰度,如下面的两个一阶m3u8所示,他有两个码率分别为1300000和2300000,而播放器会根据你选择不同的码率来为你选择不同的playlist,这里提到的playlist对应的就是一个二阶m3u8的列表,在这个列表中依次存放着ts切片。而这些ts切片我们通常称其为segment。

        所以通过上面的一段话我们可以总结一下m3u8,

1. 一般m3u8分为两阶

2. 一阶m3u8中根据不同的码率包含不同的二阶m3u8

3. 一阶m3u8解析后根据不同的码率为每一个二阶m3u8分配一个playlist

4. 每个二阶m3u8中会依次列出视频的ts切片,每个ts切片称为一个segment

5. 每一个二阶m3u8的playlist中会存放属于这个码率下的segment,

        下面我们以更直观的列出了一阶和二阶m3u8,这样可以更形象的了解m3u8,下面以URL:http://bestvepg.itv.cmvideo.cn:8081 为例:

一阶m3u8:

#EXTM3U

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1300000

http://gslbserv.itv.cmvideo.cn/index.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2300000

http://gslbserv.itv.cmvideo.cn/index.m3u8




二阶m3u8:

#EXTM3U

#EXT-X-VERSION:1

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:1

#EXTINF:10

index_0_3075303_1.ts

#EXTINF:10

index_3075304_6944719_2.ts

#EXTINF:10

index_6944720_10281907_3.ts

#EXTINF:10

index_10281908_13467567_4.ts

#EXT-X-ENDLIST

        同时上面的一阶和二阶m3u8中的URL是不完整的,也就是说只使用一阶或者二阶m3u8 的URL是不能获得ts切片的,如果想要获得对应的ts切片就要将一阶和二阶的URL结合起来,例如我想要看码率为1300000下的第一个ts切片内容就要将码率为1300000对应的一阶m3u8的URL:http://gslbserv.itv.cmvideo.cn/index.m3u8 和码率为1300000下对应的二阶m3u8的第一个ts切片的URL:index_0_3075303_1.ts相结合,也就是:

http://gslbserv.itv.cmvideo.cn/index.m3u8/index_0_3075303_1.ts

        上面的URL下才可以获取对应的ts切片

tag介绍:

        介绍完协议就要介绍m3u8中的各个tag了。如上面的一阶和二阶m3u8,都有一些以#开头的tag,这些tag其实表示不同的意思。

#EXTM3U : 对于m3u8 文件来说一般是以这个tag作为开头部分,而很多程序中也是通过这个tag来判断是否为m3u8 文件

#EXT-X-ENDLIST: 有了开头自然要有结尾,所以通常要使用#EXT-X-ENDLIST这个tag作为结尾,但是这个结尾也只是对于点播(VOD)来说是成立的。因为我们知道对于直播节目(live)来说他是会一直播放下去的,所以直播是没有这个tag的。同时也有一些程序中选择使用这个tag作为点播和直播的区分,如苹果公司的解释:

#EXT-X-STREAM-INF : 用于指定一些流相关的信息,如上面提到的BANDWIDTH(带宽/码率),PROGRAM-ID等,而具体的属性有:

  • BANDWIDTH :码率
  • PROGRAM-ID :ID
  • CODECS: 不是必须的
  • RESOLUTION: 分辨率
  • AUDIO: 这个值必须和 AUDIO 类别的 EXT-X-MEDIA 标签中 GROUP-ID 属性值相匹配.
  • VIDEO: 同上

 

#EXT-X-VERSION:版本信息

#EXT-X-TARGETDURATION:指定最大的媒体段时间长(秒),ts切片的时间都会小于这个值

#EXT-X-MEDIA-SEQUENCE :定义当前m3u8文件中第一个文件的序列号,也就是说,从这个文件开始读取ts切片

#EXTINF: 每个ts切片的时间

当然一个m3u8文件还会有其他的tag,但是我只是将常用的几个列出,如果你碰到了其他的不懂的tag可以去Google或者百度一下就可以了。

 

参考文献:

苹果官网文档:Example Playlist Files for use with HTTP Live Streaming

点播和直播的不同:HLS实现点播和直播时,M3U8文件的不同

m3u8多码率:m3u8多码率适配详解

英文全:HTTP Live Streaming draft-pantos-http-live-streaming-16

hls介绍:初识 HLS 协议

                 HLS 协议详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值