如何通过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
相关产品推荐
相关产品推荐

