欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FFMPEG(1):Linux下FFMPEG编译与调试(Eclipse平台)

程序员文章站 2022-06-04 13:03:27
...

一直通过FFMPEG进行视频文件和网络流的解码和显示,因此想仔细研究下FFMPEG的运行机理,希望能够单步调试下FFMPEG,所以希望构建可以Debug的工程。我选择了Ubuntu16.04系统,应用Eclipse作为IDE进行工程构建。

简单描述一下FFMPEG。FFMPEG是一套开源的多媒体开发和应用库,可实现数字多媒体信息(视频/音频的)的录制、转换以及流化。FFMPEG可实现快速的音视频转换,并能读取实时视频和音频。FFMPEG提供了直观的命令行接口,通过输入参数实现琪支持的全部特性。同时,FFMPEG支持视频采样率(帧率)转换,以及通过高质量多项式滤波器实现视频帧分辨率调整。FFMPEG支持Linux视频设备的内核驱动V4L(Video4Linux)和UNIX下的开放音频系统OSS(Open Sound System)。

务虚的话说完了,开始务实了~
1. 安装Linux系统,
这里我选择Ubuntu16.04LTS。Ubuntu系统界面上做的比较友好,安装软件也很方便,16.04是目前最新的LTS版本,因此选择此版本。安装Ubuntu系统的方法我就不再赘述了,可以参考我的博客http://blog.csdn.net/ezhchai/article/details/52891014
安装之后,需要配置一些基本环境,可以参考我的博客http://blog.csdn.net/ezhchai/article/details/52972064

2.安装基础环境
基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句如下:

sudo apt-get -y install autoconf automake build-essential libtool libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zli-dev

3.安装依赖库
依赖库分两方面,参考以下网站列出的依赖库信息,本文选择的版本均参考于此网页
http://www.linuxfromscratch.org/blfs/view/svn/multimedia/ffmpeg.html
3.1 FFMPEG推荐的依赖开发库(不需要独立安装)

sudo apt-get -y install libass-dev libfreetype6-dev libmp3lame-dev libtheora-dev libvorbis-dev libopus-dev libx264-dev yasm

3.2 FFMPEG桌面应用推荐的依赖开发库(不需要独立安装)

sudo apt-get -y install libva-dev libvdpau-dev libsdl2-dev

3.3 需要独立安装的依赖开发库
首先创建FFMPEG代码目录,所有的源代码放在这个目录下

mkdir ~/ffmpeg_sources 

安装fdk-aac-0.1.5

cd ~/ffmpeg_sources
wget http://downloads.sourceforge.net/opencore-amr/fdk-aac-0.1.5.tar.gz
tar -zxvf fdk-aac.tar.gz && mv fdk-aac-0.1.5 fdk-aac
cd fdk-aac
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

安装libvpx-1.6.1

cd ~/ffmpeg_sources
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2
tar -jxvf libvpx.tar.bz2 && mv libvpx-1.6.1 libvpx
cd libvpx
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests
PATH="$HOME/bin:$PATH" make
make install
make clean

安装x265-2.4

cd ~/ffmpeg_sources
sudo apt-get install cmake mercurial
wget https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gz
tar -zxvf x265_2.4.tar.gz && mv x265_2.4 x265
cd x265/build/linux
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
make distclean

4.编译FFMPEG
不多说了,直接上代码

cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-3.3.1.tar.xz
tar -Jxvf ffmpeg-3.3.1.tar.xz  && mv ffmpeg-3.3.1 ffmpeg
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash -r

Ffmpeg编译之后,即可使用。编译生成的可执行程序在~/bin目录下
5.安装JDK
虽然全程用C++编译,但是安装Eclipse需要JDK环境,因此要先安装JDK。
首先要查看系统位数:

getconf LONG_BIT

我的系统是64位系统,下载Linux下64位JDK安装包并解压

wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/jdk-8u131-linux-x64.tar.gz
mkdir ~/Java
tar -zxvf jdk-8u131-linux-x64.tar.gz -C ~/Java/

设置环境变量

sudo vim /etc/profile

在结尾写入代码(xxx为用户名,即为登录账户)

export JAVA_HOME=/home/xxx/Java/jdk1.8.0_131    
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

使环境变量生效

source /etc/profile

查看系统中已有的JDK版本

sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws

设置系统默认JDK

sudo update-alternatives --install /usr/bin/java java /home/xxx/Java/jdk1.8.0_131/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /home/xxx/Java/jdk1.8.0_131/bin/javac 2000
sudo update-alternatives --install /usr/bin/javaws javaws /home/xxx/Java/jdk1.8.0_131/bin/javaws 2000

查看java版本,如果查看到与安装的一致,则说明安装成功

java -version

6.安装Eclipse
下载并安装Eclipse

wget http://mirrors.opencas.org/eclipse/technology/epp/downloads/release/neon/3/eclipse-cpp-neon-3-linux-gtk-x86_64.tar.gz
tar -zxvf eclipse-cpp-neon-3-linux-gtk-x86_64.tar.gz && mv eclipse ~/

Eclipse解压之后直接使用,开启Eclipse

cd ~/eclipse
./eclipse

配置Eclipse
在Eclipse菜单中选择 help -> install new software
点击“Add…”按钮,加了下面的软件源地址
http://download.eclipse.org/tools/cdt/releases/9.2
并命名为CDT。这里要注意一下你的Eclipse版本,你可以点击Help -> About Eclipse SDK查看得知,并在下面网站上找到相应的网址
http://www.eclipse.org/cdt/downloads.php
选好后确定,即可看到要求我们选择要安装的软件。其实安装CDT Main Features 和 CDT Optional Features中的GCC就可以了,一些选项还依赖于其它可能没有安装好的库,装了也不会起作用。不过在这里浪费时间没必要,都选了就得了~
然后选择“Next -> Next -> Finsh”就开始安装了,安装结束后,会弹出如下要求重启Eclipse提示框。点击Yes重启Eclipse,这样就安装成功了。重启之后可以新建C++ Project了。
另外需要注意的是我们在编译C++的时候要注意配置编译器的路径和C++运行库的路径,具体方法是打开windows->preference->C/C++->Environment

C_INCLUDE_PATH=/usr/include
C_PLUS_INCLUDE_PATH=/usr/include/c++/4.6.3

其中,/usr/include/c++/4.6.3为C++编译器的所在路径。
7.建立FFMPEG工程
选择New-> Makefile project from existing code,在弹出对话框中,选择代码目录,设定工程名,选择Liuux GCC作为编译器,确定即可。
编译工程,在重新执行config命令后,即可右击工程名称,点击Build project,完成编译过程。
为程序添加参数:右击工程名称,Run As -> Debug Configerations中选择Arguments选项卡,选择ffmpeg,在其中添加-i 01.mp4 01.mkv,可以实现格式转换。
将01.MP4文件拷贝到到目前为止,程序可以通过Eclipse运行。
8.FFMPEG代码Debug
刚才的工程可以运行,但不能debug。解决此问题,首先认定一点,生成的可执行程序中,ffmpeg不包含调试信息,调试信息在ffmpeg_g中,debug要选择ffmpeg_g。
另外,./config选项也是确定包含调试信息的核心,根据网上的信息,主要注意一下几点。
需要在config中添加
–enable-debug=3 开启debug调试
–disable-asm 禁用asm优化
–disable-optimize 禁用优化
–disable-stripping 禁用剥离可执行程序和共享库
采用以下命令重新config

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-debug=3 --disable-asm --disable-stripping

右击工程名称,点击Build project,完成编译过程。为程序添加参数:右击工程名称,Debug As -> Debug Configerations中选择Arguments选项卡,选择ffmpeg_g,在其中添加-i 01.mp4 01.mkv,可以实现Debug。