當前位置:首頁 » 編程軟體 » 編譯ffmpeg庫

編譯ffmpeg庫

發布時間: 2022-12-23 23:41:48

㈠ Ubuntu下使用mingw-w64交叉編譯ffmpeg

網上大部分編譯windows版ffmpeg的教程都是基於msys+mingw的,完全運行在windows上。由於msys2的性能實在是太糟糕了,編譯速度太感人,因此決定研究linux下使用mingw-w64交叉編譯

先是安裝ubuntu版的mingw-w64
sudo apt install mingw-w64

然後在configure ffmpeg的時候,在正常的配置項之後加上。
--arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32-

上面是32位庫編譯的配置,64位的如下
--arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32-

而且最好使用動態庫,靜態庫還需要鏈接一大堆mingw的庫實現,而且還可能鏈接失敗。但這樣編譯出來的動態庫,還需要依賴 libgcc_s_sjlj-1.dll。如果要移除這個依賴,configure的時候還要加上 --extra-ldflags='-static-libgcc'

㈡ 如何編譯wince平台能使用的ffmpeg庫

如何編譯wince平台能使用的ffmpeg庫

  • 在configure ffmpeg工程時,如果不特別指定,默認fdshow設備是被支持的,但編譯後卻沒有.可以查看configure的日誌文件,會發現找不到一些依賴的頭文件.

  • 所以最終編譯出來的ffmpeg.exe, 用ffmpeg -formats來看,在indev一項中,一般只有vfwcap,而沒有dsh

㈢ 手動編譯FFmpeg靜態庫詳細過程

編譯FFmpeg用作二次開發音視頻,得提前安裝好Ubutu!!!

解壓出來後進入ffmpeg解壓目錄,可以看到裡面有各種文件、文檔。需要關注的是configure文件。這個文件本身就是一個shell腳本,作用為生成makfile文件,然後使用make執行。

1、進入./android/armeabi-v7a2目錄
2、打包編譯好的文件

3、導出打包好的的tar包(導出保存在桌面)

4、解壓之後

㈣ 如何編譯ffmpeg for iphone

編譯iPhone下的FFmpeg

mkdir ./build

# configure for armv7 build
./configure \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=arm \
--cpu=cortex-a8 \
--extra-cflags='-arch armv7' \
--extra-ldflags='-arch armv7' \
--enable-pic \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for armv7
make clean
make

# out the armv7 libs
mkdir ./build/armv7
cp -f ./libavcodec/libavcodec.a ./build/armv7/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/armv7/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/armv7/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/armv7/libavformat.a
cp -f ./libavutil/libavutil.a ./build/armv7/libavutil.a
cp -f ./libswscale/libswscale.a ./build/armv7/libswscale.a

# configure for armv6 build
./configure \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=arm \
--cpu=arm1176jzf-s \
--extra-cflags='-arch armv6' \
--extra-ldflags='-arch armv6' \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for armv6
make clean
make

# out the armv6 libs
mkdir ./build/armv6
cp -f ./libavcodec/libavcodec.a ./build/armv6/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/armv6/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/armv6/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/armv6/libavformat.a
cp -f ./libavutil/libavutil.a ./build/armv6/libavutil.a
cp -f ./libswscale/libswscale.a ./build/armv6/libswscale.a

# configure for i386 build
./configure \
--cc=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=i386 \
--cpu=i386 \
--extra-cflags='-arch i386' \
--extra-ldflags='-arch i386' \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for i386
make clean
make

# out the i386 libs
mkdir ./build/i386
cp -f ./libavcodec/libavcodec.a ./build/i386/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/i386/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/i386/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/i386/libavformat.a
cp -f ./libavutil/libavutil.a ./build/i386/libavutil.a
cp -f ./libswscale/libswscale.a ./build/i386/libswscale.a

# make fat (universal) libs
lipo -output ./build/libavcodec.a -create \
-arch armv6 ./build/armv6/libavcodec.a \
-arch armv7 ./build/armv7/libavcodec.a \
-arch i386 ./build/i386/libavcodec.a

