【问题标题】:AVPlayer URL custom loading for HTTPSHTTPS 的 AVPlayer URL 自定义加载
【发布时间】:2020-05-27 11:07:55
【问题描述】:

我正在尝试将 AVPlayer 与自定义 URL 加载(自定义 NSURLProtocol 子类)一起使用。但似乎[NSURLProtocol registerClass] 不适用于真实设备中的 AVPlayer(请参阅此thread)。

现在我正在尝试使用 AVAssetResourceLoaderDelegate 进行自定义 URL 加载。但是,如何触发委托对我来说有点令人困惑。我处理的 URL 看起来像这样 https://some_ip_address:port/resource/,但似乎我的代表没有被调用来获取这样的 URL。我尝试将方案更改为非 HTTP(例如“quic”)并且能够触发委托代码,但我真的不想破解该方案。

相关代码如下:

(委托在不同的文件中实现)

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];  
    AVAssetResourceLoader *resourceLoader = asset.resourceLoader;  
    [resourceLoader setDelegate:delegate  
                          queue:dispatch_queue_create("MyURLDelegate loader", nil)];  
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];  
    AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];  
    AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];  
    controller.player = player;  
    [player play];  
    [self presentViewController:controller animated:false completion:^{}];  

通过上述,如果 url 具有“https”方案,我看不到在委托中触发了任何方法。我缺少什么来允许委托为“https”URL 进行自定义 URL 加载?

谢谢

【问题讨论】:

  • 您可以在加载项目时评估是否正在调用AVAssetDownloadURLSession.shareddelegate。此外,您有点希望具有完全私有网络处理的AVAssetResourceLoader 通过自定义NSURLProtocol 加载资产 - 这听起来不是一个好的设计。您可以自己在AVAssetDownloadURLSession 上完全实现流式传输吗?
  • @EugeneDudnyk 从 Apple 的文档 (developer.apple.com/documentation/avfoundation/…) 中,我找不到 sharedAVAssetDownloadURLSession 实例(我正在使用 obj-c)。我会对此进行更多研究。关于你的问题,是的,我正在使用ChromiumCronet,它提供了一个完整的网络堆栈(我想支持QUIC)。
  • sharedSession 在超类 NSURLSession 中声明。

标签: ios avplayer nsurlprotocol avassetresourceloaderdelegate


【解决方案1】:

只是在我现在解决问题时跟进答案。简单地说,AVPlayerAVAssetResourceLoader 如果 URL 具有“http”或“https”方案,则忽略委托。

是的,解决方法是用一些自定义方案替换 URL 方案,并在获取数据时将其替换回委托回调中。

- (BOOL) resourceLoader:(AVAssetResourceLoader *)resourceLoader
shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest

网址字符串为loadingRequest.request.URL.absoluteString

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多