如何将ffmpeg移植到Android平台
来源:互联网 发布:unity3d 自发光材质 编辑:程序博客网 时间:2024/05/21 11:23
编译带h264编码器的ffmepg库在Android4.6平台上运行,主要步骤如下:
1、下载ffmpeg源码(我使用的2.7版本)
2、下载h264编码器
3、编译h264编码器静态库(build_h264.sh)
export NDK=/home/juhaowangluo/ndk/android-ndk-r10dexport PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuiltexport PLATFORM=$NDK/platforms/android-19/arch-armexport PREFIX=/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264./configure --prefix=$PREFIX --cross-prefix=/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/home/juhaowangluo/ndk/android-ndk-r10d/platforms/android-19/arch-arm --enable-static --enable-pic --disable-asm --disable-cli --host=arm-linux
编译成功后会在ffmpeg/Android_ndk/android-x264/lib目录中出现一个libx264.a文件
4、编译ffmpeg库(build_ffmepg.sh)
这一步问题最多,大家遇到了慢慢解决,我只把我遇到问题列一下。
网上编译脚本很多,但都很复杂,这个相对来说简单点(我对make file脚本不熟)。
#!/bin/shNDK="/home/juhaowangluo/ndk/android-ndk-r10d"PREBUILT="/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt"PLATFORM="/home/juhaowangluo/ndk/android-ndk-r10d/platforms/android-19/arch-arm"PREFIX="/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264"build_one(){./configure --target-os=linux --prefix=/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264 \--enable-cross-compile \--enable-runtime-cpudetect \--disable-asm \--arch=arm \--cc=/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc \--cross-prefix=/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- \--disable-stripping \--nm=/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm \--sysroot=/home/juhaowangluo/ndk/android-ndk-r10d/platforms/android-19/arch-arm \--enable-nonfree \--enable-version3 \--disable-everything \--enable-gpl \--disable-doc \--enable-avresample \--enable-demuxers \--enable-muxers \--disable-ffplay \--disable-ffserver \--disable-ffmpeg \--disable-ffprobe \--disable-devices \--disable-avdevice \--enable-encoders \--enable-decoders \--enable-libx264 \--enable-encoder=libx264 \--enable-decoder=h264 \--enable-protocols \--enable-hwaccels \--enable-zlib \--enable-decoder=flv \--enable-encoder=flv \--enable-decoder=rawvideo \--enable-decoder=h263 \--enable-parser=h263 \--enable-demuxer=h263 \--extra-cflags="-I/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \--extra-ldflags="-L/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264/lib"make -j4 install/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o/home/juhaowangluo/ndk/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld -rpath-link=${PLATFORM}/usr/lib -L${PLATFORM}/usr/lib -L${PREFIX}/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o ${PREFIX}/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libswresample/libswresample.a -lc -lm -lz -ldl -llog -lx264 --dynamic-linker=/system/bin/linker ${PREBUILT}/linux-x86_64/lib/gcc/arm-linux-androideabi/4.6/libgcc.a}build_one
编译成功后会在Android_ndk\android-x264下面生成一个libffmpeg.so文件,到此带h264编码的ffmepg库编译完成。
这次编译过程遇到问题,这里也列一下,整改过程中h264编译很顺畅,一次通过。主要说下ffmepg编码的问题:
1、链接h264库
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
设置h264库和h文件的路径:
--extra-cflags="-I/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264/include“
--extra-ldflags="-L/home/juhaowangluo/LiuCongkuan/ffmpeg/Android_ndk/android-x264/lib"
2、错误1: 报h263链接错误
解决方法,如下
--enable-decoder=rawvideo \
--enable-decoder=h263 \
--enable-parser=h263 \
--enable-demuxer=h263 \
3、错误2: h263编译链接错误通过上面的方法解决后,又出现”opusdec.c error: undefined reference to 'swr_is_initialized'“的类似链接错误
解决方法,如下
加入libswresample.a链接库
- 如何将ffmpeg移植到Android平台
- 利用 android NDK将 FFmpeg 移植到 Android平台
- ffmpeg移植到android平台
- FFmpeg 移植到 Android 平台
- FFmpeg 移植到 Android 平台
- 将ffmpeg移植到Android
- 将ffmpeg移植到Android
- FFmpeg 移植到 Android 平台(2)
- FFmpeg-3.3.1移植到Android平台
- Ubuntu 下将ffmpeg移植到Android
- ffmpeg android 平台移植
- Android平台移植FFmpeg
- 将boa移植到Android平台上
- 将Boa移植到Android平台上
- 移植 ffmpeg 到 ARM 平台
- 移植ffmpeg到android
- 移植ffmpeg到android
- 移植ffmpeg到android
- 美丽新世界!
- iOS开发下载文件速度计算(刚刚)
- NSURLSession使用说明及后台工作流程分析
- 读书笔记MoreEffectiveC++(24)
- IOS 预处理语句
- 如何将ffmpeg移植到Android平台
- 【源码】Hadoop 2.x中fsimage和edits合并实现
- js数组的操作
- android模拟器打不开问题总结原因大全
- Swap Nodes in Pairs
- 如何把Windows里的文件轻松分享给苹果Mac电脑
- POJ 2653 && HDU 1147 Pick-up sticks(计算几何)
- django @login_required
- Mac服务器服务更新常用的几个shell命令