Android 网络摄像头开发笔记(1)
ffmpeg 编译篇
编译环境
System:ubuntu14.04
NDK: android-ndk-r8b-linux-x86.tar.bz2
SDK: android-sdk_r23.0.2-linux.tgz
FFMPEG: ffmpeg-2.4.3
ffmpeg 配置文件(config_make.sh)
#!/bin/bash
NDK=/home/username/work/tools/android-ndk-r8b
PLATFORM=$NDK/platforms/android-8/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86
LOCAL_ARM_NEON=true
CPU=armv7-a
PREFIX=./android/$CPU
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--arch=arm \
--enable-nonfree \
--enable-asm \
--cpu=cortex-a8 \
--enable-neon \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-shared \
--enable-static \
--enable-swscale \
--enable-avutil \
--enable-swresample \
--enable-avformat \
--enable-avcodec \
--enable-avfilter \
--enable-avdevice \
--enable-pthreads \
--disable-yasm \
--enable-zlib \
--enable-pic \
--enable-small \
--enable-gpl \
--enable-decoder=mjpeg --enable-demuxer=mjpeg --enable-parser=mjpeg \
--enable-demuxer=image2 --enable-muxer=mp4
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavformat/libavformat.a libavcodec/libavcodec.a libswscale/libswscale.a libpostproc/libpostproc.a libavutil/libavutil.a libavfilter/libavfilter.a libavdevice/libavdevice.a libswresample/libswresample.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
把这个文件放到ffmpeg根目录下,直接运行后可生成android的文件夹,里面有.so 的动态文件,因为我没有–disable-everything,所以很多选项都是默认开启的,.so的库文件有40多M,链接到Android的工程里面后就只有6m左右了。如果觉得过大,还要裁剪,就需要–disable-everything ,然后把需要的enable ,为了调试方便,暂且不去关吧。
编译问题
- NDK版本问题 :在ubuntu10.04 _x64上我用NDK_08b版本编译成了并运行也是好的,但是在14.04_x64上,我用ndk_10d_x86_64的版本编译ffmpeg 2.5.3成功后,播放视频的时候报atof 未定义,这个问题纠结了我很久,因为项目紧张,最后也没有解决,最后切回ffmpeg2.4.3,用ndk_08b 编译运行OK。各位有遇到这个问题的说下解决办法吧。