Android FFmpeg so庫(kù)編譯 支持Https

概要

編譯armv7架構(gòu)的openssl蝌矛、ffmpeg的a碎罚、so庫(kù)欣硼,目前openssl只編譯了靜態(tài)庫(kù)混卵,編譯動(dòng)態(tài)庫(kù)映穗,ffmpeg鏈接openssl編譯的時(shí)候會(huì)出現(xiàn)鏈接的是帶版本號(hào)的openssl動(dòng)態(tài)庫(kù)(如:libcrypto.so.1.1),這樣在Android ndk開(kāi)發(fā)下不能找到.so.1.1的庫(kù)淮菠,而so.1.1格式對(duì)于Android開(kāi)發(fā)不合法男公,所以只編譯opessl靜態(tài)庫(kù)(不會(huì)生成.so.1.1的文件)進(jìn)行解決了,如果有大神有解決方案,可以分享哈枢赔。

環(huán)境要求

  • mac
  • ndk的環(huán)境配置

注意:腳本權(quán)限chmod -R 文件/文件夾

opessl編譯

  1. 下載openssl_1_1_1d源碼(可cd到opencssl源碼目錄下執(zhí)行./config)
  2. 編寫(xiě)腳本build_openssl_android.sh
#!/bin/bash

sslPath=/Users/chx/Documents/envirment/openssl/openssl-OpenSSL_1_1_1d
NDKPath=/Users/chx/Documents/envirment/android-ndk-r16b

# armeabi 
# cd $sslPath
# make clean
# export ARCH=armeabi
# rm -rf ./output-$ARCH
# mkdir ./output-$ARCH
 
# export ANDROID_NDK=$NDKPath
# export PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH
# ./Configure android-arm shared no-ssl2 no-comp no-asm no-idea no-hw no-engine no-dso --prefix=$sslPath/output-$ARCH
 
# make && make install

# #armeabi-v7a  
cd $sslPath
make clean
export ARCH=armeabi-v7a
rm -rf ./output-$ARCH
mkdir ./output-$ARCH
export ANDROID_NDK=$NDKPath
export PATH=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH
./Configure android-arm no-shared no-ssl2 no-comp no-asm no-idea no-hw no-engine no-dso --prefix=$sslPath/output-$ARCH
make && make install

# # #arm64-v8a
# cd $sslPath
# make clean
# export ARCH=arm64-v8a
# rm -rf ./output-$ARCH
# mkdir ./output-$ARCH
 
# export ANDROID_NDK=$NDKPath
# export PATH=$ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin:$PATH
# ./Configure android-arm64 -D__ANDROID_API__=23 --prefix=$sslPath/output-$ARCH
 
# make && make install

  1. build_openssl_android.sh的位置與下載的opessl源碼的路徑在同一級(jí)


    1575446187093.jpg
  2. 在mac的命令工具界面cd到build_openssl_android.sh所在路徑澄阳,然后直接運(yùn)行./build_openssl_android.sh,成功的話(huà)會(huì)生成一下文件:


    1575446377916.jpg

FFmpeg編譯

  1. 下載ffmpeg 4.2.1源碼,在沒(méi)有ffbuid模塊的時(shí)候需要運(yùn)行./configure命令手動(dòng)配置,目前看來(lái)3.xx版本的對(duì)應(yīng)ndk 17、16踏拜、14左右的碎赢,我的是4.2.1版本的對(duì)應(yīng)的是ndk20de 版本,所以其他版本的一下腳本無(wú)法保證速梗。
  2. ffmpeg的configure文件的相關(guān)修改
  • 編譯出來(lái)過(guò)后的.so文件后面會(huì)有一串?dāng)?shù)字肮塞,無(wú)法使用,所以得修改他的命名規(guī)則姻锁,修改的時(shí)候一定要小心空格之類(lèi)的
    將該文件中的如:
    改前:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

改后:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
  • opessl not found 的解決辦法
    改前:
enabled openssl           && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
                               check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                               die "ERROR: openssl not found"; }

改后:

enabled openssl           && { check_pkg_config openssl openssl openssl/ssl.h OPENSSL_init_ssl ||
                               check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
                               check_pkg_config openssl openssl openssl/ssl.h SSL_library_init ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                               check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                               die "ERROR: openssl not found"; }
  1. 編寫(xiě)build_android_ndk20.sh腳本放入ffmpeg源碼文件夾下
#!/bin/bash
export NDK_HOME=/usr/work/ndk/android-ndk-r14b
export PLATFORM_VERSION=android-9
function build
{
    echo "start build ffmpeg for $ARCH"
    ./configure --target-os=linux \
    --prefix=$PREFIX --arch=$ARCH \
    --disable-doc \
    --enable-shared \
    --disable-static \
    --disable-yasm \
    --disable-asm \
    --disable-symver \
    --enable-gpl \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --cross-prefix=$CROSS_COMPILE \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --enable-small \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make
    make install
    echo "build ffmpeg for $ARCH finished"
}

#arm
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
ADDI_CFLAGS="-marm"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

#x86
ARCH=x86
CPU=x86
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/x86-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
ADDI_CFLAGS="-march=i686 -mtune=intel -msse3 -mfpmath=sse -m32"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build


  1. 執(zhí)行./build_android_ndk20.sh 枕赵,如果成功,生成如下文件


    1575448213783.jpg

Android項(xiàng)目使用

1575448275578.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末位隶,一起剝皮案震驚了整個(gè)濱河市拷窜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涧黄,老刑警劉巖篮昧,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笋妥,居然都是意外死亡懊昨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)春宣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酵颁,“玉大人,你說(shuō)我怎么就攤上這事信认〔囊澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵嫁赏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我油挥,道長(zhǎng)潦蝇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任深寥,我火速辦了婚禮攘乒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惋鹅。我一直安慰自己则酝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布闰集。 她就那樣靜靜地躺著沽讹,像睡著了一般般卑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爽雄,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天蝠检,我揣著相機(jī)與錄音,去河邊找鬼挚瘟。 笑死叹谁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乘盖。 我是一名探鬼主播焰檩,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼订框!你這毒婦竟也來(lái)了析苫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤布蔗,失蹤者是張志新(化名)和其女友劉穎藤违,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纵揍,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顿乒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泽谨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璧榄。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吧雹,靈堂內(nèi)的尸體忽然破棺而出骨杂,到底是詐尸還是另有隱情,我是刑警寧澤雄卷,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布搓蚪,位于F島的核電站,受9級(jí)特大地震影響丁鹉,放射性物質(zhì)發(fā)生泄漏妒潭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一揣钦、第九天 我趴在偏房一處隱蔽的房頂上張望雳灾。 院中可真熱鬧,春花似錦冯凹、人聲如沸谎亩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匈庭。三九已至夫凸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚎花,已是汗流浹背寸痢。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紊选,地道東北人啼止。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兵罢,于是被迫代替她去往敵國(guó)和親献烦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容