我想知道为什么 AVPlayer 会问 请求中的联合范围。 例子: 1.我们有良好的无线网络连接。 2. 总长度 = 1000000 的轨道。
AVPlayer 首先会询问
bytes=0-1
- 没关系,它只是“ping”曲目的可用性。
但之后它会询问
bytes=0-999999
- 并得到 content-len 1000000
;
之后它会询问
bytes=40000-999999
- 并得到 content-len 599999
;
如果我们必须拥有第二个请求的所有数据(字节=0-999999),为什么它会发出第三个请求?
对于那些将来想知道同样问题的人: 发生这种情况是因为 AVPlayer 最初对视频一无所知。它需要下载文件的前几块来读取标头和初始化数据,通常是前 50k 字节。
此后,AVPlayer 将取消具有完整字节范围的初始请求,然后使用
bytes=<0 + downloaded bytes>-<length>
创建新请求。它将下载额外的字节,取消请求,然后创建一个新的请求。
因此,AVPlayer 不会多次下载所有字节。苹果为何采用这一策略尚不清楚。它可能是为了有限移动网络的冗余并支持更快的搜索。