【发布时间】:2020-10-15 08:26:31
【问题描述】:
在一个 linux 机器上,我有一个用 openssl 加密的 MP4 视频:
openssl enc -aes-128-ecb -a -in video.mp4 -out video.enc -K `cat aes.key`
请注意,这是一个练习,算法的强度并不重要。
该文件已发送到 Android 应用程序,我正在尝试使用 ExoPlayer 播放它。
我事先对文本文件进行了一些测试,以确保解密工作正常
fun decrypt(key: ByteArray, data: ByteArray): ByteArray {
val spec = SecretKeySpec(key, "AES")
val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
cipher.init(Cipher.DECRYPT_MODE, spec)
globalCipher.init(Cipher.DECRYPT_MODE, spec)
return cipher.doFinal(data)
}
关于 ExoPlayer,AesCipherDataSource、AesCipherDataSink、SimpleCache 等之间有点压倒性。我无法组合一个简单的播放视频的方法。
fun playVideo() {
val player = SimpleExoPlayer.Builder(this).build()
playerView.player = player
val dataSourceFactory = DefaultDataSourceFactory? // <-- what's the factory?
val dataSource = AesCipherDataSource(globalCipher, ?) // <-- what's the data source?
val extractorsFactory: ExtractorsFactory = DefaultExtractorsFactory()
try {
val uri = Uri.fromFile(File(path, "video.enc"))
val videoSource =
ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null)
player.prepare(videoSource)
player.playWhenReady = true
} catch (e: Exception) {
e.printStackTrace()
}
}
所以问题:
- 如何实现在本地播放这段加密视频?
- 通过 HTTP 提供视频后,需要进行哪些更改? (需要添加清单吗?标头?)
【问题讨论】:
标签: android encryption aes exoplayer2.x