首先需要下载linux平台下的NDK,这里使用最新版的
下载好配置NDK环境
然后下载x264的源码
编译脚本

#!/bin/bash

set -x 
 
export NDK=$NDK_ROOT
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=21

function build
{
   
  ./configure \
    --prefix=$PREFIX \
    --disable-cli \
    --enable-static \
    --enable-pic \
    --host=$HOST \
    --cross-prefix=$CROSS_PREFIX \
    --sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
 
	make clean
	make -j8
	make install
}
#armeabi-v8a
#PREFIX=./android/arm64-v8a
#HOST=aarch64-linux-android
#export TARGET=aarch64-linux-android
#export CC=$TOOLCHAIN/bin/$TARGET$API-clang
#export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
#export CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-

#armeabi-v7a
PREFIX=./armeabi-v7a
HOST=armv7a-linux-android
export TARGET=armv7a-linux-androideabi
#如果没有export下面的CC和CXX编译会出现找不到编译器的错误,这里一定要加上
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-

build

编译完成后在当前目录的android/arm64-v8a/目录下会有include和lib文件夹,在ffmpeg编译的configure配置中把这两个文件夹路径加上,具体ffmpeg编译脚本如下


basepath=$(pwd)

CPU=aarch64
CC=aarch64-linux-android21-clang
PREFIX=aarch64-linux-android-
echo $basepath

cd $basepath/FFmpeg
ls
./configure \
--prefix=${basepath}/ffmpeg_install \
--enable-static \
--disable-shared \
--enable-cross-compile \
--target-os=android \
--arch=$CPU \
--cc=$basepath/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/bin/$CC \
--cross-prefix=$basepath/android-ndk-r21b/toolchains/llvm/prebuilt/linux-x86_64/bin/$PREFIX \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-avdevice \
--enable-libx264 \
--enable-gpl \
--extra-ldflags="-L /root/wocnz/x264-snapshot-20191217-2245-stable/android/arm64-v8a/lib" \
--extra-cflags="-I /root/wocnz/x264-snapshot-20191217-2245-stable/android/arm64-v8a/include"
make clean
make
make install 
cd ../

最后编译出来的lib和include文件夹就可以加到自己的安卓项目上进行编译啦!x264和ffmpeg的编译问题真的是花了好长时间才得以解决,网上找的博客在编译x264的时候基本都没有写到export CC 和export CXX,在编译的时候一直报 no working compiler found。 x264不像ffmpeg可以在使用 configure 配置的时候去指定CC和CXX编译器,所以需要将CC和CXX变量export出去,给其他脚本去使用该变量。

项目结构

在CmakeLists中添加x264库编译即可
CmakeLists


cmake_minimum_required(VERSION 3.10.2)



project("rtmp")

add_library(
        native-lib
        SHARED
        ffmpeg_handle.cpp )
include_directories(../cpp/include)
set(my_lib_path ${CMAKE_SOURCE_DIR})
message(WARNING ${my_lib_path})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI}")
message(WARNING ${CMAKE_CXX_FLAGS})
find_library(
        log-lib

        log )

target_link_libraries(

        native-lib
        avfilter avdevice avformat avcodec avutil swresample swscale x264





        ${log-lib}
        android

        # zlib库
        z
        # OpenSLES
)