librtmp 和 FFmpeg 混合編譯armeabi - v7a 與 arm-v8a

之前介紹姑混合編譯armeabi-v7a,但是我發現我身邊基本見不到這種手機了,基本都是arm64-v8a的手機,也是一直在看這個編譯,也在網上找了一些,這裏記錄一下我找到的可用的ffmpeg4.2.2交叉編譯。

下載FFmpeg4.2.2
wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
解壓FFmpeg4.2.2
tar -xvf ffmpeg-4.2.2.tar.bz2
下載librtmp
git clone https://github.com/yixia/librtmp.git

進入目錄

cd librtmp

新建腳本

 

vim rtmp_build.sh

腳本內容

 

#!/bin/bash
// 這裏是ndk路徑,可以先進入ndk根路徑,輸入 pwd 回車檢查路徑,複製過來
NDK_ROOT=/root/android-ndk-r17c

CPU=arm-linux-androideabi

TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64

export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=17"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-17/arch-arm "
export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-

make install SYS=android prefix=`pwd`/result CRYPTO= SHARED=  XDEF=-DNO_SSL

執行腳本

 

sh rtmp_build.sh

進入FFmpeg

 

cd ffmpeg-4.2.2

打開 cinfigure 顯示行號

 

vim configure

:set number

把librtmp 關閉掉

 

6256 enabled librsvg           && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsv     g_handle_render_cairo
6257 #enabled librtmp           && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
6258 enabled librubberband     && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rub     berband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++" 

ffmpeg4.2.2 版本默認用clang編譯 本篇文章用的linux 系統用的gcc 所以這裏也需要進行改動

 

4211 if test "$target_os" = android; then
4212     #cc_default="clang"
4213         cc_default="gcc"
4214 fi

接下來就是寫混合編譯腳本了

 

新建腳本
vim build.sh  

腳本內容

 

#!/bin/bash

NDK_ROOT=/root/android-ndk-r17c

CPU=arm-linux-androideabi

TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64

ANDROID_API=17

PREFIX=./android/armeabi-v7a/ffmpeg_rtmp

RTMP=/root/MyFFmpeg/librtmp/result

./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-librtmp \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-$ANDROID_API/arch-arm \
--extra-cflags="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS -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 -I$RTMP/include" \
--extra-ldflags="-L$RTMP/lib" \
--extra-libs="-lrtmp" \
--arch=arm \
--target-os=android

make clean

make install

執行腳本

 

sh build.sh

上面是armeabi-v7a 下面附上 arm-v8a 的腳本

librtmp 如果編譯過v7a 建議先把原先的librtmp 先刪除再用這個腳本編譯

 

#!/bin/bash

NDK_ROOT=/root/android-ndk-r17c
CPU=aarch64-linux-android
TOOLCHAIN=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
export XCFLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21"
export XLDFLAGS="--sysroot=${NDK_ROOT}/platforms/android-21/arch-arm64 "
export CROSS_COMPILE=$TOOLCHAIN/bin/aarch64-linux-android-

make install SYS=android prefix=`pwd`/result CRYPTO= SHARED=  XDEF=-DNO_SSL

ffmpeg 腳本

 

#!/bin/bash

PREFIX=./andoird/arm64-v8a/ffmpeg_rtmp
NDK_ROOT=/root/android-ndk-r17c
CPU=aarch64-linux-android
TOOLCHAINS=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
ANDROID_API=21
RTMP=/root/librtmp/result
./configure \
--prefix=$PREFIX \
--enable-small \
--disable-avdevice \
--disable-filters \
--disable-encoders \
--disable-muxers \
--disable-yasm \
--disable-programs \
--enable-librtmp \
--enable-cross-compile \
--cross-prefix=$TOOLCHAINS/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-$ANDROID_API/arch-arm64 \
--extra-cflags="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/$CPU -D__ANDROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS  -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fPIC -I$RTMP/include" \
--extra-ldflags="-L$RTMP/lib" \
--extra-libs="-lrtmp" \
--arch=arm64 \
--target-os=android

make clean
make install

到此交叉編譯就OK了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章