为什么 AVPlayer 在同一个会话中询问多个联合范围?

问题描述 投票:0回答:1

我想知道为什么 AVPlayer 会问 请求中的联合范围。 例子: 1.我们有良好的无线网络连接。 2. 总长度 = 1000000 的轨道。

AVPlayer 首先会询问

bytes=0-1
- 没关系,它只是“ping”曲目的可用性。

但之后它会询问

bytes=0-999999
- 并得到
content-len 1000000
;

之后它会询问

bytes=40000-999999
- 并得到
content-len 599999

如果我们必须拥有第二个请求的所有数据(字节=0-999999),为什么它会发出第三个请求?

ios stream http-headers avplayer
1个回答
0
投票

对于那些将来想知道同样问题的人: 发生这种情况是因为 AVPlayer 最初对视频一无所知。它需要下载文件的前几块来读取标头和初始化数据,通常是前 50k 字节。

此后,AVPlayer 将取消具有完整字节范围的初始请求,然后使用

bytes=<0 + downloaded bytes>-<length>
创建新请求。它将下载额外的字节,取消请求,然后创建一个新的请求。

因此,AVPlayer 不会多次下载所有字节。苹果为何采用这一策略尚不清楚。它可能是为了有限移动网络的冗余并支持更快的搜索。

© www.soinside.com 2019 - 2024. All rights reserved.