ffmpeg for android windows,windows10下编译ffmpeg for android
最近實現了一款基于FFMpeg的支持多路視頻的實時流媒體播放器:https://github.com/huweijian5/RtspPlayer
有興趣能夠關注下。html
本文記錄在windows10下編譯ffmpeg的過程:java
環境:win10 ?ffmpeg-3.3?ndk-r14blinux
注意:通常來講低版本ndk編譯的能在高版本使用,但高版本ndk編譯的沒法在低版本使用,由于NDK平臺不是后向兼容的,而是前向兼容的,所以請根據實際狀況選擇ndk的版本。推薦使用app的minSdkVersion對應的編譯平臺。android
第一步:下載ffmpeg,我下載的是ffmpeg-3.3(下載地址:https://ffmpeg.org/download.html)git
在此處選擇basic setup,把右邊的都勾選(具體須要哪一個其實我也忘了,索性就都選了),而后點擊左上角的installation下拉菜單下的apply change進行下載安裝。windows
完成后配置環境變量:bash
以后在安裝目錄找到msys.bat并打開,后面會用到。app
第三步,找到ffmpeg目錄下的configure文件,將以下代碼(有人反饋說復制下面的代碼后每行末尾會多出兩個空格,發現確實如此,所以復制后須要手動去掉空格))ide
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)'
以下圖,這是由于android so命名的須要。
第四步,新建一個build_android.sh,里面的代碼以下:(有人反饋說復制下面的代碼后每行末尾會多出兩個空格,發現確實如此,所以復制后須要手動去掉空格)
#!/bin/bash
export TMPDIR=G:/ffmpeg/tmpdir
NDK=E:/androidstudio/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-18/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=G:/ffmpeg/output/$CPU
ADDI_CFLAGS="-Os -fpic -marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--enable-asm \
--enable-neon \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-pthreads \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-runtime-cpudetect \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
read -p "Press any key to continue."
其中,
TMPDIR是個臨時目錄,編譯時須要用到,這個能夠隨意指定路徑,但必須保證路徑存在;
NDK則替換為你本機的ndk路徑;
SYSROOT根據你的本機設置,但不要大于你的target,好比你的target是22,就不要用 大于android-22的;
PREFIX則是編譯后so的存放地址,路徑能夠隨便指定。
--enable-shared:生成動態庫so
--disable-static:關閉靜態庫,默認生成的是靜態庫
關于參數的做用,能夠打開ffmpeg源碼目錄下的configure文件,里面都有對應的英文說明,舉個栗子:“--enable-mediacodec ? ? ?enable Android MediaCodec support [no]”
特別須要說明的是target-os,這個若是指定linux的話則須要執行第三步的文件修改,若是是android則能夠直接略過第三步,由于在configure文件中已經對target-os做了判斷,若是是android會幫咱們作相似于第三步的操做。
第五步,在剛剛打開的mingw中切換到ffmpeg路徑下,執行build_android.sh
在此過程當中
請檢查${MinGWDir}/msys/1.0/bin(默認為C:/MinGW/msys/1.0/bin)下有沒有pr.exe,若是沒有,那么在編譯libav過程當中,執行./configure會報錯:pr command not found。
下載coreutils-win32-5.3.0-bin.zip,解壓并將bin目錄下的內容拷貝到${MinGWDir}/msys/1.0/bin(默認為C:/MinGW/msys/1.0/bin)下。
附下載地址:http://gnuwin32.sourceforge.net/packages/coreutils.htm
其實這個pr command not found不用管它也能繼續執行下去。
第六步,漫長的等待后,若是在前面PREFIX指定的路徑下看到這兩個文件夾,那么恭喜你,終于編譯成功了。
常見問題解決:
1 編譯過程當中若是出現失敗,請到ffmpeg源碼目錄下找到config.log,里面末尾可能記錄了錯誤的緣由,根據里面的提示百度google自行解決便可。
2 FFMPEG編譯時出現ffmpeg yasm not found, use --disable-yasm for a crippled build
這是由于 FFMPEG為了提升編譯速度,使用了匯編指令,若是系統中沒有yasm指令的話,就會出現上述的問題。
解決辦法是:
A 若是是Windows系統,?從網上下載一個 yasm.exe(地址:http://yasm.tortall.net/Download.html,下載完后更名字為yasm.exe便可) 并放在mingw/bin下面,從新編譯,就不會出現該錯誤了;
B?若是是Linux系統,則更簡單,直接在終端輸入sudo apt-get install yasm?,安裝好后,從新編譯就 OK了。
參考:
http://blog.csdn.net/u011485531/article/details/55804380
總結
以上是生活随笔為你收集整理的ffmpeg for android windows,windows10下编译ffmpeg for android的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酒后在车里睡觉也算酒驾?
- 下一篇: 股票下跌的原因