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

ffmpeg編譯so

發布時間: 2022-08-05 05:47:01

linux ffmpeg.so沒有

看到個類似的問題: www.avidemux.org/smf/index.php?topic=11974.0 你這個東西真不好說,不過看來是 x264 因為是靜態編譯,靜態編譯我記得需要別的函數庫也是靜態的。你這個應該是 x264 本身就有找不到的函數入口問題,導致現在傳染給了 ffmpeg...

㈡ linux ffmpeg 怎麼編64位

1、下載ffmpeg。
下載網址:http://www.ffmpeg.org/download.html
2、解壓縮
tar -zxvf ffmpeg-2.0.1.tar.gz
3、配置,生成Makefile
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
如果執行結果不對,可以根據提示信息,並查看幫助,解決問題
./configure --help
4、編譯安裝
make
make install
5、安裝之後在/usr/local/ffmpeg會看到有三個目錄
bin 執行文件目錄
lib 靜態,動態鏈接庫目錄
include 編程用到的頭文件
為了防止執行程序找不到庫文件,
可以將/usr/local/ffmpeg/lib目錄設置到LD_LIBRARY_PATH環境變數,
或者查看/usr/local/ffmpeg/lib下所有的鏈接,並在/usr/lib下建立同樣的鏈接。如下。
ln -s /usr/local/ffmpeg/lib/libavcodec.so /usr/lib/libavcodec.so
ln -s /usr/local/ffmpeg/lib/libavdevice.so /usr/lib/libavdevice.so
ln -s /usr/local/ffmpeg/lib/libavfilter.so /usr/lib/libavfilter.so
ln -s /usr/local/ffmpeg/lib/libavformat.so /usr/lib/libavformat.so
ln -s /usr/local/ffmpeg/lib/libavutil.so /usr/lib/libavutil.so
ln -s /usr/local/ffmpeg/lib/libswresample.so /usr/lib/libswresample.so
ln -s /usr/local/ffmpeg/lib/libswscale.so /usr/lib/libswscale.so
ln -s /usr/local/ffmpeg/lib/libavcodec.so /usr/lib/libavcodec.so.55
ln -s /usr/local/ffmpeg/lib/libavdevice.so /usr/lib/libavdevice.so.55
ln -s /usr/local/ffmpeg/lib/libavfilter.so /usr/lib/libavfilter.so.3
ln -s /usr/local/ffmpeg/lib/libavformat.so /usr/lib/libavformat.so.55
ln -s /usr/local/ffmpeg/lib/libavutil.so /usr/lib/libavutil.so.52
ln -s /usr/local/ffmpeg/lib/libswresample.so /usr/lib/libswresample.so.0
ln -s /usr/local/ffmpeg/lib/libswscale.so /usr/lib/libswscale.so.2

這時就需要在/etc/ld.so.conf下面加一行/usr/local/ffmpeg/lib,保存過後ldconfig一下,

這時就需要在/etc/ld.so.conf下面加一行/usr/local/MySQL/lib,保存過後ldconfig一下,

6、編譯測試程序
gcc -o ffmpegtest ffmpegtest.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil
7、執行程序
./ffmpegtest
或直接執行/usr/local/ffmpeg/lib目錄下的./ffmpeg進行測試。

㈢ android視頻源碼中有沒有加水印的功能

其實ffmpeg添加水印功能在網上例子很多,也都大同小異,但在Android端,比較難搞的地方其實是ffmpeg編譯出能帶水印添加功能的so庫文件,其中:ffmpeg的drawtext filter依賴freetype的so,需要先編一個android平台下freetype的so,而在android平台的編譯ffmpeg時,難搞的pkg-cfg總是檢查依賴的freetype失敗,迫不得已修改了ffmpeg的configure,不在對freetype庫做檢查,但編譯配置的時候需要手動指定freetype so的搜索路徑。
我使用的配置如下:

[plain] view plain
/usr/local/lib/pkgconfig $FFMPEG_ROOT/configure --target-os=linux \
--prefix=$PREFIX \
--disable-encoders \
--disable-decoders \
--disable-muxers \
--disable-demuxers \
--disable-parsers \
--disable-bsfs \
--disable-protocols \
--disable-devices \

㈣ 在centos下安裝編譯ffmpeg,make過程中報錯說,沒有規則可以建立「libavcodec/libavcodec.so.52」

