您的位置:首页 > 其它

Ubuntu下安装FFmepg和SDL以及测试

2011-09-02 13:23 309 查看
我在安装时,把用户模式切换到了root,方便安装。

ubuntu下切换root模式:

sudo -s -H

1,FFmpeg的安装

a,下载源码

ffmpeg官网下载地址:http://www.ffmpeg.org/download.html

目前看到的最新版本为ffmpeg-0.7.1.tar.bz2(Peace)。

http://www.ffmpeg.org/releases/ffmpeg-0.7.1.tar.bz2

b, 在cd到/soft下新建目录 ffmpeg, 并将源码解压至该目录

sudo mkdir ffmpeg

更改权限: chmod 777 ffmpeg

tar xjvf ffmpeg-0.7.1.tar.bz2 .

cd ffmpeg/ffmpeg-0.7.1

c, 配置文件

./configure --prefix=/usr/local --enable-memalign-hack --enable-shared --disable-yasm --enable-swscale

d, make & make install

<Life is waiting....>

<So you can slow down to feel "The Terminal"by Tom Hanks>

e, 运行ffmpeg时报错:

ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory

解决方法:

编辑/etc/ld.so.conf 在文件末行加入

/usr/local/lib

运行

ldffmpeg

没有报错的话,ffmpeg安装完毕。

ffmpeg -version 显示版本信息

ffmpeg version 0.7.1, Copyright (c) 2000-2011 the FFmpeg developers

built on Jul 27 2011 19:28:53 with gcc 4.4.3

configuration: --prefix=/usr/local --enable-memalign-hack --enable-shared --disable-yasm

libavutil 50. 43. 0 / 50. 43. 0

libavcodec 52.122. 0 / 52.122. 0

libavformat 52.110. 0 / 52.110. 0

libavdevice 52. 5. 0 / 52. 5. 0

libavfilter 1. 80. 0 / 1. 80. 0

libswscale 0. 14. 1 / 0. 14. 1

ffmpeg 0.7.1

libavutil 50. 43. 0 / 50. 43. 0

libavcodec 52.122. 0 / 52.122. 0

libavformat 52.110. 0 / 52.110. 0

libavdevice 52. 5. 0 / 52. 5. 0

libavfilter 1. 80. 0 / 1. 80. 0

libswscale 0. 14. 1 / 0. 14. 1

f , 拿tutorial01.c试刀

编译的时候,出现了以下的问题,这些问题已经有网友解决。再贴一次吧。

Q1出现“undefined reference to 'img_convert' ”错误

A1:原因在于ffmpeg在版本0.4.8之后改进了格式转换函数,将img_convert改进为sws_scale函数。

该函数以一个SwsContext结构作为缩放控制结构,该结构通过sws_getContext函数返回。

sws_getContext原型:

SwsContext *sws_getContext(int srcW, int srcH, enum PixelFormat srcFormat,
int dstW, int dstH, enum PixelFormat dstFormat, int flags,
SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param);

sws_scale原型:

int sws_scale(SwsContext *c, const uint8_t* const src[], const int srcStride[], int srcSliceY,
int srcSliceH, uint8_t* const dst[], const int dstStride[]);


在tutorial01.c中,将原文件修改为:

#include <swscale.h>
// other code
static struct SwsContext *img_convert_ctx;
//other code
img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,  pCodecCtx->pix_fmt,
pCodecCtx->width, pCodecCtx->height,  PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);
// other code
sws_scale(img_convert_ctx, (const uint8_t* const *)pFrame->data, pFrame->linesize, 0,
pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);
// other code


Q2:编译时出现“undefined reference to `sws_getContext'”错误。

A2:原因是gcc编译选项要添加swscale库.具体为:

gcc -o tutorial01 tutorial01.c -lavformat -lavcodec -lz -lswscale

2, SDL安装

a, 下载源码

SDL官网地址:http://www.libsdl.org/download-1.2.php

b, 安装

和安装ffmpeg一样,在soft目录下新建目录sdl,将源码包解压在该目录下

tar xvzf SDL-1.2.14.tar.gz

解压完毕后,进入安装目录,运行一下命令:

./configure

make

make install

OK,

运行 sdl-config --version

1.2.14

c, tutorial03.c验证

其他改变和tutorial02.c一样,其中将sws_scale函数改为

sws_scale(img_convert_ctx, (const uint8_t* const *)pFrame->data, pFrame->linesize, 0,
pCodecCtx->height, pict.data, pict.linesize);


Q: 编译tutorial04.c的时候,出现“undefined reference to `pstrcpy' "错误,

A: 新版本的ffmpeg将函数pstrcpy替换为了av_strlcpy。两个函数的原型分别为:

void pstrcpy(char *dst, size_t size, const char *src)

size_t av_strlcpy(char *dst, const char *src, size_t size)


3, FFMPEG的卸载
如果你找到了新的版本,那么,为了以后编译由于不同版本之间的差异带来的令人抓狂的报错,还是先卸载旧的版本吧。

a, apt-get remove ffmpeg

b, apt-get remove libavcodec52 libavdevice52 libavfilter0
libavformat52 libavutil49

这里由于不同机子安装了不同的库,可以根据实际情况作出修改。

或者手动删除相关的库文件以及头文件

a, /usr/local/lib

b, /usr/local/lnclude

<仅供参考>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: