从基于Cookie的验证服务器的iOS流音频
问题描述:
我试图从基于会话的身份验证保护的服务器流式传输音频文件,我注意到MPMoviePlayerController和AVPlayerItem/AVPlayer似乎都没有使用在NSHTTPCookieStorage中设置Cookie。如果我使用NSURLConnection创建相同的URL请求,我得到一个200并且能够访问音频文件。当监控通过代理的请求,看来的MPMoviePlayerController不会设置请求头中的cookie,而NSURLConnection的作用:从基于Cookie的验证服务器的iOS流音频
请求用的MPMoviePlayerController的initWithContentURL
提出:
GET /path/on/server/test1.m4a HTTP/1.1
Host: server.example.net
User-Agent: AppleCoreMedia/1.0.0.9A334 (iPhone Simulator; U; CPU OS 5_0 like Mac OS X; en_us)
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
X-Playback-Session-Id: E8F093F4-C906-46A8-94FE-30BBCFDAB3F6
Connection: keep-alive
请求与NSURLConnection的制作:
GET /path/on/server/test1.m4a HTTP/1.1
Host: server.example.net
User-Agent: otest (unknown version) CFNetwork/548.0.3 Darwin/11.1.0
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Cookie: somekey=abc123def456
Connection: keep-alive
有谁知道如何让MPMoviePlayerController或AVPlayerItem在请求远程资源时使用NSHTTPCookie?
答
在远程流/文件上使用MPMoviePlayerController
时,AFAIK无法强制实施cookie(或任何其他HTTP参数)。
也许一个GET参数可能是你的任务的解决方法?
答
您可以使用派生自NSURLProtocol的类从MPMoviePlayerController中拦截请求,并沿途注入cookie。这里的代码:https://stackoverflow.com/a/23261001/3547099
这基本上是我发现了。我结束了Matt Gallagher的AudioStreamer并修改它以支持自定义HTTP标头:https://github.com/arifken/AudioStreamer –