国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NDK交叉編譯FFmpeg安卓編譯ffmpeg

這篇具有很好參考價值的文章主要介紹了NDK交叉編譯FFmpeg安卓編譯ffmpeg。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

NDK交叉編譯FFmpeg安卓編譯ffmpeg

編譯環(huán)境

編譯工具下載

參考這個:https://blog.csdn.net/gaoliang0/article/details/81913291

或者官網(wǎng) NDK編譯工具下載: https://developer.android.google.cn/ndk/downloads?hl=zh-cn

官網(wǎng)老版本: https://github.com/android/ndk/wiki/Unsupported-Downloads

或者從我的百度網(wǎng)盤:

鏈接:https://pan.baidu.com/s/1FEtM6mVNgER_DvC2myHB5Q?pwd=28l9
提取碼:28l9
–來自百度網(wǎng)盤超級會員V6的分享

準(zhǔn)備下載 android-ndk-r19c-linux-x86_64.zip 因?yàn)檫@個版本比較適中

編譯過程

編譯環(huán)境

系統(tǒng)環(huán)境

系統(tǒng)環(huán)境:

iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ uname -a
Linux iyfangfeng 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

NDK版本:

/home/iyfangfeng/libsrc/tools/android-ndk-r19c

以下只編譯armeabi-v7a版本如果需要編譯其他版本 可以參考 build_fdkaac_all.sh 方式

NDK版本的選擇

當(dāng)前Google給的NDK工具支持GCC最高版本android-ndk-r17c-linux-x86_64.zip之后的版本不再支持gcc,只支持clang來編譯,而使用gcc或者clang編譯在編譯腳本上存在差別,所以需要注意著點(diǎn)。

選擇哪個版本取決于使用的編譯腳本。

下面的ffmpeg因?yàn)樯婕暗胶芏嗟谌綆焖詴嬖谕瑫r使用r17c以上的版本或者r17c下的版本 使用gcc編譯。

注意:

如果遇到一些奇怪的問題可以換一換NDK版本時候,有時候就解決了,或者更多的使用自己經(jīng)常使用的版本,比如我用的多是android-ndk-r10e環(huán)境來適應(yīng)gcc編譯環(huán)境,問題少很多。

  • 本地NDK編譯器目錄參考

    iyfangfeng@iyfangfeng:~/libsrc/tools$ ls
    android-ndk-r10e  android-ndk-r10e-linux-x86_64.zip  android-ndk-r16b  android-ndk-r16b-linux-x86_64.zip  android-ndk-r19c  android-ndk-r19c-linux-x86_64.zip
    iyfangfeng@iyfangfeng:~/libsrc/tools$ 
    
    

源碼下載

ffmpeg-3.3.8.tar.gz 
  • ffmpeg 下載

    https://gitee.com/mirrors/ffmpeg/tags?page=4

    http://ffmpeg.org/download.html#releases

只編譯簡單的ffmpeg

編譯
iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ./build_ffmpeg.sh armeabi-v7a
iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ls libs/lib-ffmpeg/armeabi-v7a/lib/
libavcodec.so  libavdevice.so  libavfilter.so  libavformat.so  libavutil.so  libpostproc.so  libswresample.so  libswscale.so  pkgconfig

./build_ffmpeg.sh 使用的是gcc 編譯腳本

編譯腳本
  • 最簡單的目錄結(jié)構(gòu)

    iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ ls
    build_ffmpeg.sh  config.sh   libs   ffmpeg-3.3.8
    
  • build_ffmpeg.sh

iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ cat build_ffmpeg.sh 
#!/bin/bash

ARCH=$1

source config.sh $ARCH
LIBS_DIR=$(cd `dirname $0`; pwd)/libs/lib-ffmpeg
echo "LIBS_DIR="$LIBS_DIR

cd ffmpeg-3.3.8

