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

来源:互联网 发布:非诚勿扰恶搞视频软件 编辑:程序博客网 时间:2024/06/09 17:14

一直通过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_sourceswget http://downloads.sourceforge.net/opencore-amr/fdk-aac-0.1.5.tar.gztar -zxvf fdk-aac.tar.gz && mv fdk-aac-0.1.5 fdk-aaccd fdk-aac./configure --prefix="$HOME/ffmpeg_build" --disable-sharedmakemake installmake distclean

安装libvpx-1.6.1

cd ~/ffmpeg_sourceswget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2tar -jxvf libvpx.tar.bz2 && mv libvpx-1.6.1 libvpxcd libvpxPATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-testsPATH="$HOME/bin:$PATH" makemake installmake clean

安装x265-2.4

cd ~/ffmpeg_sourcessudo apt-get install cmake mercurialwget https://bitbucket.org/multicoreware/x265/downloads/x265_2.4.tar.gztar -zxvf x265_2.4.tar.gz && mv x265_2.4 x265cd x265/build/linuxPATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../sourcemakemake installmake distclean

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

cd ~/ffmpeg_sourceswget http://ffmpeg.org/releases/ffmpeg-3.3.1.tar.xztar -Jxvf ffmpeg-3.3.1.tar.xz  && mv ffmpeg-3.3.1 ffmpegcd ffmpegPATH="$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-nonfreePATH="$HOME/bin:$PATH" makemake installmake distcleanhash -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.gzmkdir ~/Javatar -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/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

使环境变量生效

source /etc/profile

查看系统中已有的JDK版本

sudo update-alternatives --config javasudo update-alternatives --config javacsudo update-alternatives --config javaws

设置系统默认JDK

sudo update-alternatives --install /usr/bin/java java /home/xxx/Java/jdk1.8.0_131/bin/java 2000sudo update-alternatives --install /usr/bin/javac javac /home/xxx/Java/jdk1.8.0_131/bin/javac 2000sudo 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.gztar -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。

原创粉丝点击