本文讲解使用ffmpeg从USB摄像头中采集一帧数据并写入文件保存,测试平台使用全志A20平台,其他平台修改交叉工具链即可移植。开发环境使用eclipse+CDT。交叉工具链使用arm-Linux-gcc4.4版本。

ffmpeg库的移植和编译请参考博客http://blog.csdn.net/smilefyx/article/details/32714743,开发板usb摄像头支持配置请参照博客http://blog.csdn.net/smilefyx/article/details/29574783。转载请声明。

1、工程建立

使用eclipse建立一个空的C++工程,工程目录请参照http://blog.csdn.net/smilefyx/article/details/32714743博文。工程建立后在编译选项中加入-D__STDC_CONSTANT_MACROS,否则会报一个错,可以自己尝试。

2、编写源代码

打开刚才创建工程时创建的avcodec.cpp文件,编写测试代码,本文测试代码如下,代码比较简单,没做相应的错误检测等操作:

  1. /*
  2. *FileName:avcodec.cpp
  3. *Author:yingxianFei
  4. *Description:capture one frame data from usb camera and save into file named out.yuv .
  5. **/
  6. #include <iostream>
  7. using namespace std;
  8. extern "C" {
  9. #include <math.h>
  10. #include <libavutil/opt.h>
  11. #include <libavcodec/avcodec.h>
  12. #include <libavutil/channel_layout.h>
  13. #include <libavutil/common.h>
  14. #include <libavutil/imgutils.h>
  15. #include <libavutil/mathematics.h>
  16. #include <libavutil/samplefmt.h>
  17. #include <libavformat/avformat.h>
  18. #include <libavdevice/avdevice.h>
  19. #include <libavutil/dict.h>
  20. };
  21. int main(int argc, char **argv) {
  22. int ret;
  23. AVFormatContext *fmtCtx = NULL;
  24. AVPacket pkt1, *pcaket = &pkt1;
  25. /*1、注册*/
  26. avcodec_register_all();
  27. avdevice_register_all();
  28. /*2、连接视频源*/
  29. AVInputFormat *inputFmt = av_find_input_format("video4linux2");
  30. if (NULL != inputFmt) {
  31. std::cout << "input device name:" << inputFmt->name << std::endl;
  32. } else {
  33. std::cout << "Null point!" << std::endl;
  34. }
  35. /*3、打开视频采集设备*/
  36. ret = avformat_open_input(&fmtCtx, "/dev/video0", inputFmt, NULL);
  37. if (0 == ret) {
  38. std::cout << "Open input device seccess!" << std::endl;
  39. }
  40. /*4、读取一帧数据,编码依据摄像头类型而定,我使用的摄像头输出的是yuv422格式*/
  41. av_read_frame(fmtCtx, pcaket);
  42. std::cout << "packet size:" << (pcaket->size) << std::endl;
  43. /*5、写入帧数据到文件*/
  44. FILE *fp = NULL;
  45. fp = fopen("out.yuv", "wb");
  46. if (NULL != fp) {
  47. //将数据写入文件
  48. fwrite(pcaket->data, 1, pcaket->size, fp);
  49. }
  50. //关闭文件
  51. fclose(fp);
  52. /*6、释放读取的帧数据*/
  53. av_free_packet(pcaket);
  54. /*7、关闭视频输入源*/
  55. avformat_close_input(&fmtCtx);
  56. return 0;
  57. }

3、编译测试

编译工程,将生成的源文件nfs到开发板上,运行可执行文件,成功后将保存一帧数据到out.yuv文件中。

使用Pyuv工具可以打开文件查看文件内容,打开时按照自己摄像头的参数进行选项配置,如本文测试效果如下:

http://blog.csdn.net/smilefyx/article/details/33728881