PLATFORM=$ANDROID_NDK_ROOT/platforms/$AOSP_API/$AOSP_ARCH
TOOLCHAIN=$ANDROID_NDK_ROOT/toolchains/$TOOLCHAIN_BASE-$AOSP_TOOLCHAIN_SUFFIX/prebuilt/linux-x86_64

PREFIX=$LIBS_DIR/$AOSP_ABI

echo ===============================
echo $PREFIX

./configure \
--prefix=$PREFIX \
--enable-cross-compile \
--disable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--target-os=android \
--cc=$TOOLCHAIN/bin/$TOOLNAME_BASE-gcc \
--cross-prefix=$TOOLCHAIN/bin/$TOOLNAME_BASE- \
--disable-stripping \
--nm=$TOOLCHAIN/bin/$TOOLNAME_BASE-nm \
--sysroot=$PLATFORM \
--enable-gpl \
--enable-shared \
--disable-static \
--enable-small \
--enable-postproc \
--enable-avdevice \
--disable-outdevs \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffserver \
--disable-debug \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-symver \
--disable-stripping \
--extra-cflags="$FF_EXTRA_CFLAGS  $FF_CFLAGS" \
--extra-ldflags="  "

make clean
make -j8
make install

cd ..

  • config.sh

    iyfangfeng@iyfangfeng:~/libsrc/ffmpeg/basic/clangffmpeg0511$ cat config.sh
    
    #NDK路徑
    #clang ffmpeg 
    #export ANDROID_NDK_ROOT=/home/yanglong/iyangfeng/tools/android-ndk-r19c
    #上面是之前電腦編譯路徑
    #export ANDROID_NDK_ROOT=/home/iyfangfeng/libsrc/tools/android-ndk-r19c
    #clang
    
    
    #CXX  gcc r17c 及其以下
    #fdkaac x264 
    export ANDROID_NDK_ROOT=/home/iyfangfeng/libsrc/tools/android-ndk-r10e
    
    
    
    
    export AOSP_TOOLCHAIN_SUFFIX=4.9
    
    export AOSP_API="android-21"
    
    #架構(gòu)
    if [ "$#" -lt 1 ]; then
    	THE_ARCH=armv7
    else
    	THE_ARCH=$(tr [A-Z] [a-z] <<< "$1")
    fi
    
    #根據(jù)不同架構(gòu)配置環(huán)境變量
    case "$THE_ARCH" in
      arm|armv5|armv6|armv7|armeabi)
    	TOOLCHAIN_BASE="arm-linux-androideabi"
    	TOOLNAME_BASE="arm-linux-androideabi"
    	AOSP_ABI="armeabi"
    	AOSP_ARCH="arch-arm"
    	HOST="arm-linux-androideabi"
    	AOSP_FLAGS="-march=armv5te -mtune=xscale -mthumb -msoft-float -funwind-tables -fexceptions -frtti"
    	FF_EXTRA_CFLAGS="-O3 -fpic -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 -mfloat-abi=softfp -mfpu=vfp -marm -march=armv6 "
    	FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      armv7a|armeabi-v7a)
    	TOOLCHAIN_BASE="arm-linux-androideabi"
    	TOOLNAME_BASE="arm-linux-androideabi"
    	AOSP_ABI="armeabi-v7a"
    	AOSP_ARCH="arch-arm"
    	HOST="arm-linux-androideabi"
    	AOSP_FLAGS="-march=armv7-a -mthumb -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frtti "
    	FF_EXTRA_CFLAGS="-DANDROID  -fPIE -pipe -fPIC -ffunction-sections -funwind-tables -fstack-protector -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing"
    	FF_CFLAGS="-O3 -Wall -fPIE -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wa,--noexecstack -DANDROID "
    	;;
      hard|armv7a-hard|armeabi-v7a-hard)
    	TOOLCHAIN_BASE="arm-linux-androideabi"
    	TOOLNAME_BASE="arm-linux-androideabi"
    	AOSP_ABI="armeabi-v7a"
    	AOSP_ARCH="arch-arm"
    	HOST="arm-linux-androideabi"
    	AOSP_FLAGS="-mhard-float -D_NDK_MATH_NO_SOFTFP=1 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frtti -Wl,--no-warn-mismatch -Wl,-lm_hard"
    	FF_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 "
    	FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      neon|armv7a-neon)
    	TOOLCHAIN_BASE="arm-linux-androideabi"
    	TOOLNAME_BASE="arm-linux-androideabi"
    	AOSP_ABI="armeabi-v7a"
    	AOSP_ARCH="arch-arm"
    	HOST="arm-linux-androideabi"
    	AOSP_FLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wl,--fix-cortex-a8 -funwind-tables -fexceptions -frtti"
    	FF_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 "
    	FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      armv8|armv8a|aarch64|arm64|arm64-v8a)
    	TOOLCHAIN_BASE="aarch64-linux-android"
    	TOOLNAME_BASE="aarch64-linux-android"
    	AOSP_ABI="arm64-v8a"
    	AOSP_ARCH="arch-arm64"
    	HOST="aarch64-linux"
    	AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
    	FF_EXTRA_CFLAGS=""
    	FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      mips|mipsel)
    	TOOLCHAIN_BASE="mipsel-linux-android"
    	TOOLNAME_BASE="mipsel-linux-android"
    	AOSP_ABI="mips"
    	AOSP_ARCH="arch-mips"
    	HOST="mipsel-linux"
    	AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
    	;;
      mips64|mipsel64|mips64el)
    	TOOLCHAIN_BASE="mips64el-linux-android"
    	TOOLNAME_BASE="mips64el-linux-android"
    	AOSP_ABI="mips64"
    	AOSP_ARCH="arch-mips64"
    	HOST="mipsel64-linux"
    	AOSP_FLAGS="-funwind-tables -fexceptions -frtti"
    	;;
      x86)
    	TOOLCHAIN_BASE="x86"
    	TOOLNAME_BASE="i686-linux-android"
    	AOSP_ABI="x86"
    	AOSP_ARCH="arch-x86"
    	HOST="i686-linux"
    	AOSP_FLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions -frtti"
    	FF_EXTRA_CFLAGS="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -march=k8 "
    	FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      x86_64|x64)
    	TOOLCHAIN_BASE="x86_64"
    	TOOLNAME_BASE="x86_64-linux-android"
    	AOSP_ABI="x86_64"
    	AOSP_ARCH="arch-x86_64"
    	HOST="x86_64-linux"
    	AOSP_FLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions -frtti"
    	FF_EXTRA_CFLAGS="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -fomit-frame-pointer -march=k8 "
            FF_CFLAGS="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID  "
    	;;
      *)
    	echo "ERROR: Unknown architecture $1"
    	[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
    	;;
    esac
    
    echo "TOOLCHAIN_BASE="$TOOLCHAIN_BASE
    echo "TOOLNAME_BASE="$TOOLNAME_BASE
    echo "AOSP_ABI="$AOSP_ABI
    echo "AOSP_ARCH="$AOSP_ARCH
    echo "AOSP_FLAGS="$AOSP_FLAGS
    echo "HOST="$HOST
    
    
    
問題
  • C compiler cannot create executables
checking whether the C compiler works... no
configure: error: in `/home/iyfangfeng/libsrc/ffmpeg/basic/clangffmpeg0511/fdk-aac-0.1.6':
configure: error: C compiler cannot create executables
See `config.log' for more details

解決:

之前使用的是clang ndk-r19c的編譯環(huán)境建議換成r10e或者r14 不能使用r16b 有問題

  • fatal error: stdio.h: No such file or directory

    libSYS/src/cmdl_parser.cpp:96:19: fatal error: stdio.h: No such file or directory
     #include <stdio.h>
                       ^
    compilation terminated.
    Makefile:1270: recipe for target 'libSYS/src/cmdl_parser.lo' failed
    make: *** [libSYS/src/cmdl_parser.lo] Error 1
    make: *** 正在等待未完成的任務(wù)....
    libSYS/src/genericStds.cpp:95:18: fatal error: math.h: No such file or directory
    
    

    百度后說:改用ndk-r14b,因?yàn)閞16b目錄結(jié)構(gòu)改了。 這有可能,我換的是 r10e 這個之前用的最多 https://www.jianshu.com/p/38894c45daf0

    確實(shí)編譯過了 遇到類似問題可以換版本試試 android-ndk-r10e

  • 編譯器路徑一直都還是之前項(xiàng)目的

    重新創(chuàng)建一個目錄,再下載一個版本 oK

  • Unknown option “–enalbe-demuxer=flv”.

