ubuntu編譯ffmpeg
A. 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目錄。
B. 如何獲取ubuntu下的ffmpeg動態庫
創建靜態庫: ar -rcs test.a *.o 查看靜態庫: ar -tv test.a 解壓靜態庫: ar -x test.a 查看程序依賴的動態庫: readelf -a xxx|grep library 如:可以看到,下面的交叉程序hello執行依賴於如下兩個動態庫。 rebi@ubuntu:~/test$ arm-none-li...
C. ubuntu下的NOMNet++的MinGW命令窗口在哪裡
1、Ubuntu下MinGW編譯環境搭建
本人系統:Ubuntu 14.04 32bit
① apt-get 自動安裝
sudo gedit /etc/apt/sources.list
//在sources.list末尾添加,保存
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
sudo apt-get update
sudo apt-get install mingw32
② 非常感謝,zeranoe,它做了一個自動下載和編譯ffmpeg所需要的mingw及其他工具鏈的腳本,請到http://ffmpeg.zeranoe.com/blog/下載最新的「MingGW-w64 Build Script 3.6.7」。解壓後新建一個目錄把它放進去,執行"chmod 777 mingw-w64-build-3.6.7",使這個腳本可以執行。之後運行"./mingw-w64-build-3.6.7",就可以按照提示來做了。如果它提示你缺少依賴庫,就按照它的提示先安裝依賴庫,方式是,執行"sudo apt-get install 庫名字",然後配置環境變數,參考④
③ wget下載並手動安裝(根據自己的系統選擇相應選項安裝),本人選擇的是32bit
wget http://zeranoe.com/scripts/mingw_w64_build/mingw-w64-build-3.6.0
./mingw-w64-build-3.6.0
mv mingw-w64-i686 /usr/local/
目錄如下:
root@ubuntu:/usr/local/mingw-w64-i686# ls
bin i686-w64-mingw32 include lib libexec mingw share
root@ubuntu:/usr/local/mingw-w64-i686/i686-w64-mingw32/bin# ls
ar as c++ dlltool g++ gcc ld ld.bfd nm obj objmp ranlib strip
④ 本人採用的方法是③,然後要修改PATH,有3種方法:
A. 修改bash.bashrc
1>gedit /etc/bash.bashrc // 在這個文件後添加:
export PATH=$PATH:/usr/local/mingw-w64-i686/i686-w64-mingw32/bin
export PATH=$PATH:/usr/local/mingw-w64-i686/bin
export PATH
2> source /etc/bash.bashrc
B.修改profile
1> gedit /etc/profile //在這個文件後添加
export PATH=$PATH:/usr/local/mingw-w64-i686/i686-w64-mingw32/bin
export PATH=$PATH:/usr/local/mingw-w64-i686/bin
2> source /etc/profile
C. 直接export法
直接執行命令:export PATH=$PATH:/usr/local/mingw-w64-i686/i686-w64-mingw32/bin
export PATH=$PATH:/usr/local/mingw-w64-i686/bin
(注意,如果你關閉了終端,或者新建一個終端,需要重新執行一下這個命令。)
⑤ 檢查是否安裝完成:#:i686-w64-mingw32-gcc -v,此時應列印出交叉編譯工具的一些信息,則安裝成功。
root@ubuntu:/usr/local/mingw-w64-i686/i686-w64-mingw32/bin# i686-w64-mingw32-gcc -v
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=/usr/local/mingw-w64-i686/bin/../libexec/gcc/i686-w64-mingw32/4.8.3/lto-wrapper
Target: i686-w64-mingw32
Configured with: ../source/gcc-4.8.3/configure --build=i686-pc-linux-gnu --target=i686-w64-mingw32 --disable-shared --enable-static --disable-nls --disable-multilib --prefix=/home/samba_share/mingw-w64-i686 --with-sysroot=/home/samba_share/mingw-w64-i686 --with-mpc=/home/samba_share/pkgs/mpc/mpc-1.0.2-i686 --with-mpfr=/home/samba_share/pkgs/mpfr/mpfr-3.1.2-i686 --with-gmp=/home/samba_share/pkgs/gmp/gmp-6.0.0a-i686 --with-host-libstdcxx='-lstdc++ ' --with-cloog=/home/samba_share/pkgs/cloog/cloog-0.18.0-i686 --with-isl=/home/samba_share/pkgs/isl/isl-0.11.1-i686 --enable-languages=c,c++ --enable-threads=win32 --enable-fully-dynamic-string --enable-lto
Thread model: win32
gcc version 4.8.3 (GCC)
更多信息可參考《linux就該這么學》
D. linux下編譯ffmpeg時關於configure的問題.
你准備工作沒做好吧!!
先編譯安裝Yasm。
然後編譯安裝H.264 (也就是x264)。
再編譯安裝AAC audio encoder (fdk-aac)。
編譯安裝libmp3lame (MP3 audio encoder)。
編譯安裝libopus (Opus audio decoder and encoder)。
編譯安裝libvpx (VP8/VP9 video encoder and decoder)。
做後編譯安裝ffmpeg。
其中1-6你可以選擇編譯安裝,也可以使用源直接安裝。安裝後了再編譯安裝ffmpeg
你使用 sudo ldconfig -p |grep libx264 看看你的libx264是否正確安裝.
你編譯安裝x264的時候可以使用2中方式都安裝。
先
cd ../x264
./configure --enable-shared
make
make install
最後
cd ../x264
make distclean
./configure --enable-static
make
make install
E. Ubuntu 9.10下安裝和使用ffmpeg的詳細過程!
ffmpeg的編譯、安裝及使用(for x86,for arm)
http://hi..com/iminway/blog/item/bda2db4e29ced701b2de05f1.html
最新的ffmpeg可以通過svn下載,SVN輔助的軟體有:
SubVersion,從 http://subversion.tigris.org/ 下載,支持linux。
TortoiseSVN,從 http://tortoisesvn.tigris.org/ 下載,是很不錯的SVN客戶端程序,為windows外殼程序集成到windows資源管理器和文件管理系統的Subversion客戶端,用起來很方便。
http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
make
make install
如果安裝了FC6,它已經帶了svn,不用裝了。
ffmpeg的下載:我們就可以通過svn命令獲取最新的ffmpeg,命令如下:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
xvid的獲取地址如下:
http://www.xvid.org/
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
配置編譯
for x86
#./configure --prefix=/usr/local
#make
#make install
for arm
#CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux
#make
#make install
x264的獲取地址如下:
svn co svn://svn.videolan.org/x264/trunk x264
配置編譯
for x86
#./configure --enable-shared --prefix=/usr/local
#make
#make install
for arm
#CC=arm-linux-gcc ./configure --enable-pthread --enable-shared --host=arm-linux
#make install
lame的獲取地址如下: http://lame.sourceforge.net/index.php
配置編譯
for x86
./configure --enable-shared --prefix=/usr/local
libdts編譯參數
./configure --prefix=/usr
make
make install
http://www.audiocoding.com/moles/mydownloads/,http://prdownloads.sourceforge.net/faac
FAAD2的編譯
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
faac的編譯
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
在編譯ffmpeg,在configure時加上--enable-amr_nb --enable-faad --enable-faac參數。
編譯的時候加上--enable-amr_nb --enable-amr_wb參數就行,根據編譯系統的提示,所以我們得下載一些編譯3gp所需得文件。
源碼網址:http://www.3gpp.org/ftp/Specs
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解壓以後把裡面的文件都拷貝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解壓以後把裡面的文件都拷貝到libavcodec/amr_float
微軟ASF格式的三個版本,WMV1,WMV2,WMV3分別對應MediaPlayer的版本7,8和9,所以很多時候會稱VC1為WMV3或 WMV9,都是它了,有時候在代碼里,也能看到稱呼它為VC9的。因為微軟還沒有正式公開這種格式,所以當前對VC1的支持還很不完善。本文基本是根據 Multimedia Mike的一篇博客翻譯和完善而來。
(1) 首先要下載 SMPTE VC-1 reference decoder,這個組織是要收費的,可以從這里下載免費的。
(2) 在ffmpeg目錄下的libavcodec目錄下面,建立目錄libvc1。
(3) 將VC1_reference_decoder_release6/decoder/目錄中的*.c和*.h文件全部到libvc1目錄下。
(4) 將VC1_reference_decoder_release6/shared/目錄中的*.c和*.h文件全部到libvc1目錄下。
(5) 將 libvc1-makefile.txt放到libvc1下的Makefile文件。
(6) 將smpte-vc1.c文件放到libavcodec目錄下。
(7) 修改libavcodec目錄下的vc9.c,將文件最後的wmv3_decoder這個AVCodec的structure,用#if 0和#endif包含起來,也就是使它失效了。
(8) 修改libavcodec目錄下的allcodecs.c,將register_avcodec(&wmv3_decoder)上下的注釋去掉,使它發揮作用。
(9) 修改libavcodec目錄下的Makefile,把OBJS的列表中加入smpte-vc1.o。
(10)修改ffmpeg主目錄下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS後面。
(11) 進入ffmpeg/libavcodec/libav1,執行make
(12) 到ffmpeg主目錄下,執行config;make;make install。config時根據實際情況帶參數。
採用ffmpeg轉碼製作FLV文件,和轉碼成其它媒體類型的重要差別是一定要有lame庫支持,因為FLV的聲音編碼採用mp3格式,非lame這個東 東不行。編譯ffmpeg中加入lame庫真是一場災難,特別在windows下,很多參數都不能發揮作用,最後直接手工和改一些文件,記錄如 下:
(1) 如果在Windows下編譯,第一步當然是下載MinGW和MSYS來裝上了。到http://mingw.sourceforge.net/去下載最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。
(2) 先安裝MinGW,直接運行MinGW-5.0.2.exe安裝,選擇目錄,譬如選擇D:\MinGW為安裝目錄。安裝時需要選擇gcc和make模塊,安裝文件本身很小,會從網上下載模塊來安裝。
(3) 然後安裝MSYS,也是直接運行MSYS-1.0.11-2004.04.30-1.exe安裝。安裝目錄一般選擇D:\MinGW\bin \1.0。,安裝過程會詢問剛才安裝MinGW的目錄,輸入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看這個圖片效果。
(4) 運行MSYS,桌面上有個圖標,雙擊就運行了,運行結果是一個模擬unix的命令窗口,後面的編譯都在這種狀態下進行。前面4步在linux不需要。
(5) 到http://lame.sourceforge.net/去下載最新版的lame-3.97b2.tar.gz,到你認為合適的地方,解壓後進入lame解壓出來的目錄中。執行
./configure --prefix=PREFIX
make
make install
(6) 就把編譯出來的include下的lame目錄到/usr/include目錄下,把lib下的幾個庫文件都到/usr/lib目錄 下。這里注意有個變化,如果只 lib目錄下的靜態庫到/usr/lib下,就是只 libmp3lame.a文件,編譯出來的ffmpeg最終就不會對libmp3lame的動態庫有依賴關系,這是因為編譯首先找動態庫,動態庫沒有才找 靜態庫。如果不做這個,後面編譯ffmpeg時無論如何指定參數,都會報錯LAME not found,不知道是哪裡的bug。
(7) 從http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,現在自由軟體都大量採用SVN了,要先裝一個SVN,可以去http://tortoisesvn.tigris.org/下載windows版的SVN,去http://subversion.tigris.org/下載linux版的SVN。SVN如何編譯安裝這里就省略了。
(8) 如果在windows下,打開解壓後的ffmpeg目錄下的Makefile文件,在FFLIBS的那一行後面加上-lmp3lame$(BUILDSUF)。這個也不知道是哪個bug引起的,搞了好長時間才搞出來,郁悶。Linux下不用這樣。
#./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
make
make install
http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip
解壓以後把裡面的文件都拷貝到libavcodec/amr目錄下
make
make install
#./configure --prefix=./install --disable-shared --enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl
#make
#make install
配置編譯
#./configure --prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install --enable-static --disable-shared --enable-libx264 --enable-libxvid --cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl --disable-strip --disable-network --disable-ipv6 --disable-vhook --disable-audio-beos --disable-audio-oss --disable-mpegaudio-hp --enable-pthreads --enable-small --disable-parsers --disable-debug
#make
#make install
x86上的ldconfig不能在arm上運行,arm上的ldconfig工具是在建立交叉編譯器時,編譯glibc是產生的,可以拷貝到arm-linux中。
(4) 本文大部分內容來自網路,其中xvid,x264的庫,我親手安裝過,ffmpeg的配置編譯for x86的簡易配置,for arm,我親手配置編譯過,並在x86,arm上可用,編譯配置都是採用靜態庫。
ffmpeg作為媒體文件處理軟體,基本用法如下:
ffmpeg -i INPUTfile [OPTI
文章出處:DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20091024/180077.html)
F. 如何用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 目錄,運行下面的命令
G. ubuntu怎麼交叉編譯ffmpeg的程序
:看你這個是2012年的,我最近也是剛接觸這個。估計你現在也明白ffmpeg的使用:在MSDN上查找PROCESS類,裡面有詳細的說明,能調用編譯好的FFMPEG.EXE。重定向輸入參數和獲得輸出。
H. 如何在ubuntu下安裝ffmpeg
1、下載FFmpeg和libx264的包
ffmpeg-2.4.1.tar.bz2 last_x264.tar.bz2
libx264需要yasm,所以先安裝yasm
apt-get install yasm
然後安裝libx264
aptitude install libx264-dev
也可以手動安裝libx264(原先libx264在ubuntu的軟體源里是沒有的只能手動安裝,現在有了就可以不用手動安裝了)
解壓縮libx264
tar -xjvf last_x264.tar.bz2
安裝libx264
./configure --enable-shared --enable-pic
make
make install
然後安裝ffmpeg,ffmpeg有許多依賴包,需要一個一個先安裝
1. libfaac
aptitude install libfaac-dev
2. libmp3lame
aptitude install libmp3lame-dev
3. libtheora
aptitude install libtheora-dev
4. libvorbis
aptitude install libvorbis-dev
5. libxvid
aptitude install libxvidcore-dev
6. libxext
aptitude install libxext-dev
7. libxfixes
aptitude install libxfixes-dev
依賴包安裝完後,安裝ffmpeg
先解壓縮ffmpeg
tar -xjvf ffmpeg-2.4.1.tar.bz2
然後編譯安裝
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis
make
make install
I. 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上測試通過。
J. 如何在Ubuntu14中編譯ffmpeg,並且建立一個eclipse工程
下載ffmpeg源代碼,解壓縮。
用shell定位到目錄,執行
./configure --prefix=你要安裝的目錄
等待結束並生成makefile文件,至於--prefix=目錄,可以省略,如果省略會裝到/usr下,這在很多情況下是危險的,不可控的,可能會帶來麻煩,而且需要root許可權來安裝。
過程中如果失敗結束,一般是依賴不滿足,你需要按照錯誤提示補上需要的庫,這個問題很麻煩,我沒法確定你缺哪個庫,也沒法告訴你一個好的方法去安裝這些庫。但是你需要知道,流程就是如此,如果你知道缺哪個庫,你可以嘗試sudo apt-get install packages的方法安裝或用新立德軟體包安裝程序。
如果成功結束,將產生Makefile文件,這是之需要
make
編譯程序,如果成功結束,程序就編譯好了。
安裝程序使用
make install
根據你是否使用--prefix可能需要root許可權。
如果你僅僅是想使用ffmpeg,那麼不要編譯它,很麻煩的請直接apt-get install ffmpeg