缺少庫文件

yum -y install ffmpeg-libs

㈤ 怎麼利用ffmpeg實現android播放器

下面把具體編譯步驟描述如下,假定NDK安裝在~/android-ndk-r7:
1. 首先從FFmpeg官網下載最新的release版本源碼ffmpeg-0.11.tar.gz解壓縮到Android源碼樹的ffmpeg/下。
2 准備一個編譯腳本build_android.sh並放在ffmpeg/下面,這個腳本也是Rockplayer提供的,需做一些修改,其內容附在後面。我目前用的也會附在後面。
3 在ffmpeg目錄下運行./build_android.sh開始編譯FFmpeg,編譯好的libffmpeg.so會放在文件夾android裡面,一共有3個版本分別對應3種ARM體系結構,包括armv7-a、armv7-a-vfp、armv6_vfp,根據所運行的硬體平台選取其中一個版本。為了編譯使用FFmpeg的程序時可以方便地找到libffmpeg.so,可將它復制到$OUT/system/lib/和$OUT/obj/lib/,當然這一步也可以加在build_android.sh中做。
4. 接下來就是編譯可執行文件ffmpeg了,這個工具可以在命令行下完成FFmpeg提供的幾乎所有功能包括編碼、解碼、轉碼等,也是用來調試和驗證很有用的工具。其實上述編譯完後在$ANDROID_BUILD_TOP/external/ffmpeg/下也會生成ffmpeg,但是在設備上無法運行。為了編出能在設備上運行的ffmpeg,可以寫一個簡單的Android.mk,

㈥ ffmpeg 命令行 在android執行

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

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

㈦ linux下怎麼變異ffmpeg

1、下載ffmpeg。

wget http://down1.chinaunix.net/distfiles/ffmpeg-0.4.9-p20051120.tar.bz2

我是在這個網址上下載ffmpeg-0.4.9-p20051120.tar.bz2,看網上有人用的是svn下載,但是我的機子中沒有svn客戶端,然後就在網上搜索,下載了這個版本。如果利用svn可以下載ffmpeg最新的版本。

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

2、解壓

tar xvfj ffmpeg-0.4.9-p20051120.tar.bz2

得到解壓後的目錄是ffmpeg-0.4.9-p20051120,名字太長,利用mv命令改為ffmpeg

mv ffmpeg-0.4.9-p20051120.tar.bz2 ffmpeg

3、配置

./configure --enable-shared --prefix=/usr/local/ffmpeg

其中:--enable-shared 是允許其編譯產生動態庫,在以後的編程中要用到這個幾個動態庫。--prefix設置的安裝目錄。

4、編譯並安裝

make
make install

5、安裝之後在/usr/local/ffmpeg會看到有三個目錄

lib 動態鏈接庫位置
include 編程要用到頭文件
bin 執行文件所在的目錄

6、為了以後方便編程,我們把lib中的三個鏈接庫libavcodec.so libavformat.so libavutil.so復制到/usr/lib下。把include目錄下的ffmpeg目錄復制到/usr/include下。

這里我這樣復制了還是不對,-lavcodec -lavutil -lavformat的時候,提示找不到庫
然後我把 /usr/local/ffmpeg/lib 所有文件復制到 /usr/local/lib才可以的
執行bin目錄下的ffplay,可以去播放音頻或者視頻文件。例如播放1.mp3

./ffplay 1.mp3

另外,bin目錄下還有兩個文件:ffmpeg和ffserver

ffmpeg是一個很好的視頻和音頻的格式轉化工具。網上有很多它的說明文檔。如果不想生成ffserver,只要在./configure的時候加--disable-ffserver即可。

7、編程

如果寫了一個test.c文件,要包含ffmpeg的頭文件,可以這樣寫:

#include

編譯:gcc -o test test.c -lavformat -lavcodec -lavtuil (前提是有第6步的操作)

如果沒有第6部的操作,則編譯的時候如下:

gcc -o test test.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil

編譯成功之後,執行的時候還是需要動態庫的支持,還是要把那三個動態庫文件復制到/usr/lib或者/lib中,不然執行的時候會說找不到動態庫鏈接。還有一個方法可以解決這個問題,就是把/usr/local/ffmpeg/lib這個目錄加入到/etc/ld.so.config中,然後執行 ldconfig,或者重啟電腦,這樣執行的時候系統就可以從/usr/local/ffmpeg/lib這個目錄下去找這三個動態庫文件了。

