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

編譯FFmpeg4.3.1 、x264并移植到Android

這篇具有很好參考價(jià)值的文章主要介紹了編譯FFmpeg4.3.1 、x264并移植到Android。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、前言

FFmpeg 既是一款音視頻編解碼工具,同時(shí)也是一組音視頻編解碼開發(fā)套件。

2、準(zhǔn)備工作

  • 系統(tǒng):Linux
  • NDK:android-ndk-r21b-linux-x86_64.zip
  • FFmpeg:ffmpeg-snapshot.tar.bz2
  • x264:x264

3、下載NDK 在linux環(huán)境中,使用命令如下:
?

#1.進(jìn)入用戶目錄
cd /usr

#2.新建一個(gè)android文件夾用來存放ndk
mkdir android
cd /android

#3.下載ndk
wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip

#4.安裝解壓工具
yum -y install unzip

#5.解壓ndk
unzip android-ndk-r21b-linux-x86_64.zip

4、下載FFmpeg

#1.進(jìn)入用戶目錄
cd /usr

#2.新建一個(gè)ffmpeg文件夾用來存放ffmpeg
mkdir ffmpeg
cd /ffmpeg

#3.下載ffmpeg
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2

#4.解壓ffmpeg
tar -xf ffmpeg-snapshot.tar.bz2

5、下載x264

#1.進(jìn)入用戶目錄
cd /usr

#2.新建一個(gè)x264文件夾用來存放x264
mkdir x264
cd /x264

#3.下載x264
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2

#4.解壓x264
tar -xf x264-master.tar.bz2

6、開始編譯x264

#1.進(jìn)入x264解壓之后的目錄
cd /x264-master

#2.新建一個(gè)編譯腳本build_x264_android-v7a.sh
vim build_x264_android-v7a.sh

#3.執(zhí)行build_x264_android-v7a.sh
sh build_x264_android-v7a.sh

#4.命令執(zhí)行成功后會(huì)后如下內(nèi)容
cd /android/armeabi-v7a

#頭文件-include
-rw-r--r--. 1 root root   172 Sep 18 03:01 x264_config.h
-rw-r--r--. 1 root root 47960 Sep 18 03:01 x264.h
#靜態(tài)庫-lib
-rw-r--r--. 1 root root 1820080 Sep 18 03:01 libx264.a
drwxr-xr-x. 2 root root      21 Sep 18 03:01 pkgconfig

build_x264_android-v7a.sh內(nèi)容如下:

#!/bin/bash

echo ">>>>>>>>> 編譯x264 android-v7a <<<<<<<<"

# 你的ndk路徑,如果你是按照以上步驟來的,此處可以不用修改
export NDK=/usr/android/android-ndk-r21b 

export HOST_TAG=linux-x86_64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG

#C、C++編譯器
export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang # c compiler path
export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++ # c++ compiler path

#編譯結(jié)果存放目錄
PREFIX=$(pwd)/android/armeabi-v7a

function build_android
{
#如果你需要的是動(dòng)態(tài)庫,--enable-static 改為 --enable-shared

echo ">>>>>>>>開始編譯<<<<<<<<<<"
  ./configure \
  --prefix=$PREFIX \
  --enable-static \
  --enable-pic \
  --disable-asm \
  --disable-opencl \
  --disable-cli \
  --host=arm-linux \
  --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  --sysroot=$TOOLCHAIN/sysroot \

  make clean
  make
  make install

echo ">>>>>>編譯完成!<<<<<<"
}

build_android

