Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用带有自己加密逻辑的ExoPlayer输入流_Android_Video_Streaming_Exoplayer - Fatal编程技术网

Android 使用带有自己加密逻辑的ExoPlayer输入流

Android 使用带有自己加密逻辑的ExoPlayer输入流,android,video,streaming,exoplayer,Android,Video,Streaming,Exoplayer,我现在正试图播放一个加密视频(mp4),并用我自己的逻辑完成。由于解码文件太大,无法创建和播放,因此播放该文件需要花费太多时间。所以,我发现了如何在使用ExoPlayer使用InputStream解密时播放它。但以我的水平来说,应用它太难了。当我担心了两天,我有一个晚上,但我仍然没有看到任何结果。所以我在这里请求帮助 我正在寻找的是一个可以提供帮助的参考。我必须接受并解码缓冲区大小(4096)。我不知道在哪里写这段代码 我认为完成该功能的流程如下。 1.完成ExoPlayer用户界面。 2.使用

我现在正试图播放一个加密视频(mp4),并用我自己的逻辑完成。由于解码文件太大,无法创建和播放,因此播放该文件需要花费太多时间。所以,我发现了如何在使用ExoPlayer使用InputStream解密时播放它。但以我的水平来说,应用它太难了。当我担心了两天,我有一个晚上,但我仍然没有看到任何结果。所以我在这里请求帮助

我正在寻找的是一个可以提供帮助的参考。我必须接受并解码缓冲区大小(4096)。我不知道在哪里写这段代码

我认为完成该功能的流程如下。 1.完成ExoPlayer用户界面。 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));
    }

这是我使用文件播放时的代码。上面的代码是我制作解码文件并播放时使用的代码。现在我必须在解码的同时回放。它不创建文件。我非常渴望。因为我从开始工作到现在已经工作了一个月,但是我收到了一些不符合我水平的东西。但我真的很想达到这个目标。。。请教我。

您实际上可以利用平台内置的流视频加密功能,使用商业DRM或“clear key”加密

如果这些满足您的需要,那么使用起来应该会容易得多,因为您不必自己实现加密和解密

此答案提供了一个创建HLS/AES流和DASH clearkey流的示例:

这并不能提供与DRM相同的安全性,因为密钥本身并没有加密,但它可能足以满足您的需要


然后可以使用标准iOS、Android或HTML5播放器播放这些流。

非常感谢您的支持!但我必须用自己的逻辑。因为用户已经在使用我们的产品。要获得一个健壮的解决方案,这将是一项相当艰巨的工作。不过,上面的示例是开源的,因此您可以从了解他们是如何做到这一点开始,您可能会发现,您甚至可以重用一些逻辑或代码,具体取决于您的代码和上面的解决方案使用的许可证。