添加用于在安卓 ExoPlayer 中播放加密的 .m3u8 流的参数



我的Android应用程序中有一些加密的(AES-128(.m3u8流,我想在ExoPlayer播放它。我有两个变量:

val secretKey = "a4cd9995a1aa91e1"
val initVector = "0000000000000000"

当我在文档中阅读时,我需要将URIIV参数添加到源文件中。添加后,我有下一个:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=AES-128,URI="data:text/plain;charset=utf-8,a4cd9995a1aa91e1",IV=0x30303030303030303030303030303030
#EXTINF:6.0,
media_b525000_0.ts
#EXTINF:6.0,
media_b525000_1.ts
#EXTINF:6.0,
media_b525000_2.ts
*other .ts segments...*

其中我添加了两行:#EXT-X-DISCONTINUITY#EXT-X-KEY.但是播放器不播放流,我有下一个例外:

com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Malformed URL

我做错了什么?当我有secretKeyinitVector时,我如何解密流?

Exoplayer假设URI之后的任何内容都是m3u8文件中的实际URL,当它尝试使用以下无效的URL加载加密密钥时,OkHttpDataSource类会抛出上述异常。

URI="data:text/plain;charset=utf-8,a4cd9995a1aa91e1"

这个问题可以通过两种方式解决。 1. 将加密密钥放在服务器中并使用 URL 获取它。 2. 实现自定义数据源类并根据需要实现、拦截调用和修改请求/响应对象。

我遇到了类似的问题,但就我而言,我有一个自定义方案而不是 http。默认的 OkHttp数据源不处理自定义 url 方案,因此我不得不编写自己的数据源并进行拦截。

最新更新