AVPlayer播放受保护的HLS流,当token过期时如何更新?
创始人
2024-11-13 02:30:23
0

在 AVPlayer 中,可以使用 AVAssetResourceLoaderDelegate 来处理受保护的 HLS 流。当播放器需要获取资源时,会调用 resourceLoader(_:shouldWaitForLoadingOfRequestedResource:) 方法,我们可以在这个方法中获取到请求的 URL,并根据业务逻辑判断是否需要更新 token。

更新 token 的具体方法可以根据业务逻辑进行调整,这里给出一个示例代码:

class HLSResourceLoaderDelegate: NSObject, AVAssetResourceLoaderDelegate {

    var token: String
    
    init(token: String) {
        self.token = token
    }
    
    func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
        
        guard let url = loadingRequest.request.url, url.scheme == "https" else {
            // 非受保护的流,交由系统处理
            return false
        }
        
        // 根据业务逻辑判断是否需要更新 token
        
        let updatedURL = url.appendingQueryParameter(name: "token", value: token)
        let newRequest = URLRequest(url: updatedURL)
        loadingRequest.redirect = newRequest
        
        // 继续处理请求
        loadingRequest.continueLoading()
        
        return true
    }
}

extension URL {
    func appendingQueryParameter(name: String, value: String) -> URL {
        guard var urlComponents = URLComponents(url: self, resolvingAgainstBaseURL: false) else { return self }
        var queryItems = urlComponents.queryItems ?? []
        queryItems.append(URLQueryItem(name: name, value: value))
        urlComponents.queryItems = queryItems
        return urlComponents.url ?? self
    }
}

在创建 AVPlayerItem 时,需要指定资源加载器的代理,示例代码如下:

let hlsURL = URL(string: "https://example.com/hls.m3u8")!
let asset = AVURLAsset(url: hlsURL)
let resourceLoaderDelegate = HLSResourceLoaderDelegate(token: "initial

相关内容

热门资讯

必备教程"微信小程序... 必备教程"微信小程序多功能修改器"开挂(透视)wepokerplus脚本(有挂存在);亲真的是有正版...
普及知识"werpl... 普及知识"werplan开挂"开挂(透视)德普之星的辅助工具介绍(有挂方法);1、让任何用户在无需A...
每日必看推荐"赣牌圈... 每日必看推荐"赣牌圈小程序德隐藏机制"开挂(透视)wepoker提高好牌率(有挂攻略);超受欢迎的稳...
每日必看教程"新星游... 每日必看教程"新星游辅助软件"开挂(透视)hhpoker可以控制吗(有挂秘笈);AI辅助机器人普及解...
透视安装"广东雀神智... 透视安装"广东雀神智能插件智能价格"开挂(透视)pokemomo辅助软件(真的有挂);1、超多福利:...
记者爆料"相约十三张... 记者爆料"相约十三张辅助"开挂(透视)wepoker怎么挂飞机(有挂分析);相信小伙伴都知道这个相约...
教程攻略"拱趴大菠萝... 教程攻略"拱趴大菠萝怎么开挂"开挂(透视)agpoker辅助(真实有挂);软件透视开挂更新新赛季,主...
透视线上"微乐自建房... 透视线上"微乐自建房脚本使用安全吗"开挂(透视)hhpoker透视脚本(今日头条);人气非常高,ai...
今日百科"山西扣点有... 今日百科"山西扣点有没有辅助器"开挂(透视)werplan怎么作弊(有挂猫腻);1、很好的工具软件,...
推荐一款"丰城双剑辅... 推荐一款"丰城双剑辅助"开挂(透视)wpk软件是真的吗(有挂技巧);亲真的是有正版授权,小编(透视辅...