使用AVAssetResourceLoader时出现未知错误-12881

时间:2015-04-20 15:25:19

标签: ios

我正在尝试编写自定义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;
}

1 个答案:

答案 0 :(得分:6)

记录:

我与Apple Developer Tech Support就试图使用AVAssetResourceLoaderDelegate访问.ts文件的问题进行了联系。这种方法不起作用,因为:

"

  

无法访问数据   下载。 iOS仅允许通过以下方式返回以下内容   HTTP Live Streaming媒体的AVAssetResourceLoaderDelegate:    - 关键要求    - 播放列表    - 媒体重定向

"

对于我的用例,我最终使用本地Web服务器(https://github.com/swisspol/GCDWebServer)并将所有请求发送到应用程序内的Web服务器。然后,此Web服务器向远程服务器发出请求