AVPlayer URL custom loading

Hi,


I'm trying to use AVPlayer with custom URL loading. We have a custom NSURLProtocol subclass. But it seems [NSURLProtocol registerClass] does not work directly with AVPlayer in real device (see this thread).


Now I'm trying to use AVAssetResourceLoaderDelegate to do the custom URL loading. However it is a bit confusing to me how the delegate will be triggered. The URL looks like this "https://<some_ip_address>:<port>/resource/", however the protocol is not standard HTTP/1.1 (it's QUIC based instead). I did something like following, but does not work:


(delegate is implemented in a different file)


        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:^{}];


With the above, I cannot see any methods are triggered in the delegate. What am I missing to allow the delegate to do custom URL loading for "https" URLs ?


Thanks
Han

Replies

Just to follow up, from my research elsewhere, looks like only if AVAsset has a custom URL scheme, AVAssetResourceLoaderDelegate will be called. In other words, known schemes like "http" or "https" will not trigger AVAssetResourceLoaderDelegate.