Android多媒体开发入门教程一:FFMPEG移植到Android

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 09:59   11   0
对于编译环境我们有两种方案可以选择,其一可以选择Linux系统,其二可以选择Windows下cygwin,其实原理一样,因为Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。网上都说在Linux系统下比较好编译通过,所以就听取了意见,装了vmware在里面装了个ubuntu16.04的64位系统,另外需要注意fmpeg不同版本编译方式也有所不同。

一、在ubuntu下配置android ndk环境变量

1.下载android-ndk64-r10b-linux-x86_64.tar.bz2,下载地址:http://dl.google.com/android/ndk/android-ndk64-r10b-linux-x86_64.tar.bz2

2. 把下载好的android-ndk64-r10b版本解压($ sudo tar -C /home/davebobo -xvf android-ndk64-r10b-linux-x86_64.tar.bz2)到/home/davebobo目录下(注:把你的ndk文件放到你的主页Home下,davebobo这个文件夹是我的,我的ubuntu计算机名为davebobo,即/home/davebobo这个目录也就是/主文件夹/公共的可视化桌面gui,这个目录可以随意换)。

3.配置环境变量命令:$sudo gedit ~/.bashrc

添加以下代码:

export NDK=/home/davebobo/android-ndk-r10b

export PATH=${PATH}:$NDK 保存关闭。

5.source ~/.bashrc使其修改的文件生效。

6.ndk-build看看咱们配置环境变量成功没,只要没出command not found就证明环境变量配置成功,如果成功显示如下,


二、下载ffmpeg源码

1.下载ffmpeg-3.0.2.tar.gz,下载地址:https://ffmpeg.org/download.html#releases

2.解压到/home/davebobo目录下。

三、修改FFmpeg的configure

下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。在configure文件中找到下面几行代码:

    SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  
    SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'  
替换为下面内容就可以了:

    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' 
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 
    SLIB_INSTALL_LINKS='$(SLIBNAME)'  

四、创建shell脚本文件引入configure参数

创建shell脚本文件build_ffmpeg.sh,这个文件的格式是unix,如果文件是dos格式,可以用uedit转换格式。脚本内容如下:

#!/bin/bash
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
NDK=/home/davebobo/android-ndk-r10b
SYSROOT=$NDK/platforms/android-L/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-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=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" \
注意该shell脚本中不能有多余的空格,该脚本中前面几个变量“NDK”、“SYSROOT”、“TOOCHAIN”根据NDK路径的不同需要做相应的修改,configure 选项可以根据需要自行删减。注意这个文件应该保存到ffmpeg-3.0.2/configure同一文件夹下。

五、编译生成FFmepg的头文件和类库文件

使用root用户进入build_ffmpeg.sh目录

给build_ffmpeg.sh的执行权限:sudo chmod a+x build_ffmpeg.sh

执行脚本./build_ffmpeg.sh。

出现下图这样就证明执行成功。


make

make install

至此,会在/home/davebobo/ffmpeg-3.0.2目录下生成一个android目录,这样就可以得到FFmpeg的头文件和类库文件了。

参考资料:

http://www.cnblogs.com/wanggang123/p/5690142.html

http://my.oschina.net/u/994934/blog/185684#OSC_h4_1

http://blog.csdn.net/gobitan/article/details/22750719

http://blog.csdn.net/leixiaohua1020/article/details/47008825

http://wang-peng1.iteye.com/blog/2004897


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP