我正在尝试编写自定义resourceLoader委托以使用AVURLAsset。我已经开始使用Apple的AVARLDelegateDemo代码了。我正在尝试播放HLS网址。我正在iPad上测试。
我注意到播放列表文件(.m3u8)被正确下载。然后还会下载视频文件(.ts)。我知道.ts文件已下载,因为我可以在状态为200的Web服务器上看到GET请求完成。我还在以下行设置了一个断点:
[loadingRequest.dataRequest respondWithData:data];
数据长度与文件大小匹配,第一个字节是.ts(0x47)的同步字节。
问题是该应用程序显示错误代码。弹出以下对话框:
"操作无法完成。发生未知错误(-12881)"
Google搜索此错误并未显示任何信息。我不知道要检查什么或如何获取更多信息。这不是应用程序崩溃并给我一个堆栈跟踪。视频拒绝播放,除了"未知错误-12881"这不是很多。
另外,如果我在我的播放列表中指出未修改版本的演示代码,视频播放就可以了。
谁能告诉我出了什么问题?这是我自定义资源加载器的代码。
- (BOOL) resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest
NSURLRequest *redirect = nil;
redirect = [self generateRedirectURL:(NSURLRequest *)[loadingRequest request]];
if (redirect)
{
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:redirect.URL
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
[loadingRequest.dataRequest respondWithData:data];
[loadingRequest finishLoading];
}] resume];
} else
{
[self reportError:loadingRequest withErrorCode:badRequestErrorCode];
}
return YES;
}
答案 0 :(得分:6)
记录:
我与Apple Developer Tech Support就试图使用AVAssetResourceLoaderDelegate访问.ts文件的问题进行了联系。这种方法不起作用,因为:
"
无法访问数据 下载。 iOS仅允许通过以下方式返回以下内容 HTTP Live Streaming媒体的AVAssetResourceLoaderDelegate: - 关键要求 - 播放列表 - 媒体重定向
"
对于我的用例,我最终使用本地Web服务器(https://github.com/swisspol/GCDWebServer)并将所有请求发送到应用程序内的Web服务器。然后,此Web服务器向远程服务器发出请求