1 Reply
      Latest reply on Feb 14, 2020 11:32 AM by keepsimple
      keepsimple Level 1 Level 1 (0 points)

        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