在这篇文章里,我们将介绍在H.264编解码标准的基础上,实现的各主流编解码器。我们前面曾多次提到,H.264只是一个编解码的标准协议,它同MPEG-1和MPEG-2一样,协议里并没有规定编解码器的具体结构和实现方法。但是要求生成的数据流的结构,必须符合协议的规定,在这里也就是生成符合H.264标准的数据流。

这时我们可以称这种数据流格式为H.264格式,它可以保存在本地的文本文件中,也可以传输在传输信道上。但了解传输协议的都知道,在传输信道上传输的时候,还得在H.264数据包的基础上,再加上传输协议头,相当于给快递贴上快递单。

而在H.264标准文档里规定的数据流格式,当然是它的裸流格式,称为字节流格式,这在后面介绍H.264的句法和语义时将详细讲到。

所以讲上面几段,其实是为了明确学习方向。也是为什么要在这个时候,讲H.264的编解码器的原因。我们前面总在讲H.264标准的各种编码方法,包括片、宏块、帧内预测、帧间预测,而在后面我们要讲的,则是H.264的数据流结构,也即句法和语义。

可以想象一下,从编码方法到比特流结构,这中间少了什么过程?这就是编码器的实现过程!当然了,我们在这里并不会长篇大论,详细讲述各编解码器(codec)的实现原理,只是为了说明,在目前的市场上,比较主流的各大编解码器(codec)有哪些。

为什么会有各个不同的编解码器?
有些同学可能依然对这个问题有疑问,我们开头说了,H.264并没有规定编解码器该如何实现,只是规定了最终的数据流结构。所以H.264编解码器,人人可开发,各个codec,都是殊途同归而已。也正因如此,优秀的编解码器才得以出现。

下面,我们将会介绍几款主流的编解码器,而且是开源的。因为我们是用来学习的,所以在最后,会给出这些编解码器的学习建议,以及H.264的学习方向。

这几款编解码器为:JM、x264、Xvid、T264、ffmpeg、ffdshow,下面我们一一介绍。

1. JM

JM是H.264/AVC的制定方,ISO/IEC官方提供的一个参考软件,就像ISO/IEC的其他MPEG标准一样。它的主要目的,是给出H.264标准的实现示例,而不是为了成为一个实用的软件。这一点成为了它与其他编解码器,明显区别的地方。

使用过JM的人都知道,它的编解码速度是比较慢的,编码一帧的图像,就可能会用0.5-1秒的时间。所以JM很少应用在商业软件上,它较多用于学术研究上面。

也就是说,JM的编解码器,比较贴合H.264标准的规定。我们之前说H.264有三种配置,分别为基本配置(Baseline)、主流配置(main)、扩展配置(Extended),而JM实现了H.264的全部配置。而且它的代码结构比较清晰,所以对于想研究H.264的人来说,JM无疑是很好的选择。

它的源代码下载地址为:
http://iphome.hhi.de/suehring/tml/download/

2. x264

x264最开始是由一个哥们自己开始写的,始于2003年,后来这个哥们在2004年加入ATEME之后,就洗手不干了。另一个哥们开始接手,到目前为止,x264的主要开发成员有4个。

与JM相比,x264并没有实现h.264的全部配置,它主要实现了主流配置(main)。而且它舍去了一些对编码性能贡献较小,但是计算复杂度很高的特性。所以它的编码速度提高很多,但是编码效率并没有明显降低。而且x264主要采用c语言编写,底层模块使用了汇编语言进行优化,在今天,x264已经成为最好的h.264编码器。

要注意的是,x264是一个编码器,它并没有实现解码器的部分。由x264编码得到的h.264数据流,可以由其他实现了h.264 main配置的解码器进行解码,如JM和后面要介绍的FFMPEG。

x264目前广泛的应用于商业上的音视频开发中,如目前火爆的直播、小视频平台。所以只要是做音视频开发的,x264是必不可少要学习的部分。

它的源代码下载地址为:
http://www.videolan.org/developers/x264.html

3. Xvid

Xvid并不属于H.264的编解码器,它是MPEG-4的编解码器。我们之前就知道,MPEG-4分为了很多个部分,其中第十部分(Part 10)即H.264,而Xvid不是MPEG-4 Part 10 的编解码器,它是MPEG-4 Part 2 的编解码器,并且主要实现的是MPEG-4 Part 2 许多配置中的ASP(Advanced Simple Profile)的配置。

这里之所以要讲Xvid,是因为它也非常有名,它是世界上最常用的视频编解码器。它主要采用标准C编写,核心模块实现了多个CPU的汇编优化。如果你要进行MPEG-4的编解码,它可能是最好的选择。

