当ABR客户端从一个比特率切换到另一个比特率时,如果段名称不表示任何顺序,它如何知道哪个是下一个要获取的段?例如可以说,已经读取了段1和段2的比特率x,现在客户端决定应该从子列表中读取段3以获取比特率y,它如何知道在子清单中读取哪个条目以获取URL具有比特率y的segment3?
每个实现都是不同的,但通常,ABR算法只是估计比特率,清单每比特率有一个列表段。随着时间(不可避免地)向前移动,并且下一个段将由于下载,玩家在给定ABR的输出的情况下以尽可能高的比特率从列表中选择下一个。
据我所知,从hls.js和exoplayer(HlsMediaSource)的源代码中,客户端根据当前缓冲区的结束时间选择下一个块,然后通过二进制搜索找到包含m3u8中结束时间的段。