ffmpeg Android
繼 x264 Android 這篇的基礎概念,繼續來編譯ffmpeg for Android。本篇的功能,能在Android裝置上讀取影片,然後經由rtmp協定直播到伺服器上。
重要觀念
–enable-shared : 會編譯出 .so檔(動態)
–enable-static : 會編譯出 .a檔(靜態)
下載原始碼
請到 https://www.ffmpeg.org/ 下載 ffmpeg的原始碼,解開後置於家目錄之下
編譯script
在家目錄之下編寫如下的script,命名為build_ffmpeg_arm.sh。此script跟網路上的不一樣,這個是可以build出真正Arm 格式的二進位碼。請更改權限後 chmod 755 build_ffmpeg_arm.sh,然後直接執行 ./build_ffmpeg_arm.sh。
#!/bin/bash clear cd ffmpeg sudo rm -rf out NDK=/home/thomas/android-ndk-r21e TOOLCHAINS=$NDK/toolchains/llvm/prebuilt/linux-x86_64 SYSROOT=$TOOLCHAINS/sysroot API=23 ./configure \ --target-os=linux \ --prefix=./out/armeabi-v7a \ --cc=$TOOLCHAINS/bin/armv7a-linux-androideabi$API-clang \ --cxx=$TOOLCHAINS/bin/armv7a-linux-androideabi$API-clang++ \ --cross-prefix=$TOOLCHAINS/bin/arm-linux-androideabi- \ --nm=$TOOLCHAINS/bin/arm-linux-androideabi-nm \ --sysroot=$SYSROOT \ --arch=arm \ --extra-libs="-lgcc" \ --enable-shared \ --disable-static \ --enable-small \ --enable-cross-compile \ --enable-zlib \ --enable-gpl \ --disable-doc \ --disable-symver \ --disable-ffplay \ --disable-ffprobe \ --disable-ffmpeg \ --enable-neon \ --extra-cflags="-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300" \ --extra-ldflags="-Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -nostdlib -lc -lm -ldl -llog" sudo make clean sudo make -j8 sudo make install echo ffmpeg for armeabi_v7a builds finished
執行上述script時,看到畫面開始跑時可以立即按下Ctrl+C中斷,拉到最上面如果有看到下面的訊息,表示configure設定正確。此時就可以重新執行並安心的讓它跑完。

本script能編出真正的Arm格式,完全在於指定了正確的 cc及cxx ToolChains。不過ffmpeg沒用c++寫,所以cxx可以不用指定也沒關係。
