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

问题描述 投票:0回答:1

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

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

正如我在docs中阅读的,我需要将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时如何解密流?

android encryption aes m3u8 exoplayer2.x
1个回答
0
投票

[Exoplayer假定URI后面的所有内容都是m3u8文件中的实际URL,当它尝试使用下面的无效URL加载加密密钥时,上面的异常由OkHttpDataSource类抛出。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.