【问题标题】:Using ExoPlayer Input stream with own encryption logic使用带有自己加密逻辑的 ExoPlayer 输入流
【发布时间】: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


    【解决方案1】:

    您实际上可以利用平台内置的加密功能来处理流式视频,无论是使用商业 DRM 还是使用“明文密钥”加密。

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

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

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

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

    【讨论】:

    • 真的非常感谢您的支持!但我必须使用自己的逻辑。因为用户已经在使用我们的产品了..
    • 要获得一个强大的解决方案确实需要做很多工作。上面的例子是开源的,所以你可以先看看他们是怎么做的,你可能会发现你甚至可以重用一些逻辑或代码,具体取决于你的代码和上述解决方案使用的许可证。
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2016-07-29
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2017-06-08
    相关资源
    最近更新 更多