iOS开发

2015-10-15--ios视频的一些坑

2015-10-16  本文已影响914人  夜千寻墨

1. 

NSURLConnection 开启的请求最多只能同时进行4个,如果超过4个再开启请求,超出的部分将会处于挂起状态,如果前面有请求结束,取消等情况,后面的请求就会按顺序补上。如果处于挂起状态的请求如果等待时间过长,也会被自动取消。关于最多4个NSURLConnection请求,api里面并没有提到,在stackoverflow里面有很多人都有提到,并且我自己也验证了。

2.

 NSMutableURLRequest 如果要加上Range请求的范围,那么一定要这样创建请求:

NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:[actualURLComponentsURL]cachePolicy:NSURLRequestReloadIgnoringCacheDatatimeoutInterval:20.0];

[requestaddValue:[NSStringstringWithFormat:@"bytes=%ld-%ld",2000, 555555] forHTTPHeaderField:@"Range"];

self.connection= [[NSURLConnectionalloc]initWithRequest:requestdelegate:selfstartImmediately:NO];

如果你是这样创建的请求:

NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];

[requestaddValue:[NSStringstringWithFormat:@"bytes=%ld-%ld",2000, 555555] forHTTPHeaderField:@"Range"];

self.conn= [NSURLConnectionconnectionWithRequest:requestdelegate:self];

会有一个很严重的后果,对于同一个url,第一次加了什么样range范围,以后的请求不管加不加range,请求回来的request数据都是第一个range范围内的数据,简而言之,第一次加了什么range,以后怎么也改不了。关于这一点的原因api有提到。

3. 

正常状态下地请求,就是不加range的请求,返回的head中包含了contentType信息,但是加了range之后,就不包含了contentType信息了,如果是通过resourceLoader给AVplayer填充数据的形式实现视频的边下边播,每次请求都需要自己补充contentType信息。

4. 

通过resourceLoader给AVplayer填充数据的形式实现视频的边下边播,每次拖动都会产生很多个请求,实际上,只给最后一个请求填充数据,视频就能流畅播放。理论上每一个不需要的请求都会走一个结束的代理方法告知你取消,但是有一个并没有,如果只处理一个请求,表面上看上去没有问题,但是我们它的内部实现原理,找了很多资料,国外有些人只处理一个,有些人处理多个,没有一个定论。为了保险,还是处理多个吧。

上一篇下一篇

猜你喜欢

热点阅读