Android 使用带有自己加密逻辑的ExoPlayer输入流
我现在正试图播放一个加密视频(mp4),并用我自己的逻辑完成。由于解码文件太大,无法创建和播放,因此播放该文件需要花费太多时间。所以,我发现了如何在使用ExoPlayer使用InputStream解密时播放它。但以我的水平来说,应用它太难了。当我担心了两天,我有一个晚上,但我仍然没有看到任何结果。所以我在这里请求帮助 我正在寻找的是一个可以提供帮助的参考。我必须接受并解码缓冲区大小(4096)。我不知道在哪里写这段代码 我认为完成该功能的流程如下。 1.完成ExoPlayer用户界面。 2.使用我的加密逻辑加密下载的文件。(缓冲区大小为4096) 3.InputStream接收文件,同时解码并播放。(流媒体) 我会一直坚持到1号和2号,但是3号对我来说很难。你有什么具体的代码和解释吗?如果你认识任何人,请帮我一个忙。多谢各位Android 使用带有自己加密逻辑的ExoPlayer输入流,android,video,streaming,exoplayer,Android,Video,Streaming,Exoplayer,我现在正试图播放一个加密视频(mp4),并用我自己的逻辑完成。由于解码文件太大,无法创建和播放,因此播放该文件需要花费太多时间。所以,我发现了如何在使用ExoPlayer使用InputStream解密时播放它。但以我的水平来说,应用它太难了。当我担心了两天,我有一个晚上,但我仍然没有看到任何结果。所以我在这里请求帮助 我正在寻找的是一个可以提供帮助的参考。我必须接受并解码缓冲区大小(4096)。我不知道在哪里写这段代码 我认为完成该功能的流程如下。 1.完成ExoPlayer用户界面。 2.使用
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));
}
这是我使用文件播放时的代码。上面的代码是我制作解码文件并播放时使用的代码。现在我必须在解码的同时回放。它不创建文件。我非常渴望。因为我从开始工作到现在已经工作了一个月,但是我收到了一些不符合我水平的东西。但我真的很想达到这个目标。。。请教我。您实际上可以利用平台内置的流视频加密功能,使用商业DRM或“clear key”加密 如果这些满足您的需要,那么使用起来应该会容易得多,因为您不必自己实现加密和解密 此答案提供了一个创建HLS/AES流和DASH clearkey流的示例:
然后可以使用标准iOS、Android或HTML5播放器播放这些流。非常感谢您的支持!但我必须用自己的逻辑。因为用户已经在使用我们的产品。要获得一个健壮的解决方案,这将是一项相当艰巨的工作。不过,上面的示例是开源的,因此您可以从了解他们是如何做到这一点开始,您可能会发现,您甚至可以重用一些逻辑或代码,具体取决于您的代码和上面的解决方案使用的许可证。