zoukankan      html  css  js  c++  java
  • android编译ffmpeg+x264

    下载最新版的x264
    ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
    1.解压到指定的目录
    2.切换当前目录为该目录
    3.创建一个shell脚本build_x264.sh,内容如下:

    复制代码
    export NDK=/home/robin/桌面/android-ndk-r8c
    export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt
    export PLATFORM=$NDK/platforms/android-8/arch-arm 
    export PREFIX=/home/robin/android-x264
    ./configure --prefix=$PREFIX 
    --enable-static 
    --enable-pic 
    --disable-asm 
    --disable-cli 
    --host=arm-linux 
    --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- 
    --sysroot=$PLATFORM
    复制代码

    执行如下命令编译和安装
    make
    sudo make install
    sudo ldconfig
    编译ffmpeg:
    下载最新版的ffmpeg
    http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
    1.解压到指定的目录
    2.切换当前目录为该目录
    3.创建一个shell脚本build_ffmpeg.sh,内容如下:

    复制代码
    #!/bin/sh
    export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt
    export PLATFORM=$NDK/platforms/android-8/arch-arm
    export PREFIX=/home/robin/android-x264
    
    build_one(){
    ./configure --target-os=linux --prefix=$PREFIX 
    --enable-cross-compile 
    --enable-runtime-cpudetect 
    --disable-asm 
    --arch=arm 
    --cc=$PREBUILT/linux-x86/bin/arm-linux-androideabi-gcc 
    --cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- 
    --disable-stripping 
    --nm=$PREBUILT/linux-x86/bin/arm-linux-androideabi-nm 
    --sysroot=$PLATFORM 
    --enable-nonfree 
    --enable-version3 
    --disable-everything 
    --enable-gpl 
    --disable-doc 
    --enable-avresample 
    --enable-demuxer=rtsp 
    --enable-muxer=rtsp 
    --disable-ffplay 
    --disable-ffserver 
    --enable-ffmpeg 
    --disable-ffprobe 
    --enable-libx264 
    --enable-encoder=libx264 
    --enable-decoder=h264 
    --enable-protocol=rtp 
    --enable-hwaccels 
    --enable-zlib 
    --disable-devices 
    --disable-avdevice 
    --extra-cflags="-I/home/robin/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/robin/android-x264/lib"
    
    make -j4 install
    
    
    $PREBUILT/linux-x86/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
    
    $PREBUILT/linux-x86/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 -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
    }
    
    build_one
    复制代码

    执行build_ffmpeg.sh编译完成,编译输出在$PREFIX指定的目录

    原文:http://hi.baidu.com/duizhe_memory/item/482e6fd6ccfee7fa93a974be

    但是那个libffmpeg.so没法编译成功,于是深入研究了一下,里面有个build_android_r8.sh正是编译所需的shell脚本,问题在于这个脚本是作者在苹果操作系统下用ndk交叉编译工具编译的,而我在ubuntu下,所以要改里面的东西,其实就是相应的改一下ndk下的想对应的路径,另外还要注意,libffmpeg.so是用ld链接所需的几个ffmpeg静态库得到的,ld所用的选项在苹果下和ubuntu下不同,用arm-linux-androideabi-ld --help可以看到支持的选项,所以有两个地方要改一下。

    把-z,noexecstack改成-z noexecstack,另外要去掉--warn-once选项,这个在ubuntu下没有。

    我的最后改成这样的:

    NDK=/home/daniel/android-ndk-r9d
    PLATFORM=$NDK/platforms/android-8/arch-arm
    PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64

    $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 libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libswresample/libswresample.a $BZLIB_LDPATH/libbz2.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/libgcc.a

    http://blog.csdn.net/qiuchangyong/article/details/23833223

  • 相关阅读:
    WMS、WCS、PLC、AGV
    SAP消息号修改汇总
    SQL 计算累计和 sum() over( partition by order by )
    DDLS报错数据类型冲突:data type conflict in a selection 解决办法
    SAP销售订单需求类型的确定优先级
    SAP替代,出口U904在RGGBS000中未生成
    订单BOM与销售BOM的区别
    在配置和销售凭证 GET_CONFIG_MODE 间通信时内部出错
    ABAP Write
    php的api接口
  • 原文地址:https://www.cnblogs.com/canphp/p/4447751.html
Copyright © 2011-2022 走看看