gpt4 book ai didi

android - 用ExoPlayer播放本地aes128 cbc加密的mp3

转载 作者:行者123 更新时间:2023-11-29 01:30:20 38 4
gpt4 key购买 nike

我想知道用ExoPlayer播放本地aes128-cbc加密的mp3文件最好的方法是什么。有一个类 Aes128DataSource 似乎为此目的而存在,但我无法让 ExoPlayer 播放该文件。它总是返回 -1 作为轨道持续时间,这表明文件不知何故已损坏。由于日志中没有任何内容,因此关于错误的信息不多。 mp3 只是无法播放。我猜文件没有正确解密。有人可以举例说明如何做吗?这是我所做的:

key 和 iv:

private byte[] iv = hexToBytes("..."); //32 hex symbols here as String
private byte[] key = hexToBytes("..."); //32 hex symbols here as String

hexToBytes 函数将给定的键和 iv 从十六进制字符串转换为 byte[]:

private byte[] hexToBytes(String str) {
if (str == null) {
return null;
}
else if (str.length() < 2) {
return null;
}
else {
int len = str.length() / 2;
byte[] buffer = new byte[len];
for (int i = 0; i < len; i++) {
buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);
}
return buffer;
}
}

下面是我播放加密文件的方法:

Uri uri = Uri.parse("android.resource://" + context.getPackageName() + File.separator + R.raw.track01_cbc);
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
String userAgent = getUserAgent(context, ...);
DataSource dataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
Aes128DataSource aes128DataSource = new Aes128DataSource(dataSource, key, iv);
SampleSource sampleSource = new ExtractorSampleSource(uri, aes128DataSource, new Mp3Extractor(), RENDERER_COUNT, 5000);
MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
exoPlayer.prepare(audioRenderer);
exoPlayer.setPlayWhenReady(true);

最佳答案

根据 ExoPlayer 的开发人员,Aes128DataSource 仅作为使用 HLS 流的一部分。在 ExoPlayer 的下一个版本中,Aes128DataSource 将专用于 HLS 包。在 github 上查看完整答案.您要做的就是创建自己的 DataSource 并自行实现解密。

“如果您可以制作一个数据源,该数据源将在请求的偏移量处返回正确解密的数据,那么 ExoPlayer 将“正常工作”

关于android - 用ExoPlayer播放本地aes128 cbc加密的mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592158/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com