Настройка полей заголовка HTTP для AVURLAssets

Я пытаюсь загрузить видеофайл, который требует токен в шапке. На Stackverflow я узнал, что это возможно, взглянув на следующий вопрос. Проблема в том, что я не верю, что AVURLAssetHTTPHeaderFieldsKey общедоступен, или я неправильно написал переменную своего ресурса. Я пытаюсь добавить токен в заголовки, чтобы AVPlayer мог загрузить видеофайл. Вот мой код, который показывает только проигрыватель, но не загружает видео, которое я предполагаю, потому что мои заголовки установлены неправильно:

NSURL *videoURL = [NSURL URLWithString:cell.media[@"redirectionUrl"]];

        NSMutableDictionary * headers = [NSMutableDictionary dictionary];
        [headers setObject:[CMUser currentUser].token forKey:@"Authorization"];

        AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:@{@"AVURLAssetHTTPHeaderFieldsKey" : headers}];


        AVPlayerItem * item = [AVPlayerItem playerItemWithAsset:asset];

        AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:item];

        AVPlayerViewController *playerViewController = [AVPlayerViewController new];

        playerViewController.player = player;

        playerViewController.modalPresentationStyle = UIModalPresentationOverFullScreen;

        [self presentViewController:playerViewController animated:YES completion:nil];  

1 ответ

Все хорошо в вашем коде. Это может привести к авторизации в токене.

Пожалуйста, проверьте следующий код, он полностью совпадает с вашим. * В Swift 4.0

    //MARK:- setting player
    fileprivate func setPlayRemoteUrl() {

        if playUrl == nil || playUrl == "" {
            return
        }
        removeAllObserver()
        resettingObject()

        let headerFields: [String:String] = ["User-Agent":"6y2zxABAb8oqeNec"]
        let asset: AVURLAsset = AVURLAsset.init(url: URL(string: self.playUrl)!, options: ["AVURLAssetHTTPHeaderFieldsKey": headerFields])
        self.playerItem = AVPlayerItem(asset: asset)
        self.player = AVPlayer.init(playerItem: playerItem)

        playerLayer = AVPlayerLayer(player: player)
        playerLayer?.videoGravity = AVLayerVideoGravity.resizeAspect
        playerLayer?.contentsScale = UIScreen.main.scale
        layer.insertSublayer(playerLayer!, at: 0)
        setAllObserver()
    }
Другие вопросы по тегам