文档章节

[直播一揽子]x264 for Android 的编译

拉风的道长
 拉风的道长
发布于 2016/07/10 12:05
字数 691
阅读 582
收藏 1

终于进入正题了。前提条件是你需要有ndk。我这边下载的是r11b的版本。其他的版本也不会出问题。但是为什么不用最新的呢?

在Linux/Mac下,开始x264的编译工作。

首先从官网上下载最新的x264源码:http://www.videolan.org/developers/x264.html。这里贴一下git的地址:

# git clone http://git.videolan.org/git/x264.git

下载完成之后,就可以开始编译了。这里我就先没有去了解怎么使用,因为目前还不需要使用它,编译出来才是第一步。

关于如何用NDK编译x264,网上有很多这样的代码。我是怎么做的呢:在github上搜索X264,然后进去看看有没有编译的相关脚本。一般运气不会太差,前几页就会有。

这里我贴一下我的脚本。虽然对cpu的支持还不是很全,但是能编译运行了。至于对CPU的支持,以后等整体跑通了,再去做支持。(以后去做,也许就不会去做了。。TODO一下吧!)

在x264的源码根目录下建一个build_android.sh文件,然后写入以下编译代码

#!/bin/bash
#这里需要配置一下你的NDK的根目录。
ANDROID_NDK=$NDK_HOME

if [ -z "$ANDROID_NDK" ]; then
	echo "You must define ANDROID_NDK before starting."
	echo "They must point to your NDK directories.\n"
	exit 1
fi

# Detect OS
OS=`uname`
HOST_ARCH=`uname -m`
export CCACHE=; type ccache >/dev/null 2>&1 && export CCACHE=ccache
if [ $OS == 'Linux' ]; then
	export HOST_SYSTEM=linux-$HOST_ARCH
elif [ $OS == 'Darwin' ]; then
	export HOST_SYSTEM=darwin-$HOST_ARCH
fi

SOURCE=`pwd`
#这里配置最终生成。a的目录
PREFIX=$SOURCE/build/android/arm/
#目标编译版本
SYSROOT=$ANDROID_NDK/platforms/android-14/arch-arm
#arm-linux-androideabi-4.9 这个数字可能需要变化。不同的NDK版本版本号不一致。
#目标编译版本和toolchains下的目录有对应关系。arch-arm对应arm-linux或aarch64。arch-mips对应mipsel-linux或米皮sel-linux。x86同样。
CROSS_PREFIX=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_SYSTEM/bin/arm-linux-androideabi-
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__"
EXTRA_LDFLAGS="-nostdlib"

./configure  --prefix=$PREFIX \
	--cross-prefix=$CROSS_PREFIX \
	--extra-cflags="$EXTRA_CFLAGS" \
	--extra-ldflags="$EXTRA_LDFLAGS" \
	--enable-pic \
	--enable-static \
	--enable-strip \
	--disable-cli \
	--host=arm-linux \
	--disable-asm  \
	--sysroot=$SYSROOT

make clean
make STRIP= -j4 install || exit 1

然后赋予build_android.sh执行权限。根目录下运行:

# ./build_android.sh

应该不会出错(如果有错,欢迎在文章下面评论,我会尽量帮助完善)。

编译完成之后,在源码的目录中,多了一个build目录。这个目录里面就是我们想要的头文件和静态库。两个头文件,和一个.a的静态库

include
  |______x264_config.h
  |______x264.h
lib
  |______libx264.a

有了这几个文件,就可以开始安卓的采集工作了。

顺带提一句:x264里面有个example.c,这个文件里面是使用的示例代码。这也是我后面编译X264的主要参考文件。

© 著作权归作者所有

共有 人打赏支持
拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
利用ndk交叉编译x264到arm平台(带neon版本)

利用ndk交叉编译x264到arm平台(带neon版本) 博文源地址: http://blog.sina.com.cn/s/blog_4868f9860101923t.html 欢迎大家去我的博客坐坐 概述: x264的编译和之前我们看到的osip、ortp类...

小石头子子
2013/05/09
4.6K
1
ffmpeg(软)编码推流 - Android

-- ffmpeg推流:用到了ffmpeg库,以及编码视频的x264,编码音频的fdk-aac,推流使用的rtmp等 acc:RTMP的音频格式;flv: RTMP的视频格式; -- 视频流中的几个参数: public static final in...

desaco
2018/10/14
0
0
Yasea v1.2 发布,安卓直播推流客户端

Yasea v1.2发布了!完全开源的安卓直播推流客户端。通过手机摄像头和麦克风采样,编码为H.264和AAC,再封装FLV格式,推送至RTMP服务器。延迟达到毫秒级别。 新版本既可以硬编码还增加了软编码...

我的上铺叫路遥
2016/07/18
3.7K
12
androidQQ视频使用硬编码还是软编码

最近要做android端的视频编解码库,用x264编译成编码库后用了下,效率非常低下(用的小米2测的,通过Camera的的回调一帧后编译,编码一帧大概200ms左右,偶然也会低于100ms或高于300ms),且改...

zhutj
2013/04/18
2.6K
1
[直播一揽子]编码构思和套路

在上篇文章中,我确定了使用的三个库: 也许是我的编码习惯:先各个击破,再合并整合。我决定也采用这样的方式。这样做的好处很明显: 1.考虑范围缩小。比如,在做x264的编码时,无需考虑aac...

拉风的道长
2016/07/10
34
0

没有更多内容

加载失败,请刷新页面

加载更多

Java单例模式学习记录

在项目开发中经常能遇见的设计模式就是单例模式了,而实现的方式最常见的有两种:饿汉和饱汉(懒汉)。由于日常接触较多而研究的不够深入,导致面试的时候被询问到后有点没底,这里记录一下学习...

JerryLin123
昨天
1
0
VSCODE 无法调试

VSCODE 无法调试 可以运行 可能的原因: GCC 的参数忘了加 -g

shzwork
昨天
3
0
理解去中心化 稳定币 DAI

随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器。 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机制,真的有一点复杂。耐心看完...

Tiny熊
昨天
4
0
5.线程实现

用于线程实现的Python模块 Python线程有时称为轻量级进程,因为线程比进程占用的内存少得多。 线程允许一次执行多个任务。 在Python中,以下两个模块在一个程序中实现线程 - _thread 模块 th...

Eappo_Geng
昨天
3
0
ServiceLoader

创建一个接口文件在resources资源目录下创建META-INF/services文件夹在services文件夹中创建文件,以接口全名命名创建接口实现类 内容me.zzp.ar.d.PostgreSQLDialectme.zzp.ar.d.Hype...

Cobbage
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部