x264 交叉编译
2019-11-17 本文已影响0人
Damon_He
关于直播推流librtmp编译集成,看这里
x264
x264 是一个C语言编写的目前对H.264标准支持最完善的编解码库。与RTMPDump一样,可以在Android中直接使用,也可以集成进入FFMpeg。
交叉编译
在linux下下载编译:wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
解压:tar -xvf x264-master.tar.bz2
查看configure文件,编写编译脚本:
#!/bin/bash
NDK_ROOT=/root/android-ndk-r17c
PREFIX=./android/armeabi-v7a
TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=17 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
# --disable-cli : 关闭命令行
# 其他和ffmpeg一样
./configure \
--prefix=$PREFIX \
--disable-cli \
--enable-static \
--enable-pic \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$NDK_ROOT/platforms/android-17/arch-arm \
--extra-cflags="$CFLAGS"
make clean
make install
编译:
chmod +x build.sh
./build.sh
将编译产物打包传给windows:
cd android/
zip -r x264.zip *
sz x264.zip
AS中集成x264
头文件和库文件导入,CMakelists.txt修改:
cmake_minimum_required(VERSION 3.4.1)
#引入指定目录下的CMakeLists.txt
add_subdirectory(librtmp)
#指定头文件查找路径
include_directories(librtmp)
include_directories(include)
add_library(native-lib SHARED native-lib.cpp)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI}")
target_link_libraries(native-lib rtmp log)
测试:
#include <jni.h>
#include <string>
#include <rtmp.h>
#include <x264.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_pusher_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
char version[100];
sprintf(version, "rtmp version : %d", RTMP_LibVersion());
x264_picture_t *pic = new x264_picture_t;
x264_picture_init(pic);
return env->NewStringUTF(version);
}