Win10+WSL環(huán)境下編譯FFmpeg(for Android)

之前嘗試過(guò)win10下利用MSYS2和MinGW-W64搭建交叉編譯環(huán)境來(lái)編譯FFmpeg源碼,結(jié)果失敗了。雖然網(wǎng)上有很多文章介紹如何通過(guò)這種方式進(jìn)行編譯,但是由于NDK版本(從r10到r19的都有)以及FFMPEG版本(多數(shù)為3.x,我用的是4.3)的不同,稍有不慎便會(huì)與成功失之交臂。最終還是決定在linux原生環(huán)境進(jìn)行編譯,但是又怕麻煩 不想安裝ubuntu和虛擬機(jī),于是便采取了Win10+wsl的編譯方式。

一、編譯環(huán)境搭建

編譯環(huán)境主要涉及以下幾個(gè)方面:

  • 安裝WSL(Windows Subsystem for Linux)

WSL的安裝可以參考微軟官方文檔win10安裝WSL向?qū)?/a>,linux系統(tǒng)選擇 Ubuntu 20.04 LTS
,安裝過(guò)程文檔介紹的很詳細(xì),這里不再累述。需要注意的是只需要安裝WSL1即可,無(wú)需升級(jí)到WSL2(如果你的win10版本滿(mǎn)足要求可以升級(jí)到WSL2,我沒(méi)有嘗試)

  • 獲取Android NDK(for linux)

Android NDK可以從Android開(kāi)發(fā)者官網(wǎng)下載,需要注意的是為了配合后面將要講到的編譯腳本使用,NDK版本要求至少要r19(r20,r21也可以,我使用的是r21, android-ndk-r21e-linux-x86_64.zip
))

  • 獲取Android SDK(for linux)

下載android-sdk_r24.4.1-linux.tgz,解壓后放到wsl的一個(gè)目錄下如/mnt/d/AndroidSDK

  • 獲取FFmpeg源碼

可以通過(guò)git clone的方式從git下載,也可以從官網(wǎng)直接下載。git clone的腳本如下:

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
  • 獲取編譯腳本

git鏈接如下

https://github.com/Javernaut/ffmpeg-android-maker.git

下載完成之后,在根目錄建立一個(gè)sources文件夾,并將上一步中的ffmpeg源碼拷貝一份放到sources目錄下.
需要注意的是, 目錄中的文件不要在windows底下打開(kāi),否則有可能出現(xiàn)類(lèi)似bash: $’\r’: command not found這樣的錯(cuò)誤,這是由于linux下文件 編碼格式與windows有所不同造成的。

  • wsl中安裝make和gcc

apt-get install make
apt-get insatll gcc

如果安裝gcc過(guò)程中出現(xiàn)無(wú)法下載的情況可以先更新一下源

apt-get update
  • WSL中設(shè)置相關(guān)環(huán)境變量

編譯腳本要求設(shè)置2個(gè)環(huán)境變量用于指定Android SDK 和 Android NDK的存放路徑分別為

  • ANDROID_SDK_HOME
  • ANDROID_NDK_HOME
    以root權(quán)限打開(kāi)/etc/bash.bashrc文件
sudo vim /etc/bash.bashrc

然后向文件中加入如下內(nèi)容:

#android sdk
export ANDROID_SDK_HOME=/mnt/d/ubuntu/android-sdk_r24.4.1-linux/android-sdk-linux
#android NDK
export ANDROID_NDK_HOME=/mnt/d/ubuntu/android-ndk-r21e

''=''后面的內(nèi)容為你的sdk和ndk 的真實(shí)路徑
完成之后通過(guò)source命令讓改動(dòng)生效

source /etc/bash.bashrc

至此,編譯環(huán)境以及完全搭建完成了,下面就可以開(kāi)始編譯了。

二、編譯

進(jìn)入到之前下載的編譯腳本目錄,然后執(zhí)行如下命令開(kāi)始編譯:

sudo ./ffmpeg-android-maker.sh

如果編譯沒(méi)有出錯(cuò)的話(huà),大約十分鐘作用編譯就可完成。
注意:編譯需要root權(quán)限,否則可能會(huì)出現(xiàn)缺少權(quán)限之類(lèi)的錯(cuò)誤。
編譯完成之后會(huì)在output目錄下生成libinclude2個(gè)文件夾,里面分別是對(duì)應(yīng)不同cpu架構(gòu)的so文件和.h文件

編譯后生成的目錄.png

編譯生成的so文件.png

腳本默認(rèn)生成適配4種架構(gòu)的庫(kù)文件

  • armeabi-v7a (with NEON)
  • arm64-v8a
  • x86
  • x86_64

可以通過(guò)參數(shù)來(lái)指定特定的cpu架構(gòu)

./ffmpeg-android-maker.sh -abis=arm,arm64

./ffmpeg-android-maker.sh --target-abis=armeabi-v7a,x86

./ffmpeg-android-maker.sh -abis=armeabi-v7a,arm64-v8a,x86,x86_64

# Builds binaries for all 4 ABIs
./ffmpeg-android-maker.sh 

默認(rèn)的編譯腳本生成的是全功能的ffmpeg的庫(kù),因此庫(kù)文件比較大,如果想減小庫(kù)的大小可以根據(jù)實(shí)際的需求來(lái)修改腳本文件,詳情可以參考 what-the-codec。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容