【发布时间】:2018-07-16 13:24:24
【问题描述】:
我现在正在尝试使用我自己的逻辑播放完整的加密视频(mp4)。播放解码文件需要太多时间,因为它太大而无法创建和播放。所以,我发现的是如何在使用 ExoPlayer 使用 InputStream 解密它的同时播放它。但是以我的水平应用它太难了。当我担心了两天的时候,我有一个晚上,但我仍然没有看到任何结果。所以我在这里寻求帮助。
我正在寻找可以提供帮助的参考资料。我必须接受并解码缓冲区大小(4096)。我不知道在哪里写这段代码。
我认为完成功能的流程如下。 1.完成ExoPlayer UI。 2. 使用我的加密逻辑对下载的文件进行加密。 (缓冲区大小为 4096) 3、InputStream接收文件,同时解码,播放。 (流媒体)
我会以某种方式做到这一点,直到 1 和 2,但 3 对我来说非常困难。有具体的代码和解释吗?如果你认识任何人,请帮我一个忙。谢谢。
try {
ios = new FileInputStream(params[0]);
fos = context.openFileOutput(params[1] + ".mp4", MODE_PRIVATE);
ScatteringByteChannel sbc = ios.getChannel();
GatheringByteChannel gbc = fos.getChannel();
File file = new File(params[0]);
fileLength = file.length();
startTime = System.currentTimeMillis();
int read = 0;
readb = 0;
ByteBuffer bb = ByteBuffer.allocate(4096);
while ((read = sbc.read(bb)) != -1) {
bb.flip();
gbc.write(ByteBuffer.wrap(enDecryptVideo.combineByteArray(bb.array())));
bb.clear();
readb += read;
if (readb % (4096 * 1024 * 3) == 0){
publishProgress(((int) ( readb * 100 / fileLength)));
} else if (readb == fileLength) {
publishProgress(101);
}
}
ios.close();
fos.close();
} catch (Exception e) {
e.getMessage();
} finally {
Log.d(TAG, "doInBackground: " + (System.currentTimeMillis() - startTime));
}
这是我使用文件播放时的代码。以上代码是我制作解码文件并播放时使用的代码。现在我必须在解码的同时播放。它不创建文件。我非常渴望。因为我从开始工作到现在已经工作了一个月,但是我收到了一些不符合我水平的东西。但是我真的很想达到这个目标......请教我。
【问题讨论】:
标签: android video streaming exoplayer