lipo -output ./build/libavdevice.a -create \
-arch armv6 ./build/armv6/libavdevice.a \
-arch armv7 ./build/armv7/libavdevice.a \
-arch i386 ./build/i386/libavdevice.a

lipo -output ./build/libavfilter.a -create \
-arch armv6 ./build/armv6/libavfilter.a \
-arch armv7 ./build/armv7/libavfilter.a \
-arch i386 ./build/i386/libavfilter.a

lipo -output ./build/libavformat.a -create \
-arch armv6 ./build/armv6/libavformat.a \
-arch armv7 ./build/armv7/libavformat.a \
-arch i386 ./build/i386/libavformat.a

lipo -output ./build/libavutil.a -create \
-arch armv6 ./build/armv6/libavutil.a \
-arch armv7 ./build/armv7/libavutil.a \
-arch i386 ./build/i386/libavutil.a

lipo -output ./build/libswscale.a -create \
-arch armv6 ./build/armv6/libswscale.a \
-arch armv7 ./build/armv7/libswscale.a \
-arch i386 ./build/i386/libswscale.a

上面針對i386,也就是模擬器的編譯配置不一定,下面有另一種配置方式
./configure \
--disable-bzlib \
--disable-mmx \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--cc=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1 \
--as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1' \
--sysroot=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk \
--extra-cflags='-fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -O0 -fasm-blocks -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=30000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2'

另外一篇文章
移值FFMPEG到iPhone或Mac OS/X

有關FFMPEG的詳細說明可以參考網上相關文檔;在這里我們只講述FFMPEG移到iPhone或Mac OS/X的過程及相關注意事項。

FFMPEG功能相當強大,在完整的FFMPEG包中就包含了ffserver, ffplay, ffmpeg, avcodec, avdevice, avformat, avutil, swscale等;其中ffserver, ffplay, ffmpeg為應該程序,對與我們這些從事軟體開發的人來說基本上沒什麼用;而avcodec為加解碼庫、avformat為格式庫,avutil則為基礎庫(但平常我們很少用到), swscale則為圖象處理庫;所以我們所要的就是移值avcodec, avformat, avutil, swscale這四個庫。

移值到Mac OS/X下過程:

一、 配置

./configure --prefix=/Developer/usr --cc=/Developer/usr/bin/gcc-4.0 --enable-gpl --enable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook

二、 編譯

make

三、 安裝

make install

說明:上面的/Developer/usr為目標目錄,如果你的Xcode為默認安裝,則這樣安裝後既可以在Xcode中編譯及調式你的代碼了;

移值到Mac OS/X下的模擬iPhone平台下過程:

一、 配置

./configure --prefix=/Developer/usr --disable-debug --cc=/Developer/usr/bin/i686-apple-darwin9-gcc-4.0.1 --enable-gpl --enable-static --disable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook --enable-pthreads

其中:也可以加入--enable-shared,這個選項是允許其編譯產生動態庫,在以後的編程中要用到這個幾個動態庫。--prefix設置的安裝目錄。如果在configure的時候不加上--enable-shared的,則採用靜態鏈接的方式,不會生成那三個動態庫。同時生成的ffplay、ffmpeg的執行文件也比較的大,因為他們不需要動態庫的支持,就可以執行。但是不利於再次開發,所以我也可以考慮採用動態鏈接的方式。

二、 編譯

make

三、 安裝

make install

安裝之後在/usr/local/ffmpeg會看到有三個目錄
lib 動態鏈接庫位置
include 編程要用到頭文件
bin 執行文件所在的目錄

為了以後方便編程,我們把lib中的三個鏈接庫libavcodec.so libavformat.so libavutil.so復制到/usr/lib下。把include目錄下的ffmpeg目錄復制到/usr/include下。執行bin目錄下的ffplay,可以去播放音頻或者視頻文件。例如播放1.mp3
./ffplay 1.mp3
另外,bin目錄下還有兩個文件:ffmpeg和ffserver
ffmpeg是一個很好的視頻和音頻的格式轉化工具。網上有很多它的說明文檔。如果不想生成ffserver,只要在./configure的時候加--disable-ffserver即可。