以上的方式是採用動態庫編譯ffmpeg的,如果在configure的時候不加上--enable-shared的,則採用靜態鏈接的方式,不會生成那三個動態庫。同時生成的ffplay、ffmpeg的執行文件也比較的大,因為他們不需要動態庫的支持,就可以執行。但是不利於再次開發,所以我採用動態鏈接的方式。configure中還有很多的選項,可以通過./configure --help查看,也可以直接查看configure文件。這在配置的時候很重要。

㈧ 如何用Android NDK編譯FFmpeg

一、安裝cygwin、配置ndk和下載ffmpeg源碼

這步就不說了,網上很多教程,再次聲明本教程只針對ndk R4這個版本。需要說明的是,本人在cygwin安裝路徑下的.bash_profile文件中指定的NDK路徑如下所示。因為本人裝了好幾個NDK,因此後面的R4隻是個標示。

NDK_R4=/cygdrive/d/android-ndk-r4
export NDK_R4

二、編譯前准備和編譯

1、因為R4這個NDK比較舊,交叉編譯的時候需要在一個Android環境中,那簡單,創建一個Android空項目,把整個項目拷出來,在項目下建立一個文件夾jni,把ffmpeg0.6.6的源碼拷進去。左圖,HelloJni就是我新建的一個項目,Android.mk這時候你還沒有,先不用管。右圖ffmpeg-0.6.6文件夾的內容要跟我一樣,直接就是代碼。我這里的ffmpeg_cywin這個文件夾是隨便建的,放哪裡無所謂的。

2、在ffmpeg-0.6.6下建立一個文件config.sh,內容如下所示。需要注意的是,unix下的換行符和windows下是不一樣,如果直接拷貝到windows下的記事本,後面執行這個config.sh的時候會出問題,這里我用的是notepad++編輯的,在編輯->檔案格式轉換->轉換為UNIX格式。(注意,後面的所有的Android.mk的編輯都有此要求)。

簡單說一下這個config.sh,PREBUILT和PLATFORM根據你安裝ndk的位置而不同,config.sh其實是一個腳本,執行這個腳本的時候又調用了另外一個腳本configure,configure主要是根據編譯選項(下面enable disable那些),生成相應的編譯配置,就是說你想要編譯ffmpeg什麼模塊就自己定製編譯選項的內容。基本上這個文件只要修改一下PREBUILT和PLATFORM就行,其他都不用改。

#!/bin/bash
export PREBUILT=D://android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0
export PLATFORM=D://android-ndk-r4/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"
3、修改configure文件,找到下圖的內容,修改成我這樣,這個是用來存放執行腳本過程的臨時文件的,我這里用的是D://NDK,你可以設置其他地方,但是要先創建好這個文件夾,放哪裡無所謂的。

4、然後在cywin中進入ffmpeg0.6.6文件夾,執行chmod -x config.sh,然後執行./config,此過程需要一定的時間。如果這一步出現問題,很有可能是你config.sh中的PREBUILT和PLATFORM的路徑設置不對,或者是你拷貝內容到config.sh的時候沒有在UNIX格式下。執行完如下圖所示。

5、在ffmpeg-0.6.6下會生成一個config.h文件,編輯它,找到#define restrict restrict這一行,把它改成#define restrict

6、在libavutil/libm.h下,把所有static的方法注釋掉或者直接刪掉。

7、修改libavcodec,libavfilter,libavformat,libavutil,libpostproc和libswscale目錄的MakeFile文件,每個文件中,刪除語句

include $( SUBDIR ) ../config.mak 和 include $ (SUBDIR) .. / subdir.mak。

libavcodec下的makefile中搜索inverse.o,把它所在的那一行刪掉,要不編譯的時候會沖突。

8、在ffmpeg-0.6.6文件夾下,創建av.mk文件(UNIX格式),內容如下:

#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))

9、在jni文件夾下,創建Android.mk(UNIX格式),內容如下:
include $(all-subdir-makefiles)

10、在ffmpeg-0.6.6文件夾下,創建Android.mk,內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale
LOCAL_MODULE := ffmpeg
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))

