當前位置:首頁 » 安卓系統 » ffmpegandroid編譯

ffmpegandroid編譯

發布時間: 2022-07-21 17:06:55

㈠ 如何運行從Android的命令行的ffmpeg

在前面編譯FFmpeg類庫編譯ffmpeg時,編譯腳本中使用了參數 –disable-ffmpeg,所以是不會生成ffmpeg工具的,即使生成了,
在Android應用下也無法直接使用。
但是,FFmpeg 命令行是十分強大易用的,我們可以用命令行完成大部分的需求,So,Let』s Do it.
http://blog.csdn.net/chengkaizone/article/details/52984091

㈡ 如何用Android NDK編譯FFmpeg

Android NDK編譯FFmpeg

配置編譯環境

在 VirtualBox 中創建一個 Ubuntu 虛擬機

在 Ubuntu 虛擬機中使用 sudo passwd root 命令啟動 root 賬戶

用 root 賬戶登錄進入 Ubuntu

將 android-ndk-r4b-linux-x86.zip 中的內容解壓縮到 /root 目錄下

將 android-sdk_r07-linux_x86.tgz 中的內容解壓縮到 /root 目錄下

將 ffmpeg-0.6.1.tar.bz2 中的內容解壓縮到 /root/ffmpeg/jni 目錄下

三、准備編譯 FFmpeg

編寫 mk 文件

在 /root/ffmpeg/jni 目錄中創建一個 Android.mk 文件,內容如下

?1include $(all-subdir-makefiles)

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目錄中創建一個 Android.mk 文件,內容如下

6LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_WHOLE_STATIC_LIBRARIES := libavformat libavcodec libavutil
libpostproc libswscale

LOCAL_MODULE := ffmpeg

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目錄中創建一個 av.mk 文件,內容如下

# LOCAL_PATH is one of libavutil, libavcodec, libavformat, or
libswscale

#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak

include $(LOCAL_PATH)/../config.mak

OBJS :=

OBJS-yes :=

MMX-OBJS-yes :=

include $(LOCAL_PATH)/Makefile

# collect objects

OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)

OBJS += $(OBJS-yes)

FFNAME := lib$(NAME)

FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))

FFCFLAGS = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch
-Wno-pointer-sign

FFCFLAGS += -DTARGET_CONFIG=/"config-$(TARGET_ARCH).h/"

ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)

ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))

ifneq ($(ALL_S_FILES),)

ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))

C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))

S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))

else

C_OBJS := $(OBJS)

S_OBJS :=

endif

C_FILES := $(patsubst %.o,%.c,$(C_OBJS))

S_FILES := $(patsubst %.o,%.S,$(S_OBJS))

FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))

在 /root/ffmpeg/jni/ffmpeg-0.6.1/libavcodec 目錄中創建一個 Android.mk 文件,內容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := /

$(LOCAL_PATH) /

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_LDLIBS := -lz

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

在 /root/ffmpeg/jni/ffmpeg-0.6.1/libavformat 目錄中創建一個 Android.mk 文件,內容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := /

$(LOCAL_PATH) /

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex

LOCAL_LDLIBS := -lz

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

在 libavfilter、libavutil、libpostproc 和 libswscale 目錄中各創建一個 Android.mk
文件,內容如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := /

$(LOCAL_PATH) /

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

修改 libm.h 文件和 Makefile 文件

編輯 /root/ffmpeg/jni/ffmpeg-0.6.1/libavutil 目錄中的 libm.h 文件,刪除以下 static
方法

#if !HAVE_LRINT

static av_always_inline av_const long int lrint(double x)

{

return rint(x);

}

#endif /* HAVE_LRINT */

#if !HAVE_LRINTF

static av_always_inline av_const long int lrintf(float x)

{

return (int)(rint(x));

}

#endif /* HAVE_LRINTF */

#if !HAVE_ROUND

static av_always_inline av_const double round(double x)

{

return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);

}

#endif /* HAVE_ROUND */

#if !HAVE_ROUNDF

static av_always_inline av_const float roundf(float x)

{

return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);

}

#endif /* HAVE_ROUNDF */

#if !HAVE_TRUNCF

static av_always_inline av_const float truncf(float x)