說明:上面的/Developer/usr為目標目錄,如果你的Xcode為默認安裝,則這樣安裝後既可以在Xcode中編譯及在模擬器下調式你的代碼了;

移值到iPhone平台下過程:

一、 配置

./configure --enable-cross-compile --cross-prefix=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.0.1 --prefix=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr --extra-cflags="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk" --extra-ldflags="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk -Wl,-syslibroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk" --arch=armv6 --enable-armv6 --enable-gpl --enable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook

二、 編譯

make

三、 安裝

make install

說明:上面的/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/為目標目錄,如果你的Xcode為默認安裝,則這樣安裝後既可以在Xcode中編譯及在模擬器下調式你的代碼了。

相關說明:

在ffmpeg中如果使用靜態庫則會出現一些連接錯;所以在安裝ffmpeg庫時請選中動態庫。

OK,到現在我們就你已經知道了如何把ffmpeg移到到iPhone下並把ffmpeg庫和Xcode結合起來了吧;當然如果你的Xcode工具非默認安裝,請更上相關目錄選項.

㈤ 如何將FFmpeg源碼編譯一個so庫

我們從上篇文章 FFmpeg編譯 知道,正常打出來的有5個so包,當然有它的好處是按需引入。但是如果都需要,那是不是覺得很多呢?那可不可以打出一個so呢?答案是當然可以,下面以armv7-a平台為例,腳本如下。

其實在上篇 FFmpeg編譯 中腳本的基礎上添加如下即可打出一個so包:

編譯完成大概需要幾分鍾。

android/armv7-a下生成一個ffmpeg.so

libffmpeg.so及相應的同文件到工程里就好

㈥ 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語言中都已經實現過

㈦ 請教如何使用cygwin編譯ffmpeg靜態庫

如何使用ndk為ffmpeg編譯rtmp+polarssl靜態庫?這個問題花了我整整一天時間。其中遇到很多小問題,這里記錄一下,方便自己也方便其他人。

1、編譯polarssl,查看其Readme文件即可,不需要configure,只需要make時帶上必要的參數即可,不過要記得在每一次執行make命令時都帶上CC的參數(指向你的arm gcc),因為我試過在make install時沒有帶上CC的參數,雖然能編譯出polarssl但是未能正確被rtmp引用到。

2、因為前面我用的polarssl是當前最新(1.3.7)版本,而librtmp使用的好像是polarssl1.0.0以下版本的api,所以需要修改rtmp部分源碼,讓其調用新版polarssl的api,這里的修改可以參照《Migrating from PolarSSL-1.2 to the PolarSSL 1.3 branch》和《[rtmpmp] branch master updated. a312ac7 Fix compat with PolarSSL >= 1.1.0》。

