編譯ijkplayer srt項目,一堆坑

文章內(nèi)容包括

  1. ubuntu下,安裝一些軟件
  2. ijkplayer + openssl + srt NDK交叉編譯
  3. Virtualbox虛擬機的共享文件夾配置
  4. 編譯好的so庫舌厨,可以播放str 包括str帶stremaid的直播地址

一、編譯前準備

  • 編譯所需的環(huán)境:Ubuntu 20.04.4 + NDK(r14b和r20b) + cmake(3.18.1)+ git
  1. 安裝git python ninja ssl所需
安裝:sudo apt install git python ninja-build
安裝ssl所需:sudo apt-get install tclsh pkg-config libssl-dev build-essential
  1. 找個目錄忿薇,在目錄下更新或者安裝gas-preprocessor
git clone https://hub.nuaa.cf/libav/gas-preprocessor
cd gas-preprocessor
sudo cp gas-preprocessor.pl /usr/local/bin
sudo chmod 777 /usr/local/bin/gas-preprocessor.pl
  1. 找個目錄裙椭,在目錄下安裝Cmake 3.18.1
1. 卸載系統(tǒng)的cmake:sudo apt autoremove cmake
2. 下載cmake 3.18.1:wget https://hub.nuaa.cf/Kitware/CMake/releases/download/v3.18.1/cmake-3.18.1-Linux-x86_64.tar.gz
3. 解壓:tar zxvf cmake-3.18.1-Linux-x86_64.tar.gz
4. 配置(自己的cmake目錄):sudo ln -sf /home/lven/tool/cmake-3.18.1-Linux-x86_64/bin/*  /usr/bin/
查看:cmake --version
  1. 下載NDK 14 和 20兩個版本,并解壓就好
1. 下載NDK(r20b):wget https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip
2. 下載NDK(r14b):wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip

二署浩、下載ijkplayer支持 srt 編譯項目(最終是要編譯出 libijkffmpeg.so)

  1. 克隆ijkplayer srt項目:git clone https://hub.nuaa.cf/befovy/ijkplayer.git ijkplayer-srt
  • 進入ijkplayer-srt 目錄
  1. 找到下面文件:
init-android.sh
# init目錄下
./init/init-android-openssl.sh 
./init/init-android-libsrt.sh
./init/init-libyuv.sh
./init/init-android-soundtouch.sh

由于github.com經(jīng)常訪問不到骇陈,將上面文件里面,所有的https://github.com 替換成 https://hub.nuaa.cf
github訪問正常的就不用替換鏡像地址了

  1. 修改init-android.sh
## 修改ffmpeg下載連接
IJK_FFMPEG_UPSTREAM=https://hub.nuaa.cf/Bilibili/FFmpeg.git
IJK_FFMPEG_FORK=https://hub.nuaa.cf/Bilibili/FFmpeg.git
IJK_FFMPEG_COMMIT=ff4.0--ijk0.8.8--20210426--001

#./init/init-android-boringssl.sh
./init/init-android-openssl.sh 
./init/init-android-libsrt.sh

## 留下armv7a瑰抵,根據(jù)項目所需你雌,其它的注釋或者刪掉
pull_fork "armv7a"
  1. 修改init目錄下:init-android-openssl.sh
IJK_OPENSSL_UPSTREAM=https://hub.nuaa.cf/openssl/openssl.git
IJK_OPENSSL_FORK=https://hub.nuaa.cf/openssl/openssl.git
IJK_OPENSSL_COMMIT=OpenSSL_1_1_1o  #tag: OpenSSL_1_0_2r

## 留下armv7a,根據(jù)項目所需,其它的注釋或者刪掉
pull_fork "armv7a"

三婿崭、開始編譯ijkplayer srt項目

1. 執(zhí)行:sudo ./init-android.sh 拨拓,下載需要編譯的庫,下載都保存在extra目錄下氓栈,及復制了一份到android/contrib/目錄下
2. 到 android/contrib/目錄下: cd android/contrib/ 
1. 編譯 openssl

openssl 編譯參考文檔:https://hub.nuaa.cf/openssl/openssl/blob/master/NOTES-ANDROID.md

  • 更新環(huán)境(做一次就行)
sudo apt-get update
sudo apt-get upgrade
  • 打開compile-openssl.sh渣磷,添加NDK版本,保留所需的Cpu架構授瘦,去掉不要的醋界。
## 最前面添加,注意自己的NDK路徑
export ANDROID_NDK=/home/lven/tool/android-ndk-r20b
## 保留所需的CPU架構
FF_ACT_ARCHS_32="armv7a"
FF_ACT_ARCHS_64="armv7a"
  • 在tools目錄下修改:do-detect-env.sh
 11*|12*|13*|14*|15*|16*|20*)
  • 在tools目錄下修改:do-compile-openssl.sh
FF_ANDROID_PLATFORM=android-16
## armv7a下載修改提完,如要編譯其它的看openssl官網(wǎng)介紹對應修改
FF_PLATFORM_CFG_FLAGS="android-arm"
## 注釋這兩句形纺,沒用
#FF_CFG_FLAGS="$FF_CFG_FLAGS --openssldir=$FF_PREFIX"
#FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-compile-prefix=${FF_CROSS_PREFIX}-"

## 找到原有的PATH刪掉,修改成
TARGET1=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
TARGET2=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
export PATH=$TARGET1:$TARGET2:$PATH

## 將原有的make  ./Configure 刪掉徒欣,替換編譯
DESTDIR=/tmp/openssl_android_build/$FF_PLATFORM_CFG_FLAGS 
rm -rf DESTDIR
./Configure $FF_CFG_FLAGS -D__ANDROID_API__=16  && \
    make  && \
    make install  DESTDIR=$DESTDIR || exit 128
## 添加文件拷貝命令
cp -R $DESTDIR/usr/local/* $FF_PREFIX/
  • 執(zhí)行 sudo ./compile-openssl.sh
2.編譯libsrt
  • 修改compile-libsrt.sh
## 最前面添加
export ANDROID_NDK=/home/lven/tool/android-ndk-r20b
ANDROID_HOME=/usr/bin

FF_ACT_ARCHS_32="armv7a"
FF_ACT_ARCHS_64="armv7a"
## NDK20 最小支持16逐样,記得修改相應位置
API_LEVEL=16
## 修改 
${ANDROID_HOME}/cmake \ 
 -DCMAKE_MAKE_PROGRAM=${ANDROID_HOME}/ninja \
  • 執(zhí)行 sudo ./compile-libsrt.sh
3.編譯ffmpeg
  • 替換libsrt.c文件
1. 去ffmpeg官網(wǎng)下載 4.x.x最新版本:http://ffmpeg.org/releases 
2. 在最新下載的ffmpeg libavformat目錄下找到libsrt.c文件,復制到 ffmpeg-armv7a libavformat目錄下替換
  • 打開 compile-ffmpeg.sh 修改
export ANDROID_NDK=/home/lven/tool/android-ndk-r20b
FF_ACT_ARCHS_32="armv7a"
FF_ACT_ARCHS_64="armv7a"
  • 打開 do-compile-ffmpeg.sh 修改
FF_ANDROID_PLATFORM=16
  • 執(zhí)行 sudo ./compile-ffmpeg.sh
4.編譯官方ijkplayer(最終是要編譯出:libijkffmpeg.so libijkplayer.so libijksdl.so)
IJK_FFMPEG_UPSTREAM=https://hub.nuaa.cf/Bilibili/FFmpeg.git
IJK_FFMPEG_FORK=https://hub.nuaa.cf/Bilibili/FFmpeg.git
## 只保留v7a
pull_fork "armv7a"
  • 修改 ./init-android-libyuv.sh ./init-android-soundtouch.sh(目的是下載快些)
### ./init-android-soundtouch.sh
K_SOUNDTOUCH_UPSTREAM=https://hub.nuaa.cf/Bilibili/soundtouch.git
IJK_SOUNDTOUCH_FORK=https://hub.nuaa.cf/Bilibili/soundtouch.git
### ./init-android-libyuv.sh
IJK_LIBYUV_UPSTREAM=https://hub.nuaa.cf/Bilibili/libyuv.git
IJK_LIBYUV_FORK=https://hub.nuaa.cf/Bilibili/libyuv.git
  • 執(zhí)行 sudo ./init-android.sh

  • 到官網(wǎng)ijkpayer項目/ijkplayer/android/contrib目錄下脂新,創(chuàng)建目錄 build/ffmpeg-armv7a/output,并修改權限

sudo mkdir -p build/ffmpeg-armv7a/output
sudo chmod 777 build/ -R
  • 將原先的ijkplayer-srt項目:/ijkplayer-srt/android/contrib/build/output-armv7a/目錄下的所有文件粗梭,復制到 ijkpayer官網(wǎng)項目/ijkplayer/android/contrib/build/ffmpeg-armv7a/output/目錄下争便。復制需要權限。
## 修改output-armv7a權限
sudo chmod 777 output-armv7a/ -R
  • 打開ijkplayer項目的目錄:ijkplayer/android/ijkplayer/ijkplayer-armv7a断医,修改build.gradle
minSdkVersion 16
  • 打開ijkplayer項目的目錄:ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main滞乙,修改AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tv.danmaku.ijk.media.player_armv7a" >

    <uses-sdk
        android:minSdkVersion="16" />

</manifest>
  • 打開目錄:ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni,修改Application.mk
APP_PLATFORM := android-16
  • 回到目錄:ijkplayer/android孩锡,修改compile-ijk.sh
export ANDROID_NDK=/home/lven/tool/android-ndk-r14b
ACT_ABI_32="armv7a"
ACT_ABI_64=
  • 執(zhí)行 sudo ./compile-ijk.sh

  • so生成目錄:ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/libs 下的文件就是android所需

  • 編譯出來的庫少了 libc++_shared.so酷宵,去下面目錄找加進去就行,如果是NDK項目躬窜,在build.gralde配置也行
    libc++_shared.so所在目錄:C:\Users\LvenLiu\AppData\Local\Android\Sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\lib\arm-linux-androideabi

三浇垦、其它

  • 開啟srt服務器
srt-live-transmit srt://:4200 srt://:4201 -v
  • ubuntu 20版本,VirtualBox文件共享設置:更新增強
sudo apt-get install virtualbox-guest-x11
sudo usermod -aG vboxsf $(whoami)
## sudo VBoxClient --clipboard
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荣挨,一起剝皮案震驚了整個濱河市男韧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌默垄,老刑警劉巖此虑,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異口锭,居然都是意外死亡朦前,警方通過查閱死者的電腦和手機介杆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韭寸,“玉大人春哨,你說我怎么就攤上這事《魉牛” “怎么了赴背?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晶渠。 經(jīng)常有香客問我凰荚,道長,這世上最難降的妖魔是什么褒脯? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任便瑟,我火速辦了婚禮,結(jié)果婚禮上憨颠,老公的妹妹穿的比我還像新娘胳徽。我一直安慰自己积锅,他們只是感情好爽彤,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著缚陷,像睡著了一般适篙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箫爷,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天嚷节,我揣著相機與錄音,去河邊找鬼虎锚。 笑死硫痰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窜护。 我是一名探鬼主播效斑,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柱徙!你這毒婦竟也來了缓屠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤护侮,失蹤者是張志新(化名)和其女友劉穎敌完,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羊初,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡滨溉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晦攒。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡禽炬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勤家,到底是詐尸還是另有隱情腹尖,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布伐脖,位于F島的核電站热幔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讼庇。R本人自食惡果不足惜绎巨,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蠕啄。 院中可真熱鬧场勤,春花似錦、人聲如沸歼跟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哈街。三九已至留瞳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骚秦,已是汗流浹背她倘。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留作箍,地道東北人硬梁。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像胞得,于是被迫代替她去往敵國和親荧止。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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