{

return (x > 0) ? floor(x) : ceil(x);

}

#endif /* HAVE_TRUNCF */

編輯 libavcodec、libavfilter、libavformat、libavutil、libpostproc 和 libswscale
目錄中的 Makefile 文件,刪除

?1include $(SUBDIR)../subdir.mak



?1include $(SUBDIR)../config.mak

生成 config.h 文件

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目錄中創建一個 config.sh 文件,使用 Android NDK r4b
編譯時內容如下

#!/bin/bash

PREBUILT=/root/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0

PLATFORM=/root/android-ndk-r4b/build/platforms/android-8/arch-arm

./configure --target-os=linux /

--arch=arm /

--enable-version3 /

--enable-gpl /

--enable-nonfree /

--disable-stripping /

--disable-ffmpeg /

--disable-ffplay /

--disable-ffserver /

--disable-ffprobe /

--disable-encoders /

--disable-muxers /

--disable-devices /

--disable-protocols /

--enable-protocol=file /

--enable-avfilter /

--disable-network /

--disable-mpegaudio-hp /

--disable-avdevice /

--enable-cross-compile /

--cc=$PREBUILT/bin/arm-eabi-gcc /

--cross-prefix=$PREBUILT/bin/arm-eabi- /

--nm=$PREBUILT/bin/arm-eabi-nm /

--extra-cflags="-fPIC -DANDROID" /

--disable-asm /

--enable-neon /

--enable-armv5te /

--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x
-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"

使用 Android NDK r5 編譯時內容如下

#!/bin/bash

PREBUILT=/root/android-ndk-r5/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86

PLATFORM=/root/android-ndk-r5/platforms/android-8/arch-arm

./configure --target-os=linux /

--arch=arm /

--enable-version3 /

--enable-gpl /

--enable-nonfree /

--disable-stripping /

--disable-ffmpeg /

--disable-ffplay /

--disable-ffserver /

--disable-ffprobe /

--disable-encoders /

--disable-muxers /

--disable-devices /

--disable-protocols /

--enable-protocol=file /

--enable-avfilter /

--disable-network /

--disable-mpegaudio-hp /

--disable-avdevice /

--enable-cross-compile /

--cc=$PREBUILT/bin/arm-eabi-gcc /

--cross-prefix=$PREBUILT/bin/arm-eabi- /

--nm=$PREBUILT/bin/arm-eabi-nm /

--extra-cflags="-fPIC -DANDROID" /

--disable-asm /

--enable-neon /

--enable-armv5te /

--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x
-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"

打開終端,進入 /root/ffmpeg/jni/ffmpeg-0.6.1 目錄,運行下面的命令

㈢ android studio2.3 怎麼編譯ffmpeg

整體調用邏輯為:
1 編譯完ffmpeg庫
2 使用jni方式撰寫c代碼,其中需要包含相應的ffmpeg的頭文件
3 撰寫相應的Android.mk文件,裡面指定需要編譯的c代碼以及需要鏈接的動態庫
4 執行ndk-build生成相應的jni庫
5 創建andorid java程序,代碼中loadLibrary相應ffmpeg庫以及剛才生成的jni庫
6 靜態方法聲明native函數,這些函數在jni寫的c語言中都已經實現過

㈣ 哪位高手做過ffmpeg在android下的運用.小弟我只想調用解碼h264的幀

樓主你好!根據你的描述,讓我來給你回答!
用NDK把ffmpeg 編譯成動態庫SO 文件
再android工程利用JNI生成介面調用這個靜態庫。

希望能幫到你,如果滿意,請記得採納哦~~~

㈤ 如何把ffmpeg移植到android

1
首先把系統環境配置好,一般情況系統默認都會安裝gcc和make編譯工具。若提示未安裝編譯工具,請使用sudo apt-get install build-essential安裝即可。
2
修改編譯後庫的版本號,在ffmpeg目錄下找到configure文件,將下圖所示的4行代碼修改為
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

3
將以下代碼保存到build.sh中

