PS:無論做什麼事,實踐最重要,親身實踐積累的經驗,不是隨便閱讀一篇技術文章所能比擬的。
最近項目中可能需要視頻播放,而且後期還可能要支持播放 rtsp 協議的視頻,權衡了一下還是通過編譯 B 站開源的 ijkplayer 吧,ijkplayer 是一個基於 ffmpeg 的輕量級的可在 Android 和 Ios 上使用的跨平台播放器,可以通過編譯來實現更多格式的支持,可以說只要是 ffmpeg 支持的格式 ijkplayer 就支持。
剛開始使用 Cygwin 進行編譯,但總是在生成 so 文件的時候出錯,當然中間還有很多要踩的坑,於是決定使用 Ubuntu 環境編譯 ijkplayer,在 Ubuntu 環境下編譯時基本沒有什麼問題,編譯過程如下:
- 準備
- 配置環境變量
- 安裝必須組件
- 正式編譯
- 運行 ijkplayer
準備#
安裝 VMware 虛擬機並安裝 Ubuntu 系統,安裝完 VMware 之後創建虛擬機,選擇典型安裝模式,如下圖所示:
然後點擊下一步,選擇已經下載的系統鏡像,如下圖所示:
正確選擇後會顯示出鏡像信息,如我選用的是 Ubuntu 64 位 18.04 ,然後繼續下一步,如下圖所示:
填寫用戶名、密碼等信息,點擊下一步,如下圖所示:
填寫虛擬機名稱以及虛擬機要安裝的位置,點擊下一步:
設置虛擬機磁碟大小,為了不降低磁碟性能選擇將磁碟存儲為單個文件,然後點擊下一步,如下圖所示:
Ubuntu 虛擬機到此創建完畢,點擊完成,等待 Ubuntu 安裝完成,輸入設置的密碼即可進入 Ubuntu 系統,如下圖所示:
此外還需下載好 Linux 版本的的 Android SDK 和 NDK,這裡選擇的分別是 android-sdk_r24.4.1-linux.tgz 和 android-ndk-r10e-linux-x86_64.zip,下載後可以使用如下命令解壓文件:
unzip xxx.zip
tar -xvf xxx.tgz
切記不要將 NDK 目錄放在虛擬機的共享目錄下,為保證編譯順利進行應將 NDK 目錄放在 Ubuntu 的系統目錄,也就是 /home/ 用戶名 下面的目錄。
配置環境變量#
在 Ubuntu 下的 /home/ 用戶名 / ,按 Ctrl+h 查看 .bashrc 文件並配置 SDK 和 NDK 環境變量,參考如下:
NDK=/home/jzman/android/android-ndk-r10e
export NDK
ADB=/home/jzman/android/android-sdk-linux/platform-tools
export ADB
# ANDROID_NDK和ANDROID_SDK路徑
ANDROID_NDK=/home/jzman/android/android-ndk-r10e
export ANDROID_NDK
ANDROID_SDK=/home/jzman/android/android-sdk-linux
export ANDROID_SDK
# 加入到PATH路徑
PATH=${PATH}:${NDK}:${ADB}:${ANDROID_NDK}:${ANDROID_SDK}
配置完成後保存並關閉 .bashrc,打開 Terminal 輸入 ndk-build -v 查看 ndk 是否配置成功,運行日誌如下則配置成功:
jzman@ubuntu:~$ ndk-build -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
安裝必須組件#
依次輸入如下命令更新和安裝 git、yasm 和 make ,
sudo apt-get update
sudo apt install git
sudo apt install yasm
sudo apt install make
使用 git --version 和 make -v 查看 git 和 make 工具是否安裝成功,成功則顯示對應版本號,參考如下:
jzman@ubuntu:~$ git --version
git version 2.17.1
jzman@ubuntu:~$ make -v
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
jzman@ubuntu:~$
正式編譯#
//clone ijkplayer源碼
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer
cd ijkplayer
git checkout -B latest k0.8.8
//使用更輕量的module-lite.sh
cd ijkplayer/config
rm module.sh
ln -s module-lite module.sh
//下載ffmpeg源碼
cd ijkplayer
./init-android
//編譯ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
//編譯ijkplayer,生成so文件
cd ijkplayer/android
./compile-ijk.sh all
如果要支持 https,在編譯時執行如下命令:
cd ijkplayer
./init-android-openssl.sh(支持https)
cd ijkplayer/android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
編譯成功之後會在 ijkplayer/android 下面生成對應的 Android 工程,如下圖所示:
查看各個 abi 庫中,如 ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/libs 下面是否生成對應的 so 文件,以 arm64 為例,如下圖所示:
運行 ijkplayer#
使用 Android Studio 打開編譯生成的 Android 工程,運行截圖如下:
ijkPlayer 的編譯到此結束,有疑問可評論。