FFMPEG的视音频编解码功能非常强大,几乎囊括了现存所有的视音频编码标准,但是它没有音频和视频的编码库,本节介绍在linux下,安装FFMEPG,并集成音视频编码,SDL库的方法。
1、下载最新的安装代码。
H264 编码库 :http://www.videolan.org/developers/x264.html
NASM汇编器:https://www.nasm.us/
LAME 编码库:https://sourceforge.net/projects/lame/
SDL : http://www.libsdl.org/
FFMPEG : http://www.ffmpeg.org/
2、 安装lame
./configure
make
make install
3、安装X264
./configure --enable-shared
make
make install
注意,一定要使用--enable-shared参数
如果安装过程中遇到错误提示
则表示需要安装nasm更高版本
4. 安装nasm
./configure
make
make install
5、安装SDL
./configure make make install
6、安装FFMPEG
![cb38817be31aa5aec42ea49af3f4a392.png](https://img-blog.csdnimg.cn/img_convert/cb38817be31aa5aec42ea49af3f4a392.png)
FFmpeg官方说明
FFmpeg是一个领先的多媒体框架,能够编码,解码,转码,多路复用,解复用,流,滤波,同时播放任何机器和人创造的美好的事物。它支持非常多的视频格式包括那些很老的格式。不管它们是被一些标准委员会、社区或者公司设计的。它也是高度可移植的:FFmpeg 在各种构建环境下,机器体系架构下和配置下编译,可以在Linux, Mac OS X,Microsoft Windows, BSDS, Solaris等基础机构下运行。 FFmpeg包含可供应用程序使用的libavcodec,libavutil,libavformat,libavdevice,libwscale和libswresample。和ffmpeg,ffplay和ffprobe一样,用户可以使用ffmpeg来进行转码和播放。
![48f7262efc25241e7cb1d0bcdf5cb82b.png](https://img-blog.csdnimg.cn/img_convert/48f7262efc25241e7cb1d0bcdf5cb82b.png)
为什么需要ffmpeg
手动获取rtsp视频流保存到本地
- 实现rtsp客户端,接收音视频包
- 解视频包(rtp->h264)
- 解音频包(rtp->PCM(alaw))
- 音频转码(PCM->AAC)
- 重新封装音视频包
视音频编解码技术学习
不同的电影有不同的格式,用不同的后缀表示:avi、rmvb、mp4、flv、mkv等等,这些格式代表的是封装格式。封装格式就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难看出具体使用的是什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。
![98d93191efa77ab0ae2bcb71803aa58c.png](https://img-blog.csdnimg.cn/img_convert/98d93191efa77ab0ae2bcb71803aa58c.png)
视频播放器原理
视音频技术主要包含以下几点:封装技术、视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。 视频播放器原理:视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,只需要解封装、解码视音频,视音频同步。
![50eb58c2a9db0b762188e7a96d4a48d3.png](https://img-blog.csdnimg.cn/img_convert/50eb58c2a9db0b762188e7a96d4a48d3.png)
流媒体协议
流媒体协议是服务器和客户端之间通信遵循的规定。当前网络上主要的流媒体协议如表所示。
![f44c64bbb72e8bca7fe8b0cd120d5502.png](https://img-blog.csdnimg.cn/img_convert/f44c64bbb72e8bca7fe8b0cd120d5502.png)
![fbef52ce35aae5ecac9080e9a8c62a54.png](https://img-blog.csdnimg.cn/img_convert/fbef52ce35aae5ecac9080e9a8c62a54.png)
封装格式
封装格式的主要作用是把视频码流和音频码流安装一定的格式存储到一个文件中。现如今流行的封装格式如下
![ab250ee039092b12046b9474d9eee41c.png](https://img-blog.csdnimg.cn/img_convert/ab250ee039092b12046b9474d9eee41c.png)
视频编码
视频编码的主要作用是将视频像素数据压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的。视频编码是视音频中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。 注:视频编码技术在整个视音频中应该是最复杂的技术。
![fb8d4c30096402e9da954adaa0ddbdaa.png](https://img-blog.csdnimg.cn/img_convert/fb8d4c30096402e9da954adaa0ddbdaa.png)
音频编码
音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频中一个重要的技术。但是一般情况在音频的数据量要远小于视频的数据量,因为即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。
![147053c298ddaad584b8cc8ea05062c1.png](https://img-blog.csdnimg.cn/img_convert/147053c298ddaad584b8cc8ea05062c1.png)
![32f27db457971d5b8ae76a0d916ef06b.png](https://img-blog.csdnimg.cn/img_convert/32f27db457971d5b8ae76a0d916ef06b.png)