如题,通过文件映射把加密后的本地视频文件映射进内存,然后解密后直接在内存中播放,不想做成解密后存盘再播放,虽然media player控件播放本地文件很简单,但是我要做成 对解密后的内存视频数据直接播放,有比较好的办法吗?
加、解密已有开源库可以使用,主要问题是如何直接播放内存中解密后的视频数据

解决方案 »

  1.   

    将内存中的数据转换成rgb,然后直接传到界面上进行绘制
      

  2.   

    这要看第三方的播放器支不支持数据流的方式进行播放,如果支持最好,直接将数据传给播放器插件就行。
    如果播放器只支持以路径形式的方式的接口,那么可以把文件释放到一个隐藏目录然后播放,完了删除。或者,给播放器加密后的文件路径,但是HOOK播放器的相关函数,比如HOOK readfile,在读取时解密。
    或者像楼上说的那样,自己解码帧数据,然后自己画出来。
      

  3.   


    如果用VC中的media player 控件实现解密播放,具体需要hook 哪些函数呢?
      

  4.   


    如果用VC中的media player 控件实现解密播放,具体需要hook 哪些函数呢?
    我没有用过这个控件,大致说下我的猜测,首先需要HOOK CreateFile函数,当调用控件相关接口函数设置需播放文件路径后,控件应该会调用CreateFile函数打开文件,HOOK这个函数,然后当文件名为需播放文件时,正常打开文件并保存得到的文件句柄。然后需HOOK ReadFile,当控件调用ReadFile时,并且文件句柄为需播放文件句柄时,你就知道控件此时需要读取需播放文件的内容,然后根据ReadFile的参数值读取文件相应的内容并且解密,然后返回给控件。
    比如控件调用ReadFile获取文件前10个字节,首先你要知道ReadFile读取的是不是加过密的播放文件,控件也有可能是读取其他文件,这就不需要解密,所以你需要首先得到CreateFile打开播放文件的句柄,然后与ReadFile中的句柄进行比较。如果两个句柄一样,说明ReadFile是读取的播放文件,但是播放文件是经过加密的,读取出来的比如是1234567890,你就需要解密,解密过后的比如是0987654321,然后再返回给控件,这样控件得到的就是正常的播放文件数据。