最近在學(xué)RTMP,記錄一下完成的編譯流程
我是mac 電腦,但是mac上編譯一直通過不了,后來才換到服務(wù)器上編譯,
其實mac也能編譯,只是最開始踩到坑里面了…
這里記錄一下linux編譯完整流程
環(huán)境:
- NDK: android-ndk-r17c
- Ffmpeg: ffmpeg4.2.2 (高版本也可以編譯)
- system: mac
1. 編譯rtmp
首先下載 rtmp https://github.com/yixia/librtmp 導(dǎo)入到linux上
V7a編譯
編寫腳本: rtmp_build32.sh
// 網(wǎng)上copy的命令
#!/bin/bash
// NDK路徑
NDK_ROOT=$NDK
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`/android/v7a CRYPTO= SHARED= XDEF=-DNO_SSL
執(zhí)行命令:
sh rtmp_build32
V8a編譯
編寫腳本: rtmp_build64.sh
#!/bin/bash
NDK_ROOT=$NDK
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 clean
make install SYS=android prefix=`pwd`/android/v8a CRYPTO= SHARED= XDEF=-DNO_SSL
只要看到這種,就是編譯成功了
然后就可以看到編譯的結(jié)果:
此時一定要把rtmp導(dǎo)出放到as上看看是否可用, 否則ffmpeg + rtmp 一輩子也編譯不出來, 這個坑我踩了2天…
RTMP 使用
在CPP下創(chuàng)建rtmp文件,并導(dǎo)入頭文件測試
只要這里編譯通過,能夠運行起項目,那么就說明是編譯是ok的
ffmpeg + RTMP 交叉編譯
下載ffmpeg 4.2.2
wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
解壓FFmpeg4.2.2
tar -xvf ffmpeg-4.2.2.tar.bz2
進入 ffmpeg4.2.2目錄,執(zhí)行 生成makefile
./configure --disable-x86asm
修改 configure:
由clong方式改為GCC方式:
注釋掉原本ffmpeg使用的rtmp,采用自己的rtmp
V7a編譯
編寫腳本: ffmpeg_with_rtmp_build32.sh
#!/bin/bash
# NDK路徑
NDK_ROOT=$NDK
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
ANDROID_API=17
# 生成.a文件地址
PREFIX=./android/armeabi-v7a/ffmpeg_rtmp
# 剛才 rtmp 生成的地址
RTMP=/Tools/librtmp-master/android/v7a
./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
執(zhí)行腳本:
sh ffmpeg_with_rtmp_build32.sh
編譯時間 可能需要將近5分鐘
V8a編譯
編譯腳本: ffmpeg_with_rtmp_build64.sh
#!/bin/bash
PREFIX=./android/arm64-v8a/ffmpeg_rtmp
NDK_ROOT=$NDK
CPU=aarch64-linux-android
TOOLCHAINS=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
ANDROID_API=21
RTMP=/Tools/librtmp-master/android/v8a
./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
執(zhí)行腳本:文章來源:http://www.zghlxwxcb.cn/news/detail-613184.html
sh ffmpeg_with_rtmp_build64.sh
最后生成文件在當(dāng)前目錄 : /android/arm64-v8a/ffmpeg_rtmp 下生成對應(yīng)的.a文件文章來源地址http://www.zghlxwxcb.cn/news/detail-613184.html
到了這里,關(guān)于linux NDK交叉編譯rtmp 與 ffmpeg+rtmp交叉編譯(v7a,v8a) 完成流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!