ffmpeg从USB摄像头采集一张原始图片(转)的更多相关文章

  1. 基于DirectShow和FFmpeg的USB摄像头监控软件-转

    第一个版本 ### 软件版本及实现功能 0.0.1 1. USB摄像头枚举和设备信息获取2. 实时视频观看3. 24小时不间断录像,录像文件支持暴风影音播放 ### 软件说明: 软件基于 Direct ...

  2. 【Xilinx-Petalinux学习】-06-OpenCV通过USB摄像头采集图像。

    占位, 实现USB摄像头的图像采集与保存

  3. QT学习之usb摄像头采集(Opencv+QT)[cvCapture,IplImage,QImage]

    参考自:http://blog.chinaunix.net/uid-23381466-id-3826748.html 将Opencv中的cvCaptureFromCAM不断获得摄像头采集到的图像数据, ...

  4. FFmpeg命令:几种常见场景下的FFmpeg命令(摄像头采集推流,桌面屏幕录制推流、转流,拉流等等)

    前提: 首先你得有FFmpeg(ffmpeg官网快捷通道:http://ffmpeg.org/) 再者,推流你得有个流媒体服务,个人测试用小水管:rtmp://eguid.cc:1935/rtmp/t ...

  5. dede调用文章内第一张原始图片(非缩略图)的实现方法

    第一步,修改include/extend.func.php文件,最下面插入函数,查询的是文章附加表,如需查询图片集什么的,改表名即可 //取原图地址 function GetFirstImg($arc ...

  6. 搭建USB摄像头转RTSP服务器的多种方法

    USB摄像头与网络摄像头相比,可选择范围广.种类多.成本低,但是实际使用时需要通过rtsp流来访问,起到直播的效果,因此在摄像头采集终端上构建rtsp流媒体服务器,将USB摄像头数据转化为rtsp,可 ...

  7. C# Activex调用USB摄像头--附带源码

    前言 最近在整理一些自己写过的东西,也算是重新熟悉一下并且优化一下吧. 需求:获取本地USB摄像头视频显示,并且获取图片数据给底层做人脸识别. 记得当时直接采用H5已经做好了,调试好了....结果放上 ...

  8. Linux下用FFMPEG采集usb摄像头到RTMP

    Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务   ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 ...

  9. 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】

    转自:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html 一直想把USB摄像头接到Zedboard上,搭建 ...

随机推荐

  1. Java获取未知类型对象的属性

    获取未知类型对象的属性通常有两种方式: 一是通过自定义注解的方式,通过获取被注解的属性从而获取属性的值,这种方式也是Spring参数注入的重要实现手段 二是通过反射获取属性的名称,通过属性名从而获取属 ...

  2. 重新学习MySQL数据库4:Mysql索引实现原理

    重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...

  3. 二十一 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存

    注意:数据保存的操作都是在pipelines.py文件里操作的 将数据保存为json文件 spider是一个信号检测 # -*- coding: utf-8 -*- # Define your ite ...

  4. S16课件

    Python之路,Day1 - Python基础1 介绍.基本语法.流程控制 Python之路,Day2 - Python基础2 列表.字典.集合 Python之路,Day3 - Python基础3  ...

  5. MySQL相关错误汇总

    Eroor 1 描述: 在启动mysql的时候出现如下问题:"ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' ...

  6. 由浅入深了解EventBus:(一)

    概述 由greenrobot织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架; EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件.线程通信,可以 ...

  7. SpringBoot全家桶

    前言 Spring简化了Java的开发,而SpringBoot简化了Spring.本文用SpringBoot采用分层的结构整合了filter,aspect,mybaits,logback,redis, ...

  8. L155

    Wireless Festival has been given permission to remain in London's Finsbury Park, provided performers ...

  9. About libcurl and cURL in PHP

    今天在学习php时遇到要调用curl 库函数对特定url字符串进行访问操作,需要自己写一个方法进行调用,之前在linux系统中也有用到cURL 命令行工具执行对相关资源的获取,在wiki上找到了如下的 ...

  10. Shell 命令行统计 apache 网站日志访问IP以及IP归属地

    Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...