Unknown option "--enalbe-demuxer=flv".
See ./configure --help for available options.

除了報錯這個外海包含其他的錯誤,可能是這個版本不支持flv 解復(fù)用,可以編譯選項(xiàng)中刪除掉

使用

可以在Android Studio 上面演示,暫時沒有完全獨(dú)立的demo,用得人多再補(bǔ)吧,先編譯

技術(shù)支持

按照如上提供的步驟,如果還存在問題,可以找我獲取可以使用的so庫、源碼、腳本、帶環(huán)境及源碼的虛擬機(jī)。應(yīng)該有地方可以獲取名片。promptpe文章來源地址http://www.zghlxwxcb.cn/news/detail-719361.html

到了這里,關(guān)于NDK交叉編譯FFmpeg安卓編譯ffmpeg的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FFMPEG使用DrawText濾鏡添加字幕,包含ndk編譯freetype

    FFMPEG使用DrawText濾鏡添加字幕,包含ndk編譯freetype

    ? ? ? ? ffmpeg使用drawtext濾鏡需要在編譯的時候使能drawtext,要想成功使能必須要先集成編譯freetype庫,并通知到ffmpeg(交叉編譯沒有安裝到系統(tǒng)庫路徑)。 ? ? ? ? 也有看到有的文章說需要集成fribidi,筆者也交叉編譯了,但是最終沒有用到,可能是ffmpeg版本的原因。 freety

    2024年01月17日
    瀏覽(26)
  • Android中集成FFmpeg及NDK基礎(chǔ)知識

    Android中集成FFmpeg及NDK基礎(chǔ)知識

    在日常App開發(fā)中,難免有些功能是需要借助NDK來完成的,比如現(xiàn)在常見的音視頻處理等,今天就以ffmpeg入手,來學(xué)習(xí)下Android NDK開發(fā)的套路. 很多人并不清除JNI和NDK的概念,經(jīng)常搞混這兩樣?xùn)|西,先來看看它們各自的定義吧. 很多人并不清除JNI和NDK的概念,經(jīng)常搞混這兩樣?xùn)|西,先來看看

    2024年01月17日
    瀏覽(24)
  • Android-NDK的linux交叉編譯環(huán)境

    Android-NDK的linux交叉編譯環(huán)境

    NDK 下載 ?|? Android NDK ?|? Android Developers https://github.com/android/ndk/wiki/Unsupported-Downloads 以android-ndk-r26c下載為例,下載后將壓縮包解壓至/usr目錄下 編譯平臺變量判斷條件中增加一下android條件下CMake的變量 詳細(xì)變量設(shè)置參考 C++ 庫支持 ?|? Android NDK ?|? Android Developers 編譯出的程

    2024年04月10日
    瀏覽(23)
  • FFmpeg開發(fā)筆記(八)Linux交叉編譯Android的FFmpeg庫

    ? 《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》一書的“12.1.2 ?交叉編譯Android需要的so庫”介紹了如何在Windows環(huán)境交叉編譯Android所需FFmpeg的so庫,接下來介紹如何在Linux環(huán)境交叉編譯Android所需FFmpeg的so庫。 登錄Linux服務(wù)器(比如華為云的歐拉系統(tǒng)),依次執(zhí)行下面的命令。 重

    2024年03月24日
    瀏覽(18)
  • FFmpeg開發(fā)筆記(十六)Linux交叉編譯Android的OpenSSL庫

    ? 《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》一書的例程主要測試本地的音視頻文件,當(dāng)然為了安全起見,很多網(wǎng)絡(luò)視頻都采用了https地址。FFmpeg若要訪問https視頻,就必須集成第三方的openssl庫,但編譯FFmpeg時卻默認(rèn)關(guān)閉了openssl。為了讓App能夠播放采用https的在線視頻,需要

    2024年04月22日
    瀏覽(26)
  • FFmpeg開發(fā)筆記(九)Linux交叉編譯Android的x265庫

    ? 《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》一書的“12.1.2 ?交叉編譯Android需要的so庫”介紹了如何在Windows環(huán)境交叉編譯Android所需FFmpeg的so庫,前文又介紹了如何在Linux環(huán)境交叉編譯Android所需FFmpeg的so庫,接下來介紹如何在Linux環(huán)境交叉編譯Android所需x265的so庫。 執(zhí)行以下命

    2024年04月08日
    瀏覽(21)
  • 在Clion開發(fā)工具上使用NDK編譯可以在安卓上執(zhí)行的程序

    在Clion開發(fā)工具上使用NDK編譯可以在安卓上執(zhí)行的程序

    ????????因?yàn)楣ぷ餍枰?,我要將一份C語言代碼編譯成可執(zhí)行文件傳送到某安卓系統(tǒng)里執(zhí)行。 ????????眾所周知,使用ndk編譯代碼有三種使用方式,分別是基于 Make 的 ndk-build、CMake以及獨(dú)立工具鏈。以前進(jìn)行ndk編程都是使用ndk-build進(jìn)行的,新建jni目錄,編寫Android.mk和A

    2023年04月12日
    瀏覽(27)
  • android ndk一些編譯鏈接錯誤及解決辦法

    鏈接opencv庫時報鏈接錯誤缺少libz庫 解決,mediann是本人所編譯庫的名字 鏈接librknnrt.so時報 解決 使用的是aarch-linux的庫,報錯換成android版本的librknnrt.so即可 鏈接opencv庫時報錯缺少jnigraphics 解決 鏈接opencv庫時報錯確實(shí)mediandk 解決 鏈接opencv時報很多std的鏈接錯誤 解決 ndk版本太

    2024年02月09日
    瀏覽(17)
  • 安卓高級工程師面試題,Android 儀器化單元測試(1),ndk開發(fā)入門

    安卓高級工程師面試題,Android 儀器化單元測試(1),ndk開發(fā)入門

    配置 build.gradle 依賴 dependencies { androidTestImplementation ‘a(chǎn)ndroidx.test??1.4.0’ androidTestImplementation ‘a(chǎn)ndroidx.test:rules:1.4.0’ } android { defaultConfig { testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner” } } 測試樣例 測試代碼 本例子參考 google 官方網(wǎng)站。因?yàn)楣倬W(wǎng)里面很多類沒有給到

    2024年04月16日
    瀏覽(26)
  • (NDK編譯)詳解使用Android.mk編譯的C/C++程序過程

    (NDK編譯)詳解使用Android.mk編譯的C/C++程序過程

    想要在 Android設(shè)備 上運(yùn)行 C/C++程序 可執(zhí)行文件,可采用一個方法就是使用 NDK編譯 ,很多時候要比 gcc編譯 更適合,這里我采用的是 imx6q開發(fā)板 上面裝載了自己編寫的Android6.0.1鏡像,在 Ubuntu64位 系統(tǒng)上采用NDK編譯。 目錄 1.準(zhǔn)備文件 2.編寫Android.mk 注意 完整Android.mk代碼 3.NDK編

    2024年02月05日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包