音视频聊天开发: 7 Android下ffmpeg+x264编译

Android下视频的采集和播放直接调用sdk就行了,只是编解码麻烦一些,这里采用NDK编译ffmpeg然后通过JNI接口调用。

 Android开发是麻烦了一点,不过手机倒是卖的很多,好在底层还要用的是Linux,  可以使用c/c++开源项目,比如 ffmpeg, vlc等拿上来用。否则直接就是WP7下场。
再说android编译ffmpeg,随便一搜有很多文章,不过转载者不知道自己测过没有, 没有哪个是一次编译通过的。这次比较了多个文章,选了一个最简单的:

http://stackoverflow.com/questions/25079145/how-to-resolve-error-libx264-not-found

另外,也还有一个人整合的工程也非常方便:https://github.com/halfninja/android-ffmpeg-x264
只是编译过程中问题比较多,如果运气好可能一次就OK了,可以采用这个。如果编译不过,他的configure配置的很不错,可以参考用在前面的例子上。



具体编译过程:
1 准备环境,windows下安装cygwin,  本文的环境是虚拟机CentOS 6.5 64位。
2 下载NDK, 文中是android-ndk-r9-linux-x86_64.tar.bz2。
3 为了方便,直接解压到了/root/android-ndk-r9下。安全的做法是以其他用户身份登录,放在/home/用户 目录下面。
4 下载ffmpeg和x264,也可以tar包也可以git。
5 编译x264, 脚本如下:
#!/bin/bash
 NDK=/root/android-ndk-r9
 SYSROOT=$NDK/platforms/android-9/arch-arm/
 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
 function build_one
 {
 ./configure \
 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
 --sysroot="$SYSROOT" \
 --host=arm-linux \
 --enable-pic \
 --enable-shared \
 --disable-cli
 make clean
 make
 make install
 }
 build_one


6  编译ffmpeg,脚本如下:
#!/bin/bash
NDK=/root/android-ndk-r9
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-nonfree \
--enable-gpl \
--enable-libx264 \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
#make clean
#make
#make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-I/usr/local/include"
ADDI_LDFLAGS="-L/usr/local/lib"
build_one

内容和 stackoverflow上的例子几乎一样,只是最后两行加上了libx264的路径。
为了看具体过程,把make,make install注释掉了。
这两个脚本放在各自目录下,运行就可以了。比如保存成build.sh,chmod一下再执行。

这样,就生成了ffmpeg sdk的各个.so或.a (根据自己的实际情况,修改configure 里的--enable static等参数)。

虽然是linux下编译生成的,但直接用在windows下的ndk编译环境也可以。


本文只讲了如果编译ffmpeg,顺利的话,一个小时就能完成。下一步开始在android上做视频采集,编码,解码,回放的测试了,和在PC上的流程一致。

编译过程中, 如果有问题,大致是这两个:

1 gnu/stubs-32.h: No such file or directory
在CentOS下执行:yum -y install glibc-devel.i686 glibc-devel

2 static declaration of 'lrint' follows non-static declaration
可参考: http://blog.csdn.net/tttyd/article/details/8825181

附件是两个文章,cu上不能发.sh的文件,把.txt改一下名就行了,其实不改也可以,只是看着别扭。

补充:
这里还有个完整的教程,和本文说的方法一样,只不过修正了一下生成so的版本号的方式:
This cause ffmpeg shared libraries to be compiled to libavcodec.so. (e.g. libavcodec.so.55), which is not compatible with Android build system. Therefore we’ll need to replace the above lines with the following lines.

http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

ffmpeg_build.txt
x264_build.txt


补充一下,最近又发现一个不错的资源:https://github.com/dennishucd/FFmpeg4Android
不仅编译出ffmpeg的各个so,还提供了一个工程,可以编译成JNI demo使用。
另外,有人编译好了libffmpeg.so,很多地方可以下载,比如http://download.csdn.net/detail/qandroidj/4137324
如果不想编译的话,可以直接下载来学习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。 我将带领大家一起来学习WebRTC原理和编程知识,并动手搭建环境完成网页视频会话和文字聊天。具体内容包括: 一、Html与JavaScript小白入门二、WebRTC小白入门与流程原理分析三、网络打洞STUN和TURN四、信令服务器的原理与实战五、手撕WebRTC流程与代码六、亲自敲码踩坑搭建视频会话   音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频和流媒体的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。    

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值