MPMoviePlayerController和基于Auth的HLS后端服务器

Mar*_*ubé 5 mpmovieplayercontroller http-live-streaming ios

我目前正在iOS应用程序中提供视频MPMoviePlayerController.这些文件从需要身份验证的后端服务器流式传输.它是Authorization HTTP Header中基于密钥的身份验证集.

它曾经与单个视频文件完美配合.现在我们正在尝试实现HLS自适应流媒体,我们面临着一堵墙.我目前正在使用自定义NSURLProtocol子类来捕获对后端服务器发出的请求并注入适当的Authorization标头.对于HLS,它根本不起作用.

当我们查看服务器日志时,我们清楚地看到对m3u8文件的第一个请求工作正常.然后所有后续调用(其他m3u8文件和ts也)被禁止403.它似乎MPMoviePlayerControllerNSURLProtocol用于其他文件.(旁注:它确实适用于模拟器思想,但不适用于让我认为两者都没有以相同方式实现的物理设备).

MPMoviePlayerController实例化

self.videoController = [[MPMoviePlayerController alloc] initWithContentURL:video.videoURL];
Run Code Online (Sandbox Code Playgroud)

URL协议拦截

+ (NSURLRequest *) canonicalRequestForRequest:(NSURLRequest *)request {
    NSMutableURLRequest *newRequest = request.mutableCopy;
    [newRequest setValue:@"HIDDEN" forHTTPHeaderField:@"Authorization"];
    return newRequest;
}
Run Code Online (Sandbox Code Playgroud)

任何想法,建议,解决方案?

Mar*_*ubé 1

经过苹果开发者技术支持的验证后,我认为我想要实现的目标是不可能的(并且不受支持)。

以下是回复中的引用:

您在 NSURLProtocol 等方面看到的问题是电影播放子系统不会在您的进程中运行其 HTTP 请求。相反,这些请求是从单独的系统进程 mediaserverd 中运行的。因此,您影响该播放行为的所有努力都是徒劳的。