ubuntu 14.04 LTS编译基于ffmpeg+sdl2.0的简单播放器

来源:互联网 发布:淘宝返现最多的app 编辑:程序博客网 时间:2024/04/29 01:53

ubuntu 14.04 LTS编译基于ffmpeg+sdl2.0的简单播放器

概要

我刚开始进入ffmpeg领域学习,最近参考最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0) 尝试自行编译调试simplest_ffmpeg_player.c(雷神源码里面是simplest_ffmpeg_player.cpp,自行修改下后缀,还有些ffmpeg宏参数变化要稍微修改下)来玩一下,编译过程中遇到了一些问题,主要和系统Ubuntu 14.04 LTS有关。

Ubuntu14.04 LTS由于某些特殊原因把ffmpeg工具和相关库从aptitude软件库中删除了,取而代之的是“fake ffmpeg”!所以编译simplest_ffmpeg_player.c过程中发现少了很多库,不止是ffmpeg显式链接的libavformat,libavcodec,libavutil等库,还有茫茫多的其他工具和库都没有了(按照ffmpeg基于ubuntu14.04官方安装文档安装了ffmpeg各种工具和库,编译过程中依旧报一堆错误)。我也是折腾了一段时间才找到了下面这个很实用的方法:基于ffmpeg源码搭建高效的编译调试环境。

搭建ffmpeg源码编译环境

打开参考文档Ubuntu CompilationGuide,有如下几点需要简单说明下:

  • 在“Get the Dependencies”章节,除了要安装参考文档提到的所有依赖库,还要使用以下命令安装sdl2.0相关库:
sudo apt-get -y install libsdl2-dev
  • 在“Compilation & Installation”章节,先忽略一开始提到的“Install FFmpeg”,“Reverting Changes Made by This Guide”这两个东东(其实就在该文档的后面)。按照文档创建目录ffmpeg_sources,ffmpeg_build,bin,之后按部就班的安装Yasm,libx264,libx265,libfdk-aac,libmp3lame,libopus,libvpx这些工具和库。
  • 在“ffmpeg”章节,只要执行到如下configure命令即可(如果你想要安装ffmpeg整套工具,也可以执行后续的make和install命令,我们后面的编译环境用不到):
cd ~/ffmpeg_sourceswget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2tar xjvf ffmpeg-snapshot.tar.bz2cd 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-nonfree

检查configure命令配置成功的标志之一是检查下doc/examples/pc-uninstalled/目录是否存在(该目录后续会用到):

ls doc/examples/pc-uninstalled/

到这里为止,我们已经把整个ffmpeg(+sdl2.0)源码编译环境配置好了,下面是在这个环境中编译simplest_ffmpeg_player.c的方法

编译simplest_ffmpeg_player.c

首先进入到ffmpeg源码的doc/examples/目录:

cd doc/examples/

之后把雷神源码里面的simplest_ffmpeg_player.c和bigbuckbunny_480x272.h265拷贝到该目录下,修改该目录下的Makefile如下:

diff --git a/doc/examples/Makefile b/doc/examples/Makefileindex af38159..ff1401a 100644--- a/doc/examples/Makefile+++ b/doc/examples/Makefile@@ -9,7 +9,7 @@ FFMPEG_LIBS=    libavdevice                        \ CFLAGS += -Wall -g CFLAGS := $(shell pkg-config --cflags $(FFMPEG_LIBS)) $(CFLAGS)-LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS)+LDLIBS := $(subst SDL,SDL2, $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS)) EXAMPLES=       avio_dir_cmd                       \                 avio_reading                       \@@ -26,6 +26,12 @@ EXAMPLES=       avio_dir_cmd                       \                 scaling_video                      \                 transcode_aac                      \                 transcoding                        \+               simplest_ffmpeg_player                  \ OBJS=$(addsuffix .o,$(EXAMPLES))

之后就可以在该目录下执行编译命令:

PKG_CONFIG_PATH=pc-uninstalled make

编译完成就会看到可执行文件simplest_ffmpeg_player,run it:

./simplest_ffmpeg_player

播放器跑起来啦!

题外话

有了这个基础,你就可以把雷神源码包里面的simplest_ffmpeg_decoder.c,simplest_ffmpeg_decoder_pure.c,simplest_ffmpeg_helloworld.c,simplest_ffmpeg_player_su.c,simplest_video_play_sdl2.c全部放到这个环境下编译,稍微修改下cpp转换到c的一些参数兼容,以及ffmpeg一些宏参数的变化。

另外我也把修改保存到了自己的github上面,请参考 github

0 0
原创粉丝点击