从字节数组播放视频

时间:2017-10-25 17:00:37

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

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

等方法获取块中的字节数组
getByteArray(position,size)

此处position确定必须从中提取字节数组的位置以及大小。

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

我尝试将其转换为inputstream,但它给了我OutOfMemoryException有没有办法实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

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

3)

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

OR

b)您可以使用ExoPlayer,并为其提供直接处理解密的直接数据源。我在github上找到了支持这种加密的exoplayer实现的一些代码 - https://github.com/moagrius/EncryptedExoPlayerDemo。请注意,存储库当前未经许可,因此您不能只复制/粘贴。