最近在做一个项目,是关于视频加密的。
我负责解密部分,要求是对一个比较大的视频文件,不能采取完全解密之后在播放的方式,原因有二:1.解密时间过长,用户体验感不好。
2.完全解密之后势必会在硬盘上存储解密后的数据,安全性不好。
综上所述,应采用边解密边播放的方法。
但,需要解决问题是 在内存中设立一个缓冲区,用来存放解密后的数据,但用什么方法来读取并播放这段数据。DirectShow? 
不知道有没有哪位朋友有过类似的经验,请详细地说一下,不胜感激!

解决方案 »

  1.   

    只需要加密关键帧。边解密边播放可行,但可能需要有一定的缓冲。如果是文件,可能需要自己实现Source filter
      

  2.   

    呵呵,我也做过这样的事,还封装了dll和ocx需要自己写source filter,在source filter里面实时解密就可以,文件是什么格式的,请注意source filter类型的选择,是pull还是push要考虑好,不然可能会很麻烦(这里关键是对splitter的要求,很多push模式没有不能建立Graph)
      

  3.   

    TO:rageliu
    非常感谢,对我很有启发,我也决定用directshow来做,文件格式是wmv的,目前还在学习中,不知道可不可以推荐点资料或书籍?
      

  4.   

    如果是mpeg1 2格式的,使用pull模式字节流方式读取相对简单。wmv格式就比较麻烦了,如果用pull模式,系统默认是没有splitter的,不能建立Graph,一定要用的话需要自己再写个splitter。如果用push模式,要音视频分离。(其实2种模式都逃不了自己分离音视频,这就增加了难度)个人觉得好些的解决办法:(优先级由上到下)
    1. 能转成别的格式(这样可以直接pull模式)
    2. pull模式,能找到现成的splitter
    3. pull或push都可以,自己分离音视频(使用Media Format SDK,也不是很难,关键是麻烦了)