播放加密视频

Ert*_*maa 13 encryption video playing

我接下来要做的是:我们需要保护视频内容(加密它)并能够播放它.

棘手的部分是我们不想立刻将所有内容加载到内存中并在那里解密.(尽管这也是一种选择)

基本上寻找的是我们从HDD播放加密视频内容的解决方案,这样只有我们的APPLICATIOn才能播放该视频.

然而它应该逐块读取文件(因为如果我们处理2GB文件,它不应该一次性加载到内存中).

请告诉我们,有什么可能的方法?

  • SilverLight4 DRM - 好的,这看起来像是合理的解决方案,足以满足我们的需求.但是,PlayReady SDK售价约为30,000美元,我们不想使用SilverLight.大概是C#或C++

  • 我们有一个想法,就是将大视频文件拆分为单独的加密视频文件(如序列),然后加载每个文件("块")直接存储/解密并从内存中播放(并在序列文件之间交替),这似乎是最简单的,可能是真正做到的.但是,什么库能够从memoryStream播放视频文件?我相信VLC应该能够做到这一点..?

  • 另一个想法是只采用未压缩的AVI,逐帧处理视频,修改每一帧(以某种方式加密),现在当我们播放视频时,我们在内存中重新处理帧并解密它.

  • 只处理一个特定的编解码器并为它编写自定义解决方案 - 实际上这听起来很酷但我担心它会花费我们太多的时间,但请告诉我们这个方法

  • 另一个,使用VLC从localhost播放加密流(例如,APPLICATION将加密的HDD文件流传输到localhost:800/BLAHBLAH),同一个应用程序在那里有VLC控制来解密加密流.我们仍然不知道HDD上的文件是否也可以实际加密(因此用户无法在另一个播放器上播放该文件),而且VLC是GPL,这对我们没有好处.

Chr*_*zig 7

几乎所有广泛使用的加密算法都适用于大小在128到256位之间的块 - 并且一次只能很好地解密其中的一些,这对流式传输很好.查看,例如,Crypto ++,了解具有流接口的软件库.(即,您只需打开一个文件,在其周围放置一个解密过滤器,然后继续与其他任何文件一样继续.)


Rom*_* R. 7

回放管道通常是一组插在一起的组件.在DirectShow其中一个API和最受欢迎的API中,有一个使用读取器,分离器,编解码器,后处理和称为过滤器的演示部件,整个过程都会播放.可以用自己的替代品替换读取器,读取加密内容并动态解码.它可以很容易地按需解码,不需要解码整个2GB块以便例如获得第一帧或缩略图.

只有连接阅读器部分,您可以自由选择加密方法,自定义算法,众所周知的API或外部库之一.

我仍然认为这个和其他(至少大多数其他)方式不能让你获得防弹保证编码内容无法逆转.其他人仍然可以挂钩管道并从那里获取解码内容.如果您对此至少需要复杂性和实施经验感到高兴,那么这种加密将会很好地解决.


jos*_*hus 7

好的,这就是我做的.(机器人)

加密视频放在SD卡中.RC4加密 - 因此它可以在流式传输时即时转换.然后我创建了一个在设备上运行的本地文件服务器(作为服务).输出流在发送数据之前会做一些额外的事情 - 它会在将其写入缓冲区之前通过RC4解密器对其进行过滤.然后只需将媒体播放器指向视频的网址(http:// localhost:port/abc.3gp).因此,来自SD卡的视频仍然是安全的 - 除非你有密钥,否则你无法播放它 - 你每个视频应该有所不同,以增加安全性.

  • 当然.你想在你的应用程序中运行一个小的http服务器(可能在服务的一个单独的线程中) - 查看NanoHttpd http://elonen.iki.fi/code/nanohttpd/现在修改它来做你的解密东西.这应该沿着write()方法到输出流 (2认同)