开发者社区> 问答> 正文

ffmpeg读取视频文件的文件头是怎么一回事?请能具体说一下:报错

前几天发的这个帖子:http://www.oschina.net/question/1770418_2191340不了解可以先看这里

一个客户,说要给视频文件加上一个只能自己识别的标记,目的就是想让视频只能自家的播放器播放,像暴风啊,迅雷的不能看。像是把视频加密这样子吧,背景就这样了。

有好几同行的都说不用逐帧加密,不用修改视频的原数据,加个自定义的文件头就行,我一追问怎么加,都不吭声了。请问一下,有没有真正了解或都做过的朋友,能够指导一下,或者帮我写个Demo,有偿100。

我不需要加减乘除,加个1,减个1就行,我想知道在哪里加,用那个函数,如果就是说“加密的时候加XX”,”解密的时候减XX“,这道理我懂,但我不会操作。。谁来写个示例啊?

像这位朋友这样说了,我很感谢他,但因为我对FFMPEG不了解,说了我也不会啊


展开
收起
kun坤 2020-06-08 11:05:46 1398 0
1 条回答
写回答
取消 提交回答
  • 没做过ffmpeg,不过说的这个做法是通用的,创建视频文件的时候在首部随便加几个字节,然后解码跳过或者读取并验证,就像文件中的magic number######

    楼主 你解决这个问题了么? 我也有需求 我出200大洋 你能否给我解决下

    ######没有解决。我把整个视频的二进制数据进行位运算,然后播放的时候进行反运算,把数据释放在内存里再读的。上面的方法说起来好简单,但根本没有人能说出来怎么做,都是在说。在二进制读取的时候的确可以读出文件头,但不能对其进行修改。######

    插一句,这种位运算的方式我不是很赞成,因为会变动视频原本文件的内容,容易出问题,其实大家说的文件头增加一点东西的方式应该是比较好理解的,既然你的视频文件是属于你自己的,那么在编码之后封装成文件的时候,自定义一个文件头,例如,wav格式的文件,其文件头如下:

    标志符(RIFF)

    余下所有数据的长度

    格式类型("WAVE")

    "fmt"

    PCMWAVEFORMAT的长度

    PCMWAVEFORMAT

    "data"

    声音数据大小

    声音数据

    那么,你是不是可以自己增加一个呢?比如,在标志符后面新增一项,假设为companyname,这样,你在解码的时候,你自己的解码器自然能识别,并将这一项检出来,可是别人的解码器,则会将你的这一项,以为是“余下所有数据的长度”,这样自然就出现解码失败了;

    这样做不会改变原始文件,只是对它的封装格式做了变动,应该比较简单且安全吧!

    没做过ffmpeg,不过说的这个做法是通用的,创建视频文件的时候在首部随便加几个字节,然后解码跳过或者读取并验证,就像文件中的magic number######

    楼主 你解决这个问题了么? 我也有需求 我出200大洋 你能否给我解决下

    ######没有解决。我把整个视频的二进制数据进行位运算,然后播放的时候进行反运算,把数据释放在内存里再读的。上面的方法说起来好简单,但根本没有人能说出来怎么做,都是在说。在二进制读取的时候的确可以读出文件头,但不能对其进行修改。######

    插一句,这种位运算的方式我不是很赞成,因为会变动视频原本文件的内容,容易出问题,其实大家说的文件头增加一点东西的方式应该是比较好理解的,既然你的视频文件是属于你自己的,那么在编码之后封装成文件的时候,自定义一个文件头,例如,wav格式的文件,其文件头如下:

    标志符(RIFF)

    余下所有数据的长度

    格式类型("WAVE")

    "fmt"

    PCMWAVEFORMAT的长度

    PCMWAVEFORMAT

    "data"

    声音数据大小

    声音数据

    那么,你是不是可以自己增加一个呢?比如,在标志符后面新增一项,假设为companyname,这样,你在解码的时候,你自己的解码器自然能识别,并将这一项检出来,可是别人的解码器,则会将你的这一项,以为是“余下所有数据的长度”,这样自然就出现解码失败了;

    这样做不会改变原始文件,只是对它的封装格式做了变动,应该比较简单且安全吧!

    2020-06-08 15:02:54
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载