而且它同样是开源的,无论对于音视频学习、软件开发、视频编码应用都很有帮助。另外有一个有趣的故事就是,在Xvid产生的过程中,可谓几经波折。这也就是它和DivX的故事,有兴趣的同学可以自行百度下。

Xvid的影响非常深远,虽然我们将它放在x264下面来讲,但猜也猜得到,它其实产生在x264之前,并且有历史渊源。x264的命名,与Xvid也有些类似,并且x264源码的工程结构,与Xvid非常相似。而后面要讲的T264,更像是仿照Xvid来写的。

它的源代码下载地址为:
https://www.xvid.com

4. T264

T264是由中国视频编码自由组织联合开发的编解码器,没错,它是中国的!但是T264编码得到的码流,与H.264的标准协议少有不同,而且它的解码器,只能解T264编码得到的码流。

所以,知道这些就好啦,不用深入研究。

5. FFMPEG

估计很多人都听过FFMPEG的大名,当然没听过也没关系。与上面几个编解码器不同的是,FFMPEG并不是一个编解码器。因为,它是一个完整的跨平台音视频解决方案,编解码器只是它的一部分,它属于一个集合。

使用FFMPEG,可以进行视频采集、视频格式转换、视频截图、给视频加水印等功能。而FFMPEG之所以能进行H.264编解码,是因为它包含了音视频编解码库libavcodec。除此之外,它还包含了用于各种音视频封装格式的生成和解析的库、公共函数库、场景缩放库、后期处理库、播放器等多个代码库。

可以说,只要掌握了FFMPEG,就掌握了音视频开发的半壁江山!

在FFMPEG中,它包含了一个播放器库ffplay,这个我们后面会单开一篇,来讲音视频开发中,所使用到的播放器。比如yuv、y4m、h264等视频文件的播放,而ffplay,则可以用来播放,由编码器编码得到的h.264数据流文件。

值得注意的是,FFMPEG所用的编码器,是上面说过的x264。FFMPEG里的编解码库libavcodec,在编码时需要通过调用x264来完成编码,所以在FFMPEG的源码中,需要包含x264才能进行编码。

而FFMPEG的解码部分,则要依靠libavcodec自身了。在前面,我们提到了JM、x264、Xvid、T264,而具有H.264解码器的,也就JM和T264,但是JM速度很慢、T264又只能解码自身产生的码流。所以FFMPEG的解码器的出现,显得非常重要,这也是FFMPEG能够流行的部分原因。

FFMPEG同时也支持大部分的音视频格式,比如MPEG-1/2/4、H.261/3/4、WMV、SVQ、PCM、ADPCM、FLV、AVI、MP3、OGG、ASF等90多种音视频格式的编解码器。

它的源代码下载地址为:
http://ffmpeg.org

6. ffdshow

ffdshow类似ffmpeg,它也是一个集合。但是它没有ffmpeg功能完善,它主要用于解码MPEG-4 ASP(编码由Xvid或DivX完成)和H.264的视频,但是它也支持很多其他的音视频格式,如MPEG-2、H.263、VP3、VP6、Theora、MP3、AAV、DTS、Vorbis等。

说ffdshow是一个集合,是因为它是基于DirectShow和VFW的,而DirectShow和VFW,都是微软开发的应用于windows的多媒体开发包,所以ffdshow不是跨平台的,它只能在windows上运行。

所以如果你想在windows下做视频处理,可以研究一下ffdshow,这里我就不多介绍了,将来有机会可以继续研究。

它的源代码下载地址为:
https://sourceforge.net/projects/ffdshow-tryout/

总结

对于本文介绍的这些编解码器,如果你还是新手,或者并没有多少音视频开发经验的话,这里并不建议直接去研究编解码器的源码。因为无论编码,还是解码,它们都对H.264的比特流结构具有很强的依赖性。所以后面,我们就开始逐步学习H.264的句法和语义,而在那之后,我们会逐步获取阅读codec源码的能力。

不过虽然不建议这时阅读源码,但是我建议同学们把几个编解码器的源码都下下来,尤其是JM、x264和FFMPEG,然后再按照顺序,试着使用它们编码或解码一段视频。当然我们后面还会介绍它们的使用,不着急的同学可以跟着文章的进度一起学习。

H.264/AVC 的各大主流编解码器相关推荐

  1. H.264/AVC (advanced video coding 高级视频编码)

    在视频会议应用中,视频质量和网络带宽占用是矛盾的,通常情况下视频流占用的带宽越高则视频质量也越高:如要求高质量的视频效果,那么需要的网络带宽也越大:解决这一矛盾的钥匙当然是视频编解码技术.评判一种视频 ...

  2. 音视频开发(32)---H.264/AVC 主流视频编码标准的发展

    H.264/AVC 主流视频编码标准的发展 一. 主流视频编码标准的发展 长期以来,视频编码标准主要由两个国际组织负责制定:国际电信联盟ITU-T和国际标准化组织ISO.目前影响力最强的视频编码标准基 ...

  3. 【H.264/AVC视频编解码技术详解】二. 主流视频编码标准的发展

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  5. 视频教程-H.264/AVC视频编解码技术详解-其他

    H.264/AVC视频编解码技术详解 毕业于上海大学通信与信息工程学院,研究生学历,硕士学位.研究方向为视频处理与传输,对H.264/AVC.H.265/HEVC.AVS.AVS+.AVS2等视频编解 ...

  6. 6. H.264/AVC编码器原理

    1. H.264/AVC的应用 H.264 不仅具有优异的压缩性能,而且具有良好的网络亲和性,这对实时的视频通信是十分重要的.和 MPEG-4 中的重点是灵活性不同,H.264 着重在压缩的高效率和传 ...

  7. H.264/AVC视频编解码技术详解 第一章 视频信息与压缩编码

    H.264/AVC视频编解码技术详解系列笔记 是对 H.264/AVC视频编解码技术详解 课程的学习 文章目录 人与世界的交互 视频信号的表示方法 视频压缩编码 视频信息为什么可以被压缩? 视频压缩编 ...

  8. H.264/AVC技术进展及其务实发展策略思考

    随着NGN.3G及3G演进和NGBW等对视频.多媒体业务与网络应用的飞速发展需求,作为视频业务及存储应用核心技术的高效率 视频数字压缩编(译码)技术,愈来愈引起人们的关注,成为目前广播.视频与多媒体通 ...

  9. 【H.264/AVC视频编解码技术详解】二十三、帧间预测编码(1):帧间预测编码的基本原理

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  10. 笔记:新一代视频压缩编码标准-h.264/AVC

    第一章绪论: 信源模型: 1.基于波形的编码.基于波形的编码采用了把预测编码和变化编码组合起来的基于块的混合编码方法. 2.基于内容的编码.mpeg4采用的编码方法即是基于块的混合编码,又有基于内容的 ...

最新文章

  1. javascript初学者必须注意的7个细节
  2. Spring 框架基础(05):事务管理机制,和实现方式
  3. 一个http请求完整过程的个人理解
  4. docker run
  5. c# export server 调用sql_C#调用SQL Server参数过程传参
  6. Ubuntu与Windows时间不同步解决办法
  7. 先序、中序和后序数组两两结合重构二叉树 -- 图解
  8. 用科学数据求真:月球的激光发射器有用吗?
  9. Greenrobot-EventBus源码学习(四)
  10. matlab仿真电子秤,基于单片机的电子秤设计
  11. VS快捷键及调试方法(含VAssistX快捷键)
  12. 利用小程序快速生成App,只需七步
  13. python flask 读取地址栏参数
  14. 鸿蒙系统安全模式,安全模式怎么连接wifi
  15. Python什么都能做(二)用Python画微信新出的表情包
  16. 斐讯路由器怎样设置虚拟服务器,斐讯路由器怎么设置_p.to路由器设置界面-WIFI之家...
  17. 数据库安装时需要更新以前的Visual Studio 2010实例状态失败-----亲测可行
  18. 计算机学科教育案例怎么写,关于举办2019年学院《计算机应用基础》课程教学改革实验案例征文比赛的通知...
  19. 集合竞价如何买入_老股民教你如何用集合竞价买入涨停板,散户看到就是赚到!...
  20. java 比较两个字符串大小

热门文章

  1. Python爬虫入门教程!手把手教会你爬取网页数据
  2. Poi导入校验因单元格格式产生的空对象问题
  3. 犹太人成功和浪漫的秘诀(.html)
  4. oracle18c卸载方法,Oracle 18c Sharding 删除catalog 步骤
  5. 2020 — 只争朝夕,不负韶华
  6. [项目管理-2]:软硬件项目管理 - 干系人管理、实践活动、常见工具
  7. Ucinet三天写论文!自同构对等分析实战
  8. css3直线运动_纯css3动画--边框线条动画
  9. 良心推荐7个实用网站
  10. 协鑫:把绿色能源带进千家万户