【编解码】从零开始写H264解码器(1) 总纲

【编解码】从零开始写H264解码器(1) 总纲关于编解码的原理的书和文章自己一直在看,从入门到略懂,但是感觉有些零零碎碎,或不完整,似乎串不成体系。有些小功能,知道是知道,并不知道它的意义和作用,时间一长也会慢慢忘记。反思了一下,或许很多东西,还是需要自己动手做一遍,会理解的更深更透彻一些,就像费曼学习法,你能讲出来,才说明懂了,这个也一样,你能把功能实现出来,才说明你真的明白了里面的流程和逻辑。

大家好,又见面了,我是你们的朋友全栈君。

1. 背景

因为工作原因,接触编解码也有一段时间了。AVC,HEVC,大大小小的功能都也接触了一些,关于编解码的原理的书和文章自己一直在看。从入门到略懂,感觉有些零零碎碎,或不完整,似乎串不成体系。有些小功能,知道是知道,并不知道它的意义和作用,时间一长也会慢慢忘记。
反思了一下,或许很多东西,还是需要自己动手做一遍,会理解的更深更透彻一些,就像费曼学习法,你能讲出来,才说明懂了,这个也一样,你能把功能实现出来,才说明你真的明白了里面的流程和逻辑。于是乎,在今年过年期间,突然萌生出了写一个解码器的想法,而且一萌生就一直压不住了,一直想赶快动键盘写起来。
其实目前市面上开源好用的解码器有不少,像ffmpeg,x264等等。自己这个工程,应该就是单纯的一个学习工程吧,估计最后再怎么优化也达不到这些大名鼎鼎的工程的效果和功能,但是那又怎么样呢,过程和经历也很棒,不是吗?
刚开始的时候是想写过一个编码器的,思考了一下之后很快就放弃了,我目前的想法只是想熟悉协议,并不是侧重于编码算法,相比之下,编写一个解码器所需要的的知识正是我所需要的。
这就成了这一系列文章的的起因了,算是自己一边写代码,一边写总结吧。
虽说是从“零”开始,但是编解码的基础知识还是要有一些储备的,我会在每一章里对解码所涉及到的知识点做一个介绍和讲解,但是太零碎的,就不会一一说明了。如果知识点太大,可能会单独写一篇来总结。

2. 计划

2.1 写作计划

按照一个解码器的步骤,准备暂时先分成这么几个部分来写

  • NALU:格式,起始码, EBSP RBSP SODB
  • 熵编码之哥伦布熵编码
  • SPS:解析协议里每个成员的意义
  • PPS: 解析协议里每个成员的意义
  • SEI:解析协议里每个成员的意义
  • SLICE Header:解析Header
  • SLICE data:解析slice数据
  • MarcoBlock:怎么还原出一个宏块完整的YUV数据
  • macroblock_layer
  • mb_pred
  • 帧内预测的part的预测模式获取
  • CAVLC
  • residual 残差数据获取
  • 帧内预测的part的预测数据 和 图像数据恢复
  • deblocking
  • ……待定

2.2 项目计划

  • 开发环境
    C语言

  • 包含功能:
    H264是分7个profile的,每个profile便是不同功能的集合。具体区别见wiki百科
    计划 :
    第一阶段做最基础的一个baseline的解码器(无B帧,只有CAVLC,只支持逐行 Progressive)
    第二阶段做mainExtend的解码器(有B帧,有CABAC,支持Progressive和interlace)
    在这里插入图片描述

    后续的就不做支持了。
    解码不做显示,从h264文件解到YUV文件即可。

  • 时间安排:
    预计6个月写完baseline (8月30),
    后续再安排第二阶段。

3. 参考

3.1 参考资料

3.2 参考工程

3.3 参考博客

  1. 从零实现一个H.264码流解析器
    配套工程
  2. 自己动手写 H.264 解码器-ZigZagSin
    配套工程
  3. H264视频解码器C++工程说明
    配套工程

4. 工具准备

4.1 码流分析工具

  • vega: 我用过最专业,分析最好的软件。不过只能蹭单位的使用哈哈,目测应该很贵。
    在这里插入图片描述

  • H264 Visa : 我用的1.15版本,不能用vega的时候使用的。参数解析的比较全面,用于前期判断自己的解析对不对很有帮助。
    在这里插入图片描述
    后面据说有升级版 H.264 CodecVisa,暂时没用。

  • elecard
    试用了一下,感觉使用不是很顺手,论美观好用不如vega,轮参数完整不如H264 Visa。就没太多使用。
    这里记录一下,elecard的软件种类很多,elecard stream analyzer, elecard stream eye,Elecard StreamEye Studio等等。其实 Elecard StreamEye Studio 就包含了stream analyzer,不要被一堆名字搞混了。其中 streamEye算是功能比较全面的。

在这里插入图片描述
在这里插入图片描述

4.2 YUV查看工具

  • 7yuv

4.3 播放器

  • potplayer: 查看h264码流

4.4 一些YUV数据源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150705.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac idea 2021.5 激活码【在线注册码/序列号/破解码】

    mac idea 2021.5 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    52
  • Dreamweaver 2019安装教程

    Dreamweaver 2019安装教程安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。1.选中【DreamweaverCC2019】压缩包,鼠标右击选择【解压到DreamweaverCC2019】。2.双击打开【DreamweaverCC2019】文件夹。3.选中【Set-up.exe】可执行文件,鼠标右击选择【以管理员身份运行】。4.点击文件夹小图标,然后选择【更改位置】。5.建议安装到除C盘以外的磁盘,可以在D盘或其他盘新建一个【DwCC2…

    2022年5月20日
    39
  • 调用第三方接口大致流程

    调用第三方接口大致流程下面以风控为例,业务是调用第三方接口获取支付宝报告天机支付宝获取流程:1本质:中转站:前台把参数传给我,我接受参数后传给天机,天机在传给支付宝,最后获取数据,在这个过程中   我们和天机都充当的是中转站的角色。2流程:a前台传客户的基本信息参数    b后台接受参数,传给天机,天机返回淘宝的认证地址链接,后台把链接返回给前台;    c前台打开链接,进入认证页面,进行认…

    2022年6月1日
    52
  • Java线程池设置名称,看完必会

    点击上方☝,轻松关注!及时获取有趣有料的技术文章本文讲一下Java线程池中创建 ThreadFactory 设置线程名称的三种方式。设置线程名称是很重要的,如果你没有设置过,说明你还“涩…

    2022年2月28日
    144
  • XSS(跨站脚本攻击)相关内容总结整理

    XSS的攻击相关资料整理文章目录XSS的攻击相关资料整理跨站脚本攻击(XSS)XSS 简介XSS 危害XSS 原理XSS 分类XSS 防御总结XSS 问答参考资料跨站脚本攻击(XSS)XSS 简介人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户

    2022年3月1日
    51
  • 〖EXP〗NSA MS17010永恒之蓝一键工具

    〖EXP〗NSA MS17010永恒之蓝一键工具漏洞简介永恒之蓝是指2017年4月14日晚,黑客团体ShadowBrokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。漏洞检测无损检测,不会对目标造成任何危害,大家无需担心Ladon192.168.1.8MS1701

    2022年4月27日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号