3、出現 undefined reference to `havege_random』錯誤,這里是因為polarssl默認關閉了havege模塊,需要你手動開啟,主要就是修改include/polarssl/config.h,去掉POLARSSL_HAVEGE_C前的注釋,也就是要定義POLARSSL_HAVEGE_C,如下:
#define POLARSSL_HAVEGE_C

4、在編譯出上面兩個庫之後,可以開始編譯ffmpeg(2.1.1版本)了,如果遇到下面的問題 check_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
ERROR: librtmp not found
這里有三種解決方法:
第一種,因為是網路上傳播最多的,算是比較簡便的方法,就是修改ffmpeg的configure,將以下一行:
enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
改為:
enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp -lpolarssl -lz
或者直接注釋掉&& *** 部分,然後再自己加上librtmp的庫路徑也行

第二種,(比較推薦,因為解決了這個會順帶解決大部分找不到庫的錯誤!)因為這里使用了pkg-config工具查找庫,而這個工具ndk並沒有附帶提供,而出現check_pkg_config相關錯誤的話,只要稍加註意,會發現在使用configure配置ffmpeg的交叉編譯時,已經有相應的pkg-config不存在的警告了。我對這個工具不熟悉,所以我只是簡單地加上了一個軟鏈接到系統的pkg-config,如下:
ln -s /usr/bin/pkg-config /home/cidy0106/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config
這個時候重新configure的話可能會出現找不到polarssl庫的錯誤提示,需要修改一下librtmp安裝目錄里的librtmp.pc,把以下內容:
Libs: -L${libdir} -lrtmp -lz
改為:
Libs: -L${libdir} -lrtmp -lz -lpolarssl

至此,就可以正確編譯出ffmpeg了

㈧ Android FFmpeg so庫編譯 支持Https

編譯armv7架構的openssl、ffmpeg的a、so庫,目前openssl只編譯了靜態庫,編譯動態庫,ffmpeg鏈接openssl編譯的時候會出現鏈接的是帶版本號的openssl動態庫(如:libcrypto.so.1.1),這樣在Android ndk開發下不能找到.so.1.1的庫,而so.1.1格式對於Android開發不合法,所以只編譯opessl靜態庫(不會生成.so.1.1的文件)進行解決了,如果有大神有解決方案,可以分享哈。

改後:

改後:

㈨ FFmpeg 編譯參數簡單整理

以下參數使用--enable-foo啟用或使用--disable-foo禁用時使用--e/d-代替。

其他的可更改優化方案:AltiVec、3DNow! 、MMX、MMX2、SSE、SSE3、armv5te、armv6、armv6t2、ARM VFP、iwmmxt、MMI、neon、VIS

使用--enable-foo啟用或使用--disable-foo禁用需要的功能插件,使用--e/d-代替。某些部件(如decoder)enable時需要明確指明,例:--enable-decoder=libdavs2。

註:打開與啟用非等同

其他默認開啟但可以關閉的部分:ffmpeg、ffprobe、ffplay、ffserver、avdevice、avcodec、avcore、avformat、swscale、特定部件(如某個編解碼器等)

可選擇禁用的編碼:AAN DCT、DCT、Golomb、FFT、Golomb、LPC、MDCT、RDFT、VAAPI、VDPAU、DXVA2

㈩ windows下編譯ffmpeg源碼及常見問題

由於公司項目中會用到ffmpeg,而且會用到h265轉碼h264的功能,想要學習ffmpeg,先從編譯開始吧。我編譯的過程主要是從以下博客中學習的,此文主要是記錄中間遇到的問題及解決方法。

https://blog.csdn.net/fan1102958151/article/details/115590291

CC=cl ./configure --enable-shared

https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

這個可能是因為 pdk-config 的 PKG-CONFIG-PATH 配置問題,我是在etc/profile文件里找到PKG-CONFIG-PATH的配置路徑(我的是/usr/lib/pkgconfig),然後將pkgconfig裡面的三個 .pc文件復制到/usr/lib/pkgconfig文件夾里即可

因為博客中只提到將編譯好的x265文件夾中的lib目錄復制過去,其實include文件夾也要復制過去,我把bin、include和lib都復制到usr/local對應的目錄中

不要將msys64裝在帶空格的文件夾中,否則編譯失敗,也不要將原先裝好的文件夾整個復制到另一個沒有空格的文件夾中,這樣編譯也會報錯。

熱點內容
手機百度雲如何秒上傳 發布:2025-07-17 11:46:27 瀏覽:612
交易貓買腳本靠譜嗎 發布:2025-07-17 11:32:27 瀏覽:520
伺服器系統盤一般做什麼陣列 發布:2025-07-17 11:16:05 瀏覽:363
如何用c語音實現放射密碼 發布:2025-07-17 11:13:03 瀏覽:735
lol腳本2017 發布:2025-07-17 10:52:18 瀏覽:827
編譯條件有哪些 發布:2025-07-17 10:42:51 瀏覽:334
apache設置靜態內容緩存時間 發布:2025-07-17 10:32:32 瀏覽:295
蘋果6不能緩存的視頻 發布:2025-07-17 10:31:44 瀏覽:405
如何把文件夾共享 發布:2025-07-17 10:23:49 瀏覽:299
linux查看命令大全 發布:2025-07-17 10:21:24 瀏覽:976