加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用ffmpeg进行摄像头捕获

(2011-03-24 20:49:28)
标签:

杂谈

分类: ffmpeg

文章《Qt/Linux 下的摄像头捕获(Video4Linux2)》(以下简称《QT》中,我得到了很多读者的支持,为了回报大家以及开源社区,本文将叙述用ffmpeg进行摄像头捕获的方法。

有人很奇怪,ffmpeg不是用作解码、编码器的吗?怎么跟视频捕获扯上关系了?可以说,现在的ffmpeg,是一个强悍的多媒体库,在《QT》一文我阐述的获得摄像头数据的方法,仅为Linux专用,而且仅是video4linux2接口(当然可以通过v4l2-compact兼容层访问v4l1设备),另外又没有实现图像格式转换,确实非常的不好用。在这里,ffmpeg有以下优点:

  • 支持几乎所有图像格式的转换,内置哦;
  • 可以支持video4linux2,video4linux, vfw (windows下的哦)的视频采集;
  • 还可以进行声音等的采集



当然,有一个缺点,就是其授权是GPLv2的(似乎现在可以升级到GPLv3了,但鄙人不是太明白v3和v2的区别),这对商业应用有所限制哦(话说腾讯因为QQ影音“非法”使用ffmpeg库而被加入Hall of shame了吗?哈哈)。

言归正传,为了更清楚地了解这个过程,读者最好先阅读有关ffmpeg的资料。本站的《使用ffmpeg进行视频解码以及图像转换》(以下简称《ffmpeg》,也是比较好的入门。本文以video4linux2为例,介绍其使用方法。

1、初始化

这是所有ffmpeg程序在程序初始化的时候做的(仅做一次),因为video4linux2是属于avdevice的范畴,所以需要额外地初始化一下:

1
2
3
4
5
6
7
8
9
10
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
 
int main () {
    ...
    av_register_all ();
    avdevice_register_all();
    ...
}

这个简单,就不解释了。

2、前期准备

按照《ffmpeg》一文中所说的,摄像头设备被当成了一个“文件”,其中只包含了视频流,但是我们同样可以用同一套方法对它解释。首先是打开设备,然后检查里面所支持的视频编码格式,然后设置解码参数,打开解码器,开始解码,得到一帧数据后转换,最后就得到你想要的格式。例如给QT使用的RGB24 http://blog.simophin.net/wp-includes/images/smilies/icon_smile.gif

你需要准备 AVFormatContext, AVCodecContext, AVCodec, SwsContext 等变量以便后续操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
AVFormatContext *fmtCtx = NULL;
AVFormatParameter inputFmtParameter;
AVCodecContext *decodeCtx;
AVCodec *decoder;
 

AVInputFormat *inputFmt = av_find_input_format ("video4linux2"); 
if (inputFmt == NULL) {
  
}
 

memset ( &inputFmtParameter, 0, sizeof(inputFmtParameter));
inputFmtParameter.height = 240;
inputFmtParameter.width  = 320;
 

 
if (av_open_input_file ( &fmtCtx, "/dev/video0", inputFmt,
               sizeof(inputFmtParameter),&inputFmtParameter) < 0 ){
  
}

3、What’s next?

本打算再写一遍,但是我想《ffmpeg》一文中,其实已经写得非常清楚了,在以上的步骤完成后,就可以像《ffmpeg》一文中处理一般文件的情况去处理摄像头数据了!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有