11、在ffmpeg-0.6.6\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)

12、在ffmpeg-0.6.6\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)

13、在ffmpeg-0.6.6\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)
14、然後在jni目錄下,運行$NDK_R4/ndk-build -B,這里的命令需要根據你自己的情況修改,然後就開始編譯了。過程需要10來分鍾,成功之後,會在libs下生產libffmpeg.so。如果編譯出來的libffmpeg.so只有1.5k,得如下修改一下NDK,再重新編譯。

把下面紅色部分加到NDK的build/core/build-binary.mk里:
LOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
LOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))
...
static_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))
static_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))
...
$(call mole-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))
$(call mole-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))
...
$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)
...
$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)
接著再將最外層ffmpeg/Android.mk裡面的LOCAL_STATIC_LIBRARIES改成LOCAL_STATIC_WHOLE_LIBRARIES

㈨ ffmpeg 代碼是不是完全開源

是的
本開源代碼播放器使用的音視頻解碼代碼來源於ffmpeg-0.6.3(http://www.ffmpeg.org),
jni銜接代碼和java層代碼來源於havlenapetr(https://github.com/havlenapetr/FFMpeg)。

移植ffmpeg到android的常規關鍵點網上有很多的帖子可以參考,也可以用文件夾比較工具比較一下,看看添加修改刪除了那些文件。

本開源代碼的編譯環境
1: Android SDK 2.2版,
2: NDK r4版,注意要導出NDK宏,

3: IDE開發環境是 eclips 3.5 版

4: libffplay.so是在Android 2.2版源碼目錄樹中編譯出來的,使用Ubuntu10.04和VMware7.1.1版,目前源碼不公開
5: libffmpeg.so編譯步驟,cd /cygwin/c/ffplay, ./config_r4.sh, $NDK/ndk-build
6: PC主機開發環境是windows xp。

特別注意,此demo只能在 Android SDK 2.2版上使用,其他版本有修改源碼,重新編譯才行。

此開源代碼解決了幾個特別關鍵點,達到實用水平。幾個關鍵點如下:
1:arm匯編代碼編譯支持,主要是在幾個.mk文件中添加LOCAL_ARM_MODE := arm語句,
在config_r4.sh文件中添加--arch=armv5te和--enable-asm 等開關。
2:在ffmpeg config_r4.sh配置文件中關閉了一些不用的選項後,連接時總是報一些莫名其妙的連接錯誤,
本開源代碼給出終極解決方案(在/jni/jni/Android.mk文件中添加 LOCAL_LDLIBS += C:/ffplay/bin/ndk/local/armeabi/libavcodec.a等語句)。
3:修改havlenapetr中的視頻顯示錯誤bug,經測試havlenapetr原始代碼在模擬器設置為320x480時顯示正確,在更大的解析度下顯示錯誤,
本開源代碼已修改好此bug,現在無論什麼解析度都可以正確顯示。

此開源代碼其他注意事項:

1:jni銜接代碼相比havlenapetr精簡了幾個數量級,更方便網友們研習。
2:此開源代碼不包括play,pause,stop,seek和視音頻同步等功能實現代碼,這部分代碼不開源。

3:Android jni層直接輸出音頻示例,Android jni層直接輸出視頻示例,基於ffmpeg的Android播放器開源代碼,三個工程使用相同的庫,相同的方法和技巧,可相互參考。

在moto defy me525上測試通過。

熱點內容
windowssmb無法訪問 發布:2025-02-08 23:33:28 瀏覽:467
python27編譯器 發布:2025-02-08 23:29:20 瀏覽:339
如何運行python代碼 發布:2025-02-08 23:28:15 瀏覽:692
新箱子密碼鎖怎麼設置 發布:2025-02-08 23:26:50 瀏覽:147
安卓如何可以看見被撤回的消息 發布:2025-02-08 23:19:17 瀏覽:797
火影忍者競技場腳本 發布:2025-02-08 23:10:18 瀏覽:935
英國訪問學者簽證費用 發布:2025-02-08 23:04:46 瀏覽:926
洛奇合成腳本 發布:2025-02-08 22:57:04 瀏覽:141
linux文件軟鏈接 發布:2025-02-08 22:35:48 瀏覽:773
iphone6s緩存怎麼清理 發布:2025-02-08 22:33:17 瀏覽:928