FFmpeg移植過(guò)程:
FFmpeg是一個(gè)開(kāi)源免費(fèi)跨平臺(tái)的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證。它的移植同樣遵循LGPL或GPL移植方法:configure、make、make insatll。
1.下載ffmpeg開(kāi)源庫(kù)(ffmpeg-0.5.tar.bz2)放到相應(yīng)文件夾。
#tar jxvf ffmpeg-0.5.tar.bz2
#cd ffmpeg-0.5
2.配置編譯選項(xiàng)
#./configure --cross-prefix=/usr/local/arm/3.4.1/bin/arm-linux- --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --enable-ffplay --enable-ffserver --enable-swscale --disable-vhook --enable-pthreads --disable-network --disable-ipv6 --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libmp3lame --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-yasm --disable-stripping --disable-optimizations --extra-cflags=-I/usr/local/ffextra/include --extra-ldflags=-L/usr/local/ffextra/lib
交叉編譯器:arm-linux-gcc3.4.1
--cflags:ffmpeg第三方庫(kù)頭文件聲明
--extra-ldflags:第三方庫(kù)庫(kù)文件路徑
3.
#make
4.
#make install
把編譯生成的庫(kù)拷貝到2440開(kāi)發(fā)板,配置環(huán)境變量。
編譯過(guò)程錯(cuò)誤:
1:libavcodec/arm/dsputil_arm_s.S
libavcodec/arm/dsputil_arm_s.S: Assembler messages:
libavcodec/arm/dsputil_arm_s.S:25: Error: unknown pseudo-op: `.eabi_attribute'
libavcodec/arm/dsputil_arm_s.S:641: Error: bad instruction `push {r4-r10}'
libavcodec/arm/dsputil_arm_s.S:724: Error: bad instruction `pop {r4-r10}'
make: *** [libavcodec/arm/dsputil_arm_s.o] 錯(cuò)誤 1
解決:在make的時(shí)候有一些asm指令找不到
ffmpeg-0.5/libavcodec/arm/asm.S
24行: .eabi_attribute 24, /val改為@.eabi_attribute 24, /val
28行: .eabi_attribute 25, /val改為@.eabi_attribute 25, /val
ffmpeg-0.5/libavcodec/arm/dsputil_arm_s.S
641行: push {r4-r10} 改為 stmfd sp!, {r4-r10} @ push {r4-r10}
724行: pop {r4-r10} 改為 ldmfd sp!, {r4-r10} @ pop {r4-r10}
2:/home/liao/ffmpeg-0.5/libavcodec/libavcodec.so: undefined reference to `dlerror'
/home/liao/ffmpeg-0.5/libavcodec/libavcodec.so: undefined reference to `dlclose'
/home/liao/ffmpeg-0.5/libavcodec/libavcodec.so: undefined reference to `dlopen'
/home/liao/ffmpeg-0.5/libavcodec/libavcodec.so: undefined reference to `dlsym'
解決:缺少libdl庫(kù)文件,在Makefile文件中添加庫(kù)文件
68行:ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS)后面添加FF_LDFLAGS +=-ldl
至此,ffmpeg可以順利編譯?。?/p>
注意:
ffmpeg中ffplay需要SDL支持,如需編譯ffplay,則需下面步驟:
編譯SDL,將其include、lib文件拷貝至第三方庫(kù)路徑(/usr/local/ffextra)
在configure之前修改configure文件2042行:
SDL_CONFIG="${cross_prefix}sdl-config"改為SDL_CINFIG="/usr/local/sdl/bin/sdl-config"
ffmpeg針對(duì)mp3、wma音頻格式解碼為浮點(diǎn)型,難以在arm上流暢運(yùn)行。
聯(lián)系客服