如何实现用于解密和播放视频的缓冲区?

时间:2015-09-20 00:29:09

标签: java android encryption video-streaming caesar-cipher

我需要创建一个解密视频文件的实现。我目前正在使用AesBase64算法来解密这些视频,但在我的测试中,解密对Android来说太沉重了,因为字节数组完全在内存中释放,因此我在获取java.lang.OutOfMemoryError时fileIt超过25 MB。我的问题是:如何为我实现一个缓冲区来解密每个字节数组并为每个解密字节播放视频?

1 个答案:

答案 0 :(得分:0)

我不确定你的意思" AesBase64"但它听起来像是AES加密和Base64编码的混合。您可以使用Cipher类的更新方法实现流解密器。不幸的是,android Base64类并不真正支持零碎的base64解码,尽管你可以自己实现它而不需要太多努力。但是,存在一种更简单的替代方法:使用CipherInputStreamBase64InputStream

使用以下内容:

public void decrypt(String filename) throws Exception {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream("filename"));
    Base64InputStream base64Stream = new Base64InputStream(bis, 0);
    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
    CipherInputStream cis = new CipherInputStream(base64Stream, c);
    byte[] plainBuf = new byte[2048];
    int nRead;
    while ((nRead = cis.read(plainBuf)) > 0) {
        // send plainBuf[0] through plainBuf[nRead-1] to the video codec
    }
    cis.close();
}