如何在安卓设备中播放字节流视频

6
我在项目中有视频,为了安全起见,我加密了视频文件,这样做效果还不错。但问题是...(未完待续)
 **videoView.setVideoPath("/mnt/sdcard/intro_video.3gp");** 

在这个方法中,我需要传递文件(已解密)。因此,我正在为文件路径创建解密文件,并尝试直接在视频视图中传递解密后的字节。我正在使用Cipher进行加密。

下面是我的代码:

 private void decryption()throws Exception {
    // TODO Auto-generated method stub
    String filePath2 = path + "en/encVideo";

    String filePath3 = path + "de/decVideo";

    File decfile = new File(filePath3);


    if(!decfile.exists())
        decfile.createNewFile();

    File outfile = new File(filePath2);
    int read;

    FileInputStream encfis = new FileInputStream(outfile);
    Cipher decipher = Cipher.getInstance("AES");

    decipher.init(Cipher.DECRYPT_MODE, skey);
    FileOutputStream decfos = new FileOutputStream(decfile);
    CipherOutputStream cos = new CipherOutputStream(decfos,decipher);   

    while((read=encfis.read()) != -1)
    {

        cos.write(read);
        cos.flush();
    }
    cos.close(); 
}

1
嗨@Youddh,我正在寻找类似的解决方案。你能分享一下可用的代码吗? - user1444172
2
@user1444172 对不起,据我所知这是不可能的,所以我在SD卡中创建了一个文件(更改了一些字节),然后重新充值到原始字节以播放它。(这里是答案https://dev59.com/pFPTa4cB1Zd3GeqPfwxK) - Youddh
2个回答

3
如果您想将视频流式传输到VideoView而无需中间文件来存储解密版本,则答案是可以的。您需要两个主要组件:流媒体服务器(例如本地http实例)和CipherInputStream。

1

我怀疑你能否做到。因为你正在使用VideoView,它需要特定的头和尾来指示格式以及如何编码等。即使你能够弄清楚这一点,我仍然怀疑它是否能够处理原始文件。你最好的选择是在保存时创建随机文件名,并将其传递给播放器。


1
好的,谢谢。但是我找到了另一个选项,我只需要替换视频中特定的字节然后写入即可...但正如你所说,我需要创建文件。那么我可以在catch块中创建文件然后播放它吗?这种方式可行吗?我的视频大小小于2MB。 - Youddh
我想你可以这样做。希望有其他人回答。确保你得到了正确的许可 :) - Oasa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接