2010-02-09 14:30:01| 分类: 嵌入式|字号 订阅
我们公司现在研发的DVR用的是TI的DM355平台,这项目做得断断续续的,中间还暂停了半年,到现在快两年了,还没搞出来,首先老板决策失败,其次TI的这个平台本身也有很多缺陷。其中最大的缺陷的就是录像文件录制好以后音频和视频是分开的,而且在windows下面的一般的播放器还播放不了,实际出来的产品肯定不能是这样,所以要把音视频打包成AVI文件,这几天在DAVINCI的DM355平台上移植FFMPEG,FFPLAY,参考了大量资料,编译的错误一大堆。现在把编译的过程说一下,供参考。
1、 解压ffmpeg-0.5.tar.bz2文件
2、 由于FFPLAY是利用SDL在解码文件,所以需要下载编译SDL。解压SDL-1.2.14。
3、 配置、编译SDL。
./configure --prefix=/usr/local --enable-shared --host=arm-linux CC=arm_v5t_le-gcc AR=arm_v5t_le-ar RANLIB=arm_v5t_le-ranlib --disable-arts --disable-nasm --disable-video-x11 --disable-nas --disable-joystick --disable-cdrom
make
make install
4、 配置编译ffmpeg
需要修改configure文件,向头文件和库文件搜索路径添加新的目录,将SDL那段代码改为:
SDL_CONFIG="/usr/local/bin/sdl-config"
sdl_cflags='-I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT'
temp_cflags $sdl_cflags
temp_extralibs '-L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -lpthread'
enable sdl
restore_flags
#end
echo "SDL_CFLAFS=-I/usr/lcoal/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT" >>config.mak
echo "SDL_LIBS=-L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -lpthread" >>config.mak
#end
改完以后,执行
./configure --prefix=/usr/local --enable-shared --enable-gpl --enable-nonfree --enable-pthreads --arch=armv5t --cross-prefix=arm_v5t_le- --enable-cross-compile --target-os=linux --disable-optimizations --cc=arm_v5t_le-gcc
make
make install
5、 查看ffmpeg和ffplay需要的库文件
arm_v5t_le-ldd ffmpeg
arm_v5t_le-ldd ffplay
执行结果如下:
bavdevice.so.52 => not found
libavformat.so.52 => not found
libavcodec.so.52 => not found
libavutil.so.49 => not found
libm.so.6 => /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/target/lib/tls/libm.so.6 (0xdead1000)
libSDL-1.2.so.0 => not found
libpthread.so.0 => /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/target/lib/tls/libpthread.so.0 (0xdead2000)
libc.so.6 => /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/target/lib/tls/libc.so.6 (0xdead3000)
/lib/ld-linux.so.3 => /opt/mv_pro_4.0.1/montavista/pro/devkit/arm/v5t_le/target/lib/ld-linux.so.3 (0xdead4000)
将所需要的库文件拷贝到开发板的lib目录下。
libavformat.so.52 libavcodec.so.52 libavutil.so.49 libSDL-1.2.so.0在/usr/local/lib目录下。
6、 在开发板上运行ffplay以后,sdl会默认去找/dev/fb0的framebuffer设备,而mvlinux上的framebuffer设备是/dev/fb/0,可以建立一个符号链接,ln /dev/fb/0 /dev/fb0。这样ffplay就可以播放音视频文件了。
7、 ffmpeg、ffplay移植完成。