• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - iOS 6 上的 AVAssetResourceLoaderDelegate 协议(protocol)

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:16:12 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我已经设法让 AVPlayerAVAssetResourceLoaderDelegate 一起在 iOS 7 上播放 m4a 文件,但我无法在 iOS 上执行此操作6.

- (BOOL)resourceLoaderAVAssetResourceLoader *)resourceLoader
shouldWaitForLoadingOfRequestedResourceAVAssetResourceLoadingRequest *)loadingRequest

委托(delegate)方法被以下请求调用:

2014-05-12 15:14:58.798 AVPlayer-Delegate[661:1103] Requested data: {
    Range = "bytes=0-1";
    "X-Playback-Session-Id" = "5B64BE4E-442A-4A37-9263-04D22CDBCB28";
}

我按要求返回了前两个字节,但委托(delegate)方法不再被调用。我试图在传递的响应对象中提供各种 header ,但没有帮助。

这是我的实现:

- (BOOL)resourceLoaderAVAssetResourceLoader *)resourceLoader

shouldWaitForLoadingOfRequestedResourceAVAssetResourceLoadingRequest *)loadingRequest

{

    NSLog(@"Requested data: %@",

          loadingRequest.request.allHTTPHeaderFields);

    NSDictionary *headers = @{@"Content-Type": @"audio/x-m4a",

                              @"Accept-Ranges" : @"bytes",

                              @"Content-Length" : [NSString stringWithFormat"%d", 2],

                              @"Content-Range" : [NSString stringWithFormat"bytes 0-1/%d", self.fileData.length],

                              @"X-Playback-Session-Id" : loadingRequest.request.allHTTPHeaderFields[@"X-Playback-Session-Id"],

                              @"ETag" : @"TAG"};

    NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:loadingRequest.request.URL statusCode:206 HTTPVersion"HTTP/1.1" headerFields:headers];

    //NSURLResponse *response = [[NSURLResponse alloc] initWithURL:loadingRequest.request.URL MIMEType"audio/m4a" expectedContentLength:self.fileData.length textEncodingName"UTF-8"];



    NSData *requestedData = [self.fileData subdataWithRange:NSMakeRange(0, 2)];

    [loadingRequest finishLoadingWithResponse:response data:requestedData redirect:nil];



    return YES;

}

如果能提供任何帮助,我将不胜感激。

谢谢。



Best Answer-推荐答案


AVAssetResourceLoaderDelegate 在 IOS 6 和 IOS 7 上的工作方式不同。参见 What's New in IOS 7.0

The AVAssetResourceLoaderDelegate protocol now supports loading of arbitrary ranges of bytes from a media resource.

IOS7 之前的标准解决方法是使用本地 HTTP 服务器。参见示例 https://stackoverflow.com/a/21225985

关于ios - iOS 6 上的 AVAssetResourceLoaderDelegate 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23612094/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap