You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ExoPlayer获取HLS Manifest中的KEYID属性?

在ExoPlayer中获取HLS Manifest的KEYID值

你需要先明确HlsManifest的具体类型——它可能是HlsMasterPlaylist(主播放列表)或HlsMediaPlaylist(媒体播放列表),而EXT-X-SESSION-KEY对应的KEYID信息,被封装在这两种Playlist的sessionKeys列表中的HlsSessionKey对象里。

直接用以下代码即可获取KEYID:

override fun onTimelineChanged(timeline: Timeline, reason: Int) {
    super.onTimelineChanged(timeline, reason)

    val manifest = exoPlayer.currentManifest as? HlsManifest ?: return
    
    // 根据Manifest类型提取会话密钥列表
    val sessionKeys = when (manifest) {
        is HlsMasterPlaylist -> manifest.sessionKeys
        is HlsMediaPlaylist -> manifest.sessionKeys
        else -> emptyList()
    }
    
    // 遍历密钥列表获取KEYID
    sessionKeys.forEach { sessionKey ->
        // keyId是ByteArray类型,对应Manifest中KEYID的二进制数据
        val keyIdBytes = sessionKey.keyId
        // 若需要转成和Manifest格式一致的十六进制字符串(不带0x前缀)
        val keyIdHex = keyIdBytes.joinToString("") { "%02X".format(it) }
        // 这里可以根据需求使用KEYID
        println("获取到的KEYID: $keyIdHex")
    }
}

补充说明:

  • Manifest里KEYID=0x0F6D11DA12344170C444C21C2DAB4482这样的十六进制值,会被ExoPlayer解析为ByteArray类型的keyId属性。
  • 如果需要保留0x前缀,直接在转换后的字符串前拼接即可,比如"0x$keyIdHex"。

内容的提问来源于stack exchange,提问作者Fernando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:10:48