我正在尝试在我的服务器上播放mp4视频,并且我想将此视频同时缓存到磁盘。
我知道我可以使用2个请求来执行此操作,一个用于下载另一个请求由AVPlayer创建以播放视频,但这会浪费网络带宽。
所以我只需要使用一个外部请求来下载数据并从MyNSURLProtocol中的AVPlayer捕获所有NSURLRequest,并为它们手动创建NSHTTPURLResponse。
这就是工作流程的样子:
AVPlayer <--> MyNSURLProtocol <--> mp4 over network.
通过使用Charles我可以看到AVPlayer在互联网上播放视频需要两个步骤。 第一步是下载前2个字节,以便了解整个视频文件的大小。 以下请求将同时下载文件的不同部分。
所以MyNSURLProtocol所做的只是下载整个mp4文件并带有外部请求,当有足够的数据时,它会创建发送给AVPlayer的响应(也是数据)。
这是为2字节请求创建和发送响应的方式。
NSMutableDictionary* headers = ... // Config the headers like this:
{
"Accept-Ranges" = bytes;
"Cache-Control" = public;
"Content-Length" = 2;
"Content-Range" = "bytes 0-1/6581417";
"Content-Type" = "video/3gpp";
Date = "Thu, 18 Apr 2013 08:34:35 GMT";
Expires = "Wed, 12 Feb 2014 08:34:35 GMT";
"Last-Modified" = "Tue, 16 Apr 2013 09:03:35 GMT";
"Connection" = Close;
Server = "gvs 1.0";
"X-Content-Type-Options" = nosniff;
}
NSHTTPURLResponse* response = [[NSHTTPURLResponse alloc] initWithURL:
self.request.URL statusCode:206 HTTPVersion:@"HTTP/1.1" headerFields:headers];
[self.client URLProtocol:self didReceiveResponse:response
cacheStoragePolicy:NSURLCacheStorageAllowed];
问题是 AVPlayer不发送以下请求来获取实际数据,hm ... 任何线索?
答案 0 :(得分:2)
好的,最后我发现了这个: How to play movie with a URL using a custom NSURLProtocol?
似乎自定义NSURLProtocol无法与AVPlayer一起使用。所以我放弃了。