在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()
}
}
所以问题是:
1.如何实现本地播放这个加密视频?
1.一旦视频通过HTTP提供服务,需要更改什么?(需要添加清单?头?)
1条答案
按热度按时间hfyxw5xn1#
这是解决方案。可能需要一些调整来处理跳帧,快进等,但这将播放
AES/ECB/PKCS5Padding
加密视频