HLS学习笔记(四):码率切换方案

1.码率切换的前提

只有在播放的视频码流有多种码率选择时才能进行对应的码率切换。

 

2.码率切换的选择

我们在播放视频的过程中经常会看到

清晰度优先:一直播放高码率 【默认】

流畅度优先:一直播放低码率

自动切换:从高码率开始,依据网速切换到其他码率;从低码率开始,依据网速切换到其他码率。

 

3. 自动切换码率切换算法

代码位置:_get_best_bandwidth_index()

算法:根据下载速度得到当前匹配的码率,和当前的播放码率对比,并结合当前的缓存来决定最终的调整结果

699 #define CODEC_BUFFER_LOW_FLAG  (20)

700 #define CODEC_BUFFER_HIGH_FLAG (30)

举例说明: 当前播放视频包含三个码率

#EXTM3U

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

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

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

在播放hls视频的时候, 当设置了码率自适应之后, 在每次下载完一个切片的时候,会依据上个切片的下载速度(80%)来决定是否要切换码率, 如果当前下载速度分别为:

1M = 那么其80%速度为 800K, 低于1300K, 那么会下载700K的码率

2M = 其80%速度为 1600K, 高于1300k低于2300k, 会下载1300K的码率

3M = 其80%速度为 2400K, 高于2300k, 会下载2300K的码率

 

4. 单个切片下载逻辑

单个切片的下载比较复杂, 在下载单个切片的时候,如果下载失败默认会retry ,如果网速特别差的情况下的每次http请求超时是3s, 但由于一次tcp下载超时是1s, 因此每次http read的超时大约是3-4s,而由于每次如果下载到实际的数据又会重新开始计算超时时间, 因此并不能固定每次retry的间隔, 但极端情况下(比如限速1k)我们的超时是: 30*3 大约是90s。这里我们底层会尽量的等比较多的时间原因是为了点播断网续播的时候尽量的少丢数据。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值