[HTTP的AVPlayer URL自定义加载

问题描述 投票:0回答:1

我正在尝试将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加载的内容吗?

谢谢

ios avplayer nsurlprotocol avassetresourceloaderdelegate
1个回答
0
投票

仅在我现在解决问题时回答一个问题。简而言之,如果URL的方案为“ http”或“ https”,则AVPlayerAVAssetResourceLoader将忽略委托。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.