#!/bin/bashNDK=/home/robot/tools/android-ndk-r8eSYSROOT=$NDK/platforms/android-14/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64
function build_ffmpeg{./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffserver \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG}PREFIX=$(pwd)/androidADDI_CFLAGS="-marm"build_ffmpeg
4
使用命令修改build文件的屬性
chmod a+x build.sh
5
接下來就是執行build.sh文件,"."表示當前目錄
./build.sh
執行成功後,會生成config.h配置文件
6
開始編譯,
make
make install
執行成功會在Android目錄下生成一系列目錄,bin、include、lib、share,生成的庫就在lib目錄下

㈥ ffmpeg交叉編譯android,rtsp協議sdp流播放問題

pthread support is required

這個問題是交叉編譯的時候你沒開啟pthread
也就是編譯時加上
--enable-pthread

第二個問題不是問題是個警告或者提示
字面意思就是:從bitrate估算,可能不準確

㈦ ffmpeg 命令行 在android執行

對於ffmpeg我是徹底小白,昨天剛開始接觸,就是按著網上的教程安裝了MingGW和msys神馬的一大堆,然後貌似編譯出了可以用的ffmpeg。
現在的情況是:打開msys的DOS命令窗口,照著網上寫的輸入了幾個簡單的命令,能實現轉換格式、截取某時刻的縮略圖。這樣說明ffmpeg是編譯成功了吧?
【但是】我看網上關於ffmpeg的demo程序,都是很長很長的程序,應該是 .c 文檔之類的,並不是在DOS命令窗口敲的命令。是應該用VS2010之類的,編輯這些長的程序然後運行么?如果是的話,具體怎麼操作的呢?
還是說,這些程序只能在linux環境下運行?

今天費了好大的勁兒才把ffmpeg編譯出來,但是由於對編程開發工具不熟悉(只會簡單的碼代碼,編譯運行..),引入頭文件函數庫神馬的也都不太懂,實在是不知道怎麼用。
身邊很少有了解ffmpeg的,網上的信息也很零碎,自己入門實在是太困難了。。 但這是跟老師做的項目,不能不學。所以求各位大神多多指導,多謝了!
淚目~~T_T~~

㈧ Ubuntu 環境 編譯 ffmpeg移植android 的問題!

到FFmpeg官方網站http://www.ffmpeg.org/上去下載源代碼,這里下載的源代碼是最權威的。進入官網之後,選擇」Download」進入下載頁面,截止2014年3月28日止,最新的發布的穩定版本為FFmpeg2.2,代號」Muybridge」。選擇該下方的」Downloadgzip tarball」進行下載,下載後的文件名為ffmpeg-2.2.tar.gz,大約8.3M。
第二步:在Linux環境下編譯FFmpeg
在Windows平台可以採用VMplayer虛擬機上安裝ubuntu的方式,本人也是採用這種方式。
本文以/home/dennis為根目錄進行操作和說明:
將ffmpeg-2.2.tar.gz拷貝至根目錄,然後執行如下解壓命令將其解壓:
$tar zxf ffmpeg-2.2.tar.gz
解壓後將得到/home/dennis/ffmpeg-2.2目錄。

㈨ ffmpeg 安卓移植的時候 編譯和使用的工具鏈要一致嗎

在經歷了多次下載、實驗、查看代碼之後,終於在Android上移植上了 ,並且寫了自己的jni wrapper,以下是對我幫助很大的幾個帖子,列舉出來,希望能夠對大家有所幫助:轉載

熱點內容
cmd腳本執行sql腳本 發布:2025-01-23 03:46:51 瀏覽:115
搭建100人的游戲伺服器 發布:2025-01-23 03:37:43 瀏覽:516
b站台解析伺服器ip 發布:2025-01-23 03:36:12 瀏覽:202
安卓手機在哪裡看港劇 發布:2025-01-23 03:35:30 瀏覽:51
黑漫的伺服器ip 發布:2025-01-23 03:16:40 瀏覽:650
tplink無internet訪問 發布:2025-01-23 03:15:18 瀏覽:566
原神用安卓手機玩為什麼畫質那麼低 發布:2025-01-23 03:09:31 瀏覽:847
空調壓縮機是外機嗎 發布:2025-01-23 03:09:31 瀏覽:950
大學資料庫學 發布:2025-01-23 02:54:30 瀏覽:588
部隊營區監控系統錄像存儲多少天 發布:2025-01-23 02:49:26 瀏覽:523