⑴ linux下編譯ffmpeg 以及交叉編譯並引入Android
在Linux環境下,編譯ffmpeg並進行Android交叉編譯的步驟如下:
首先,為支持mp3編碼,你需要安裝lame庫,可通過`ffmpeg -i audio.wav -acodec libmp3lame audio.mp3`進行測試。然後,編譯ffmpeg,常用的配置命令是`./configure --prefix=/usr/local/ffmpeg --enable-debug=3`,但可能會遇到錯誤,如gcc編譯器問題或nasm/yasm未找到。遇到這些問題,建議更新ffmpeg版本並檢查config.log日誌。
編譯時,可能遇到許可權問題,如`mkdir: cannot create directory '...': Permission denied`,這時需要確保有足夠的許可權。環境變數的配置也很重要,可以在.profile文件中添加`path`和`pkg_config_path`,配置後通過`source .profile`使更改生效。
在編譯過程中,如果ffplay沒有出現在bin目錄中,可能需要安裝sdl2並重新configure、make和install。如果遇到so文件鏈接問題,可以編輯`/etc/ld.so.conf`並運行`ldconfig`來解決。
為了在Android設備上使用ffmpeg,你需要下載Android NDK,然後執行`make-standalone-toolchain.sh`生成交叉編譯工具鏈。創建一個腳本(build_ffmpeg.sh),包含針對不同架構的編譯命令,注意調整工具鏈路徑、架構和輸出目錄。
在編譯ffmpeg時,可能需要額外添加x264支持以處理h264編碼。下載x264源碼後,同樣使用configure進行配置,但可能需要解決缺少nasm的問題。
總的來說,編譯ffmpeg涉及多個步驟,包括安裝依賴庫、配置環境、處理編譯錯誤和生成針對Android的交叉編譯版本。務必查閱文檔以確保正確設置和執行每個步驟。
⑵ 在ARM上運行交叉編譯後的opencv文件,沒有輸出
一、交叉編譯opencv
構造:
下載:各個庫的下載可以直接搜名字到官網下載
幾個關鍵解釋:
「--prefix=」 後邊跟make install時的位置,本例中,libz在make install時將安裝到/usr/arm-linux-gnueabihf中
「--host=」 後邊跟arm-linux表明使用的是ARM環境
有configure的才能進行configure配置
4)所有的makefile修改類似
Libz的交叉編譯
第一步:# ./configure --prefix=/usr/arm-linux-gnueabihf --shared
第二步:修改makefile,主要有下邊幾個,修改的時候通篇參照即可
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar rc
RANLIB=arm-linux-gnueabihf-ranlib
STRIP = arm-linux-gnueabihf-strip
如果有ARCH的話,ARCH=ARM
第三步:#sudo make
#sudo make install
Libjpeg的交叉編譯
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc
第二步:參考1)中方法修改makefile
第三步:#sudo make
#sudo make install
Libpng的交叉編譯
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static CC=arm-linux-gnueabihf-gcc
第二步:參考1)中方法修改makefile
第三步:#sudo make
#sudo make install
Yasm的交叉編譯
第一步:#./configure --host=arm-linux --prefix=/usr/arm-linux-gnueabihf --enable-shared --enable-static
第二步:修改makefile
第三步:#sudo make
#sudo make install
Libx264的交叉編譯
第一步:#CC=arm-linux-gnueabihf-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/usr/arm-linux-gnueabihf
第二步:修改config.mak里的參數,因為makefile要調用config.mak,所以修改方法同makefile
第三步:#sudo make
#sudo make install
Libxvid的交叉編譯
第一步:首先切換目錄 #cd build/generic
第二步:#./configure --prefix=/usr/arm-linux-gnueabihf --host=arm-linux --disable-assembly
第三步:#sudo make
#sudo make install
ffmpeg的交叉編譯
第一步:
./configure --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/arm-linux-gnueabihf/include --extra-ldflags=-L/usr/arm-linux-gnueabihf/lib --prefix=/usr/arm-linux-gnueabihf
第二步:修改makefile文件
第三步:#sudo make
#sudo make install
第四步:將ffmpeg加入pkg-config
執行#sudo gedit /etc/bash.bashrc,在末尾加入
export LD_LIBRARY_PATH=/usr/arm-linux-gnueabihf/lib/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/arm-linux-gnueabihf /lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/arm-linux-gnueabihf /lib/
完畢後使用命令:#source /etc/bash.bashrc
或者單獨使用三個export,不過壽命只在一個終端中,終端關閉時就失效。
幾個關鍵解釋:--extra-flags指向xvid的安裝路徑,--extra-ldflags指向x264的路徑
安裝cmake-gui
執行:#sudo apt-get install cmake-qt-gui
Opencv的交叉編譯
第一步:修改opencv/platflrms/linux/目錄下的arm-gnueabi.toolchain.cmake,將其所有刪掉,寫入:
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
第二步:在opencv目錄下新建build目錄,進入build目錄,執行命令:
#cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake ../
這時,要保證出現:
第三步:使用cmake-gui打開CMakeCache.txt,去掉所有的無關項,修改CMAKE_INSTALL_PREFIX,來確定make install的目錄
第四步:#sudo make
#sudo make install
可能出現的錯誤:
opencv編譯不通過,出現skip之類的,說明ffmpeg沒編譯好,或者其編譯好了,但是pkg-config沒有設置好,一定要設置好其環境
前邊幾步不通過的話,看看命令有沒有少,或者有沒有修改好makefile
在arm上使用時,一種方法時直接將編譯好的opencv目錄下的lib文件拷貝到開發板對應的/lib目錄下,其他或者拷貝到自己指定的目錄,並設置好環境變數即可使用