android - 从字节数组播放视频

标签 android arrays stream video-streaming out-of-memory

我有一个非常大的(> 1 gb)加密文件,当我解密它时,我使用诸如

getByteArray(position,size)

这里的 position 决定了字节数组必须被提取的位置和大小。

现在我想播放接收到的字节数组 block 而不将它们写入存储中的文件,我尝试了CustomMediaDataSource,但它在 api 23 以下不可用。

我尝试将它转换为 inputstream 但它给了我 OutOfMemoryException 有什么办法可以实现吗?

最佳答案

1) 您需要确保视频的格式/编码方式能够支持流式传输。对于 MP4 视频,moov 原子必须在任何 mdat 原子之前,但必须在 ftyp 原子之后。

2) 您需要确保所使用的加密支持对底层数据的随机访问。 AES/CTR/NoPadding 是一个应该起作用的例子。

3)

a) 您可以使用 libmedia (这是非免费的),或者基本上重新实现你自己的 libmedia,创建一个本地 ServerSocket,它使用 HTTP 来传输视频,并根据需要解密字节。这将适用于 VideoView 或 WebView。如果您想自己推出,请查看 http://stackoverflow.com/a/5432091/6585616有关如何创建服务器的示例。

b) 您可以使用 ExoPlayer ,并为其提供一个直接的数据源来处理动态解密。我在 github 上找到了一些支持这种加密的 exoplayer 实现代码 - https://github.com/moagrius/EncryptedExoPlayerDemo (麻省理工学院许可证)。

关于android - 从字节数组播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46938127/

相关文章:

android - 如何在 Android 应用程序中将 APDU 发送到 SIM 卡?

android - IBM Worklight - 如何使用自定义服务器 URL?

java - VideoView 横向不适合屏幕(使用 Vitamio 库)

arrays - Perl:对字符串中的字符进行排序

java - 将字符串数组中的值相加

vb.net - 如何在 Silverlight 3.0 中使用 SaveFileDialog 保存 BitmapImage/WriteableBitmap?

javascript - Phonegap Cordova - 全屏后底部的黑色状态栏

arrays - 给定一个可以改变数字的符号,找到数组的最小和

delphi - 对于 unicode Delphi,TStream 到 TStringList 失败

json - 从文件中读取多个 json obj 然后将它们插入数组并将结果写入文件