音视频开发二:FFmpeg支持x264

        FFmpeg默认是只支持H.264的解码,但是不支持H.264的编码,下面我将带领大家一起编译一个可供我们使用的H.264的编码库。想了解FFmpeg库编译的步骤可看我的上一篇博客【音视频开发一:编译Android端使用的FFmpeg库】。

 

一:编译x264库。

1、下载地址 https://mp.csdn.net/postedit

2、下载完后解压如下。

3、替换configure文件中的配置

找到:

替换前(所有的):
    echo "SONAME=libx264.so.$API" >> config.mak
    
替换后(所有的):
    echo "SONAME=libx264-$API.so" >> config.mak

这一步操作也是为了生成Android平台可识别的so文件。

4、在configure的同级目录下新建build_x264.sh文件,内容为:

#
NDK=/Users/****/Documents/Android/NDK/android-ndk-r12b
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--disable-asm \
--enable-pic \
--enable-strip \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT \
make clean
make
make install
}

CPU=arm
PREFIX=$(pwd)/android/$CPU

build_one

注:请自觉将NDK路径改为自己的路径,同时验证下SYSROOT、TOOLCHAIN的配置是否存在。

5、进入build_x264.sh的目录下,运行 ./build_x264.sh 命令,编译x264库。

如果没有权限请先运行:sudo chmod +x build_x264.sh 命令,允许权限。

运行完后,目录下会新增一个android文件夹,

include文件下:头文件

libs:.a 的为静态库;.so 的为动态库。

--enable-shared \    编译出动态库
--enable-static \       编译出静态库

 

二:将编译好的x264库集成到FFmpeg中

假如你阅读了我的第一篇博客 音视频开发一:编译Android端使用的FFmpeg库 ,聪明的你肯定能发现在编译FFmpeg时,出现了如下的提示:libx264 not found

这是因为我们没有集成x264库。下面我们将 x264 集成到我们的FFmpeg中。

 

1、因为FFmpeg需要使用静态链接方式链接其他额外的外部库,所以需要.a格式的文件。

打开我们编译FFmpeg的build_android.sh文件,将内容改为:

#!/bin/sh
NDK=/Users/***/Documents/Android/NDK/android-ndk-r12b # 修改成自己本地的ndk路径。
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-pthreads \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-static \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-avdevice \
--enable-avfilter \
--enable-libx264 \
--enable-small \
--enable-asm \
--enable-neon \
--cross-prefix=$CROSS_PREFIX \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--enable-runtime-cpudetect \
--sysroot=$SYSROOT \
--disable-parsers \
--enable-parser=aac \
--enable-parser=h264 \
--enable-parser=mjpeg \
--enable-parser=png \
--enable-parser=bmp \
--enable-parser=mpegvideo \
--enable-parser=mpegaudio \
--disable-encoders \
--enable-encoder=h263 \
--enable-encoder=libx264 \
--enable-encoder=mpeg4 \
--enable-encoder=aac \
--enable-encoder=png \
--enable-encoder=gif \
--enable-encoder=bmp \
--disable-decoders \
--enable-decoder=h263 \
--enable-decoder=h264 \
--enable-decoder=mpeg4 \
--enable-decoder=mjpeg \
--enable-decoder=gif \
--enable-decoder=mp3 \
--enable-decoder=aac \
--enable-decoder=png \
--enable-decoder=bmp \
--enable-decoder=yuv4 \
--disable-network \
--enable-protocols \
--enable-protocol=concat \
--enable-protocol=hls \
--enable-protocol=file \
--disable-demuxers \
--enable-demuxer=h263 \
--enable-demuxer=h264 \
--enable-demuxer=flv \
--enable-demuxer=gif \
--enable-demuxer=aac \
--enable-demuxer=ogg \
--enable-demuxer=dts \
--enable-demuxer=mp3 \
--enable-demuxer=mov \
--enable-demuxer=m4v \
--enable-demuxer=concat \
--enable-demuxer=mpegts \
--enable-demuxer=mjpeg \
--enable-demuxer=mpegvideo \
--enable-demuxer=rawvideo \
--enable-demuxer=yuv4mpegpipe \
--disable-muxers \
--enable-muxer=h264 \
--enable-muxer=flv \
--enable-muxer=gif \
--enable-muxer=mp3 \
--enable-muxer=dts \
--enable-muxer=mp4 \
--enable-muxer=mov \
--enable-muxer=mpegts \
--disable-filters \
--enable-filter=aresample \
--enable-filter=asetpts \
--enable-filter=setpts \
--enable-filter=ass \
--enable-filter=scale \
--enable-filter=concat \
--enable-filter=atempo \
--enable-filter=movie \
--enable-filter=overlay \
--enable-filter=rotate \
--enable-filter=transpose \
--enable-filter=hflip \
--extra-cflags="-I/Users/***/Documents/Documents/Projects/FFmpeg/x264/android/arm/include" \
--extra-ldflags="-L/Users/***/Documents/Documents/Projects/FFmpeg/x264/android/arm/lib" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"

build_one

注:

1、请自觉将NDK路径改为自己的路径,同时验证下SYSROOT、TOOLCHAIN的配置是否存在。

2、extra-cflags和extra-ldflags换成自己刚才编译的x264文件。他们两个的前缀有一个“-I”和“-L”。

-D:用于在编译时定义宏
-I:编译阶段生效的参数,用于指定头文件的搜索路径
-L:链接阶段生效的参数,用于指定链接库的搜索路径,
-l用于指定链接库的名称,一般两者一起使用的话,就可以指定动态链接库

2、改完build_android.sh文件后,我们执行 ./build_android.sh 命令。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值