【免費(fèi)分享】音視頻學(xué)習(xí)資料包、大廠面試題、技術(shù)視頻和學(xué)習(xí)路線圖,資料包括(C/C++,Linux,F(xiàn)Fmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點(diǎn)擊788280672加群免費(fèi)領(lǐng)取~

編譯FFmpeg4.3.1 、x264并移植到Android,android

7、開始編譯FFmpeg并依賴x264

#1.進(jìn)入ffmpeg解壓之后的目錄
cd /ffmpeg

#2.新建一個(gè)編譯腳本build_ffmpeg_with_x264.sh
vim build_ffmpeg_with_x264.sh

#3.執(zhí)行build_ffmpeg_with_x264.sh,如果提示缺少xxx.mak,則先執(zhí)行一下./configure,然后繼續(xù)
sh build_ffmpeg_with_x264.sh

#4.命令執(zhí)行成功后會(huì)有如下內(nèi)容
cd /android/armv7-a

drwxr-xr-x. 2 root root  20 Sep 18 19:54 bin
drwxr-xr-x. 9 root root 137 Sep 18 19:54 include
drwxr-xr-x. 3 root root 214 Sep 18 20:00 lib
drwxr-xr-x. 3 root root  20 Sep 18 19:54 share

#頭文件
cd /include
drwxr-xr-x. 2 root root 4096 Sep 18 19:54 libavcodec
drwxr-xr-x. 2 root root   80 Sep 18 19:54 libavfilter
drwxr-xr-x. 2 root root   55 Sep 18 19:54 libavformat
drwxr-xr-x. 2 root root 4096 Sep 18 19:54 libavutil
drwxr-xr-x. 2 root root   44 Sep 18 19:54 libpostproc
drwxr-xr-x. 2 root root   43 Sep 18 19:54 libswresample
drwxr-xr-x. 2 root root   40 Sep 18 19:54 libswscale

#靜態(tài)庫
cd /lib
-rw-r--r--. 1 root root 11900662 Sep 18 19:54 libavcodec.a
-rw-r--r--. 1 root root  3672928 Sep 18 19:54 libavfilter.a
-rw-r--r--. 1 root root  3425150 Sep 18 19:54 libavformat.a
-rw-r--r--. 1 root root   531514 Sep 18 19:54 libavutil.a
-rw-r--r--. 1 root root    28484 Sep 18 19:54 libpostproc.a
-rw-r--r--. 1 root root    98088 Sep 18 19:54 libswresample.a
-rw-r--r--. 1 root root   445110 Sep 18 19:54 libswscale.a
drwxr-xr-x. 2 root root      158 Sep 18 19:54 pkgconfig

build_ffmpeg_with_x264.sh腳本內(nèi)容:

#!/bin/bash

echo ">>>>>>>>> 編譯ffmpeg <<<<<<<<"

#NDK路徑.
export NDK=/usr/android/android-ndk-r21b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

#如果只需要單獨(dú)的ffmpeg,不需要依賴x264,去掉$ADD_H264_FEATURE這句就可以了;
#如果你需要的是動(dòng)態(tài)庫,--enable-static 改為 --disable-static,--disable-shared 改為 --enable-shared

function build_android
{

echo "開始編譯 $CPU"

./configure \
--prefix=$PREFIX \
--enable-neon  \
--enable-hwaccels  \
--enable-gpl   \
--enable-postproc \
--disable-shared \
--disable-debug \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-static \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"
$ADD_H264_FEATURE


make clean
make
make install

echo "編譯完成 $CPU"

}

#x264庫所在的位置,ffmpeg 需要鏈接 x264
LIB_DIR=/usr/x264/x264-master/android/armeabi-v7a;

#x264的頭文件地址
INC="$LIB_DIR/include"

#x264的靜態(tài)庫地址
LIB="$LIB_DIR/lib"

ADD_H264_FEATURE="--enable-encoder=aac \
    --enable-decoder=aac \
    --enable-gpl \
    --enable-encoder=libx264 \
    --enable-libx264 \
    --extra-cflags=-I$INC \
    --extra-ldflags=-L$LIB "
#armv7-a
ARCH=arm
CPU=armv7-a
API=21
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

build_android

8、合并編譯出來的靜態(tài)庫為一個(gè)單獨(dú)的libffmpeg.so

#1.進(jìn)入ffmpeg靜態(tài)庫目錄
cd android/armv7-a/lib/
#2.新建union_ffmpeg_so.sh
vim union_ffmpeg_so.sh
#3.執(zhí)行union_ffmpeg_so.sh
sh union_ffmpeg_so.sh
#4.執(zhí)行成功后會(huì)看到如下內(nèi)容
-rwxr-xr-x. 1 root root 17863896 Sep 18 20:00 libffmpeg.so

union_ffmpeg_so.sh腳本內(nèi)容如下:

echo "開始編譯ffmpeg so"

#NDK路徑.
export NDK=/usr/android/android-ndk-r21b

PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

PREFIX=$(pwd)

#如果不需要依賴x264,去掉/usr/x264/x264-master/android/armeabi-v7a/lib/libx264.a \就可以了

$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
    libavcodec.a \
    libavfilter.a \
    libswresample.a \
    libavformat.a \
    libavutil.a \
    libpostproc.a \
    libswscale.a \
    /usr/x264/x264-master/android/armeabi-v7a/lib/libx264.a \
    -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
    $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \

echo "完成編譯ffmpeg so"

9、移植編譯的libffmpeg.so及頭文件到Androidstudio項(xiàng)目中步驟如下:

1.新建一個(gè)native項(xiàng)目,然后進(jìn)行如下配置

編譯FFmpeg4.3.1 、x264并移植到Android,android

2.配置build.gradle,如果你是按照我這樣在module中導(dǎo)入的ffmpeg,則在app-build.gradle需要添加 ndk{ abiFilters 'armeabi-v7a' }

編譯FFmpeg4.3.1 、x264并移植到Android,android

3.新建andr_ffmpeg.cpp

編譯FFmpeg4.3.1 、x264并移植到Android,android

4.新建AndrFFmpeg.java

編譯FFmpeg4.3.1 、x264并移植到Android,android

5.調(diào)用AndrFFmpeg->getFFmpegVersion()、AndrFFmpeg.getAVCodeInfo()

編譯FFmpeg4.3.1 、x264并移植到Android,android

10、如有遺漏、錯(cuò)誤的地方歡迎指正、拍磚~~~~

原文鏈接?編譯FFmpeg4.3.1 、x264并移植到Android文章來源地址http://www.zghlxwxcb.cn/news/detail-804656.html

到了這里,關(guān)于編譯FFmpeg4.3.1 、x264并移植到Android的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Android 引入FFmpeg 讀取RTSP流 解封裝獲取H264原始數(shù)據(jù)

    Android 引入FFmpeg 讀取RTSP流 解封裝獲取H264原始數(shù)據(jù)

    之前 寫了Android中怎么引入FFMmpeg的例子 。 本編文章將會(huì)寫一個(gè)簡單的demo實(shí)現(xiàn)ffmpeg拉去rtsp流并在界面中打印前五個(gè)字節(jié) 懶得往下細(xì)看的可以點(diǎn)擊這里下載工程 基于andorid studio? 實(shí)際效果下圖: android 用ffmpeg 拉取rtsp流 解出h264數(shù)據(jù) 看下目錄結(jié)構(gòu): 很簡單 應(yīng)用進(jìn)去之后有一個(gè)

    2024年02月03日
    瀏覽(21)
  • OpenCV 報(bào)錯(cuò):FFMPEG: tag 0x34363258/‘X264‘ is not supported with codec id 27 and format ‘mp4 / MP4‘

    首先說一下報(bào)錯(cuò)的地方,是在使用VideoWriter保存視頻時(shí): 出現(xiàn)如下錯(cuò)誤: 經(jīng)過查找網(wǎng)上資料,發(fā)現(xiàn)是cv2.VideoWriter_fourcc()參數(shù)存在問題, 解決方法: 將 修改為: 即可完美解決問題。

    2024年02月07日
    瀏覽(39)
  • 第18課 移植FFmpeg和openCV到Android環(huán)境

    第18課 移植FFmpeg和openCV到Android環(huán)境

    要在Android下從事音視頻開發(fā),同樣也繞不開ffmpeg+opencv,不管是初學(xué)者還是有一定經(jīng)驗(yàn)的程序,面臨的首要問題就是環(huán)境的搭建和庫文件的編譯配置等問題,特別是初學(xué)者,往往會(huì)在實(shí)際開發(fā)前浪費(fèi)大量的時(shí)間來編譯ffmpeg及opencv的動(dòng)態(tài)庫.so文件。因此作者整理了自己實(shí)際開發(fā)

    2024年01月23日
    瀏覽(17)
  • Android ffmpeg入門(1)—— 使用NDK交叉編譯ffmpeg集成到Android項(xiàng)目

    Android ffmpeg入門(1)—— 使用NDK交叉編譯ffmpeg集成到Android項(xiàng)目

    最近在學(xué)習(xí)android NDK開發(fā)相關(guān)內(nèi)容,借ffmpeg練練手。ffmpeg是做音視頻方面功能的基礎(chǔ),后面會(huì)隨著個(gè)人的學(xué)習(xí)更新一系列ffmpeg博客,防止自己遺忘。 這個(gè)系列博客主要目的是基于ffmpeg通過NDK開發(fā)的方式完成一個(gè)基本的視頻播放器。 本篇博客主要實(shí)現(xiàn)了 ffmpeg編譯 以及 引入 a

    2023年04月08日
    瀏覽(24)
  • x264參數(shù)全集

    x264參數(shù)全集

    目錄 x264 介紹 x264 全部參數(shù) profile、preset、tune 相關(guān)參數(shù) CPU、Video properties 相關(guān)參數(shù) ?Encoder 相關(guān)參數(shù) x264是一種開源的視頻編碼器,它能夠?qū)⒁曨l數(shù)據(jù)壓縮為H.264/MPEG-4 AVC格式。x264編碼器具有高效、高質(zhì)量和靈活性等優(yōu)點(diǎn),因此被廣泛用于視頻制作和在線視頻分發(fā)等領(lǐng)域。 網(wǎng)

    2024年02月16日
    瀏覽(15)
  • ffmpeg 編譯android mac環(huán)境編譯 或者centos

    ffmpeg 編譯android mac環(huán)境編譯 或者centos

    ndk版本:ndk21 (可使用android studio內(nèi)部下載的ndk) /Users/XXXX/Library/Android/sdk/ndk/21.4.7075529 ffmpeg下載? ffmpeg6.0 1:git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2:或者直接點(diǎn)擊下面按鈕下載 http://ffmpeg.org/releases/ffmpeg-6.0.tar.xz 環(huán)境和資源都準(zhǔn)備好了之后,接下來就是準(zhǔn)備編譯腳本。這里面說

    2024年02月09日
    瀏覽(21)
  • 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)
  • android ndk clang交叉編譯ffmpeg動(dòng)態(tài)庫踩坑

    android ndk clang交叉編譯ffmpeg動(dòng)態(tài)庫踩坑

    1.ffmpeg默認(rèn)使用gcc編譯,在android上無法使用,否則各種報(bào)錯(cuò),所以要用ndk的clang編譯 2.下載ffmpeg源碼 修改configure文件,增加命令 cross_prefix_clang 修改以下命令 修改后 3.新建腳本文件,ffmpeg目錄下執(zhí)行腳本文件即可。 編譯32位,則ARCH改為arm,CPU改為armv7-a,TARGET改為armv7a-linux-

    2024年02月13日
    瀏覽(27)
  • FFMPEG android mac 編譯 支持DASH/OPENSSL問題匯總

    FFMPEG android mac 編譯 支持DASH/OPENSSL問題匯總

    一 下載源碼 FFMPEG? https://github.com/FFmpeg/FFmpeg/tree/release/4.3 二 編寫腳本 支持https 就必須添加open SSL 的編譯 具體可以查看我的另一個(gè)關(guān)于open SSL 的 然后我們配置的一些路徑 涉及 ndk 的一定要查看你用的ndk 版本 是否存在這些路徑這是第一步 然后如果支持dash 需要你加入 --enabl

    2024年02月16日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包