本文所有内容均为原创,转载请注明出处!
前言前段时间一直在搞视频编解码与传输的东西,现在基本上整个系统能够实现服务器实时编码打包传输给客户端,客户端实时解码并显示的功能,故将上一阶段的工作整理记录一下,将我使用x264进行h.264编码的过程,使用jrtplib进行h264数据包传输的过程以及使用ffmpeg进行解码的过程都记录下来,一方面是自己做一个总结,另外一方面也是想帮助那些跟我做同样工作的人更快的熟悉这些内容。
下面,首先开始我对x264这个库的进行h.264视频编码的介绍。在我的博客中之前我已经介绍过如何在windows下编译x264的库,所以这里不再叙述,其实我个人觉得windows下编译这个库没有意义,只是浪费时间,因为即使在windows下编译出来可以使用的库,依然是不能跟进库里面看程序的执行的(也可能是我水平不够,没有发现此方法,但是依然我博客中的那种方法是不能跟进程序内部的)。倘若能在网上直接找到一个编译好的库拿来直接使用则是最好的,所以我将我的编译好的库上传到我的github,需要的请戳这里(里面还包含已经编译好的ffmpeg库)。
在我使用这个库进行视频编码的时候,我发现网上能够找到的资源非常少,x264也并没有提供相应的api文档,从网上找到的x264学习笔记也是看着让我非常郁闷,时间比较久了不说,写的也是不清不楚,对于我这种现在仅仅需要知道怎样使用这个库的人,还是作用不大,于是自己将x264在linux下编译了一下,跟进x264.c的运行终于把x264编码的流程搞懂了,虽然其中一些参数还是一知半解。
H264基本知识
想要使用x264进行h.264的视频编码,首先还是需要对h.264编码有一定的了解,下面我先对h.264编码的一些基本知识进行介绍,如果想深入了解,可以参考毕厚杰的《新一代视频压缩编码标准》这本书。
首先,我们必须知道h264支持三种不同的档次:
1、基本档次