为 AVURLAssets 设置 HTTP 标头字段

Cos*_*ows 1 objective-c http-headers ios avplayer avasset

我正在尝试加载一个需要标头中的令牌的视频文件。我在 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];  
Run Code Online (Sandbox Code Playgroud)

小智 5

您的代码中一切都很好。这可能会在授权令牌中发出。

请检查以下代码,它与您的完全相同。*在 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()
    }
Run Code Online (Sandbox Code Playgroud)

  • 不会的。你不能使用函数调用等私有API,但使用密钥是可以的。我的应用程序都没有因为这样的原因被拒绝。 (3认同)