Пользовательская загрузка URL AVPlayer для HTTPS - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь использовать AVPlayer с пользовательской загрузкой URL (пользовательский NSURLProtocol подкласс). Но, похоже, [NSURLProtocol registerClass] не работает с AVPlayer на реальном устройстве (см. Этот поток ).

Теперь я пытаюсь использовать AVAssetResourceLoaderDelegate для пользовательской загрузки URL. Однако меня немного смущает, как делегат будет активирован. URL, с которым я имею дело, выглядит следующим образом https://some_ip_address:port/resource/, но, похоже, мой делегат не вызван для такого URL. Я попытался изменить схему на не HTTP (например, «qui c») и смог вызвать код делегата, но я действительно не хочу взламывать схему.

Вот соответствующий код:

(делегат реализован в другом файле)

    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». Чего мне не хватает, чтобы делегат мог выполнять пользовательскую загрузку URL-адресов для https-адресов?

Спасибо

1 Ответ

0 голосов
/ 21 февраля 2020

Просто чтобы получить ответ, как я решил проблему сейчас. Проще говоря, AVPlayer и AVAssetResourceLoader игнорируют делегата, если URL имеет схему «http» или «https».

Да, обходной путь заключается в замене схемы URL на какую-то собственную схему и замене ее обратно в обратном вызове делегата при извлечении данных.

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

Строка URL-адреса loadingRequest.request.URL.absoluteString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...