码迷,mamicode.com
首页 > 其他好文 > 详细

anroid ndk编译ffmpeg 引用librtmp libx264

时间:2016-07-21 00:35:56      阅读:826      评论:0      收藏:0      [点我收藏+]

标签:

     Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264。条条大路通罗马,

也许还有别的更好的方法去完成它,我没有仔细研究。我使用的方法完全可以达到我的预期目的。

一.选择编译环境

   可以选择windows下cygwin,也可以选择linux系统,我建议选择后者。花了很多时间在cygwin下编译,configure时总是提示链接需要的so文件找不到。无奈

之下转到linux环境下编译。我用的版本是ubuntu16.04。编译android版本的ffmpeg注意注意的地方有三个:一是configure时带入的参数,二是放置将要用

到的第三方库(so),最后一个是修改configure文件。下面听我一一道来。

一. 创建一个shell脚本文件build_ffmpeg.sh用来引入configure参数,这个文件的格式是unix,如果文件是dos格式,可以用uedit转换格式。

     创建的shell脚本内容如下:

  

#!/bin/sh
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
NDK=/home/wgg/wgg/android-ndk-r11c
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
./configure     --prefix=$PREFIX     --target-os=linux     --enable-cross-compile     --enable-runtime-cpudetect     --disable-asm     --arch=arm     --enable-nonfree     --enable-shared     --enable-version3     --enable-gpl     --disable-programs     --disable-ffmpeg     --disable-ffplay     --disable-ffprobe     --disable-ffserver     --disable-doc     --enable-avresample     --disable-everything     --enable-decoder=pcm_alaw     --enable-decoder=pcm_mulaw     --enable-decoder=mpeg4     --enable-decoder=h264     --enable-encoder=aac     --enable-librtmp     --enable-libx264     --enable-parser=aac     --enable-parser=h264     --enable-parser=mpeg4video     --enable-parser=mpegvideo     --enable-parser=mpegaudio     --enable-encoder=libx264     --enable-muxer=mpegts     --enable-muxer=flv     --enable-muxer=h264     --enable-muxer=flv     --enable-muxer=mp4     --enable-muxer=data     --enable-muxer=avi     --enable-muxer=mpeg2video     --enable-muxer=pcm_alaw     --enable-muxer=pcm_mulaw     --enable-demuxer=flv     --enable-demuxer=mpegts     --enable-demuxer=rtsp     --enable-protocol=httpproxy     --enable-protocol=crypto     --enable-protocol=ftp    --enable-protocol=unix    --enable-protocol=pipe     --enable-protocol=data     --enable-protocol=file     --enable-protocol=tcp     --enable-protocol=http     --enable-protocol=udp     --enable-protocol=udplite     --enable-protocol=rtp     --enable-protocol=librtmp     --enable-protocol=librtmpe     --enable-protocol=librtmps     --enable-protocol=librtmpt     --enable-protocol=librtmpte     --enable-protocol=async     --enable-protocol=md5     --enable-protocol=cache     --enable-protocol=mmst     --enable-protocol=mmsh     --sysroot=$SYSROOT     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-     --enable-hwaccels     --enable-zlib     --disable-devices     --disable-avdevice     --extra-cflags="-Os -fpic $ADDI_CFLAGS"     --extra-cflags="-I/home/wgg/wgg/ffmpeg/extern/include"        --extra-ldflags="-L/home/wgg/wgg/ffmpeg/extern/lib"

 NDK指定NDK包路径,SYSROOT是路径前缀,编译是编译器会去系统路径下(例如/usr/lib,/lib),定义了SYSROOT以后编译原系统路径前加上$SYSROOT,表达式

中android-21要根据实际android重新设定。configure 选项可以根据需要自行删减。--extra-cflags="-I/home/wgg/wgg/ffmpeg/extern/include" 指示外部库的头文件绝对路径,--extra-ldflags="-L/home/wgg/wgg/ffmpeg/extern/lib" 指示外部so库路径。

二. 放置外部库及头文件

     将librtmp.so  libx264 libcrypto.so libssl.so 后两个库是第一个库的依赖库放在/home/wgg/wgg/ffmpeg/extern/lib下面。将x264.h, x264_config.h以及rtmp文件夹放在/home/wgg/wgg/ffmpeg/extern/include目录下,rtmp文件夹中文件如下。

技术分享三.修改配置文件

enabled librtmp  && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket

 修改成

enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp

  将

enabled libx264           && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode ||
                               { require libx264 x264.h x264_encoder_encode -lx264 &&
                                 warn "using libx264 without pkg-config"; } } &&
                             { check_cpp_condition x264.h "X264_BUILD >= 118" ||
                               die "ERROR: libx264 must be installed and version must be >= 0.118."; } &&
                             { check_cpp_condition x264.h "X264_MPEG2" &&
                               enable libx262; }

  

替换为

enabled libx264  && require libx264 x264.h x264_encoder_encode -lx264

  修改build_ffmpeg.sh权限 chmod +x build_ffmpeg.sh

    OK,所有的准备工作都做好了。首先./build_ffmpeg.sh,接着make 最后 make install.

    注意:我这里用的ffmepg版本是3.0.2,librtmp,libx264基本不用改动,直接引用so不用再去编译了。获取外部引用库请加入QQ群

     流媒体/Ffmpeg/音视频 127903734。

 

anroid ndk编译ffmpeg 引用librtmp libx264

标签:

原文地址:http://www.cnblogs.com/wanggang123/p/5690142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!