精华内容
下载资源
问答
  • 视频采集

    千次阅读 2006-09-26 13:46:00
    还是要先看一下重要的数据结构struct videodev,这个自定义的数据结构描述了硬件如何采集视频信号,如何处理再传输到网络上的,由于篇幅,这里只列出重要的几项内容:struct videodev{ int fd; /*打开设备文件返回...
    还是要先看一下重要的数据结构struct videodev,这个自定义的数据结构描述了硬件如何采集视频信号,如何处理再传输到网络上的,由于篇幅,这里只列出重要的几项内容:
    struct videodev
    {
     int fd;                    /*打开设备文件返回的描述符*/
     char *videodevice ;
     struct video_mmap vmmap;                /*几个重要数据结构*/
     struct video_capability videocap;
     struct video_mbuf videombuf;
     struct video_picture videopict;
     struct video_window videowin;
     struct video_channel videochan;
     struct video_param videoparam; 

     unsigned char *pFramebuffer;                 /*内存影射后指向设备影射0地址指针*/

     unsigned char *ptframe[4];                   /*指向发送要发送到网络的数据指针数组*/
     int framelock[4];                            /*标示锁 0:可写入,1:不可写入*/

     pthread_mutex_t grabmutex;        /* 线程互斥锁*/

     int framesizeIn ;         /*frame*/
     int  formatIn;                                /*format of palette*/
     int bppIn;
     volatile int frame_cour;        /*标示正在传送的ptframe*/
     ..............
     }

    $数据的采集
    初始化 

          1.struct videodev *dev;
          2.将用户设定的format和depth写入dev->formatIn,bppIn中,bppIn的值有format值来决定;本 设计所使用的OV511芯片的摄像头,支持format = 15的格式,查一下videodev.h,15对应的是 VIDEO_PALETTE_YUV420P,对应的bppIn = 12;
          3.dev->fd = open (dev->videodevice, O_RDWR)),使用标准open函数打开设备;通过ioctl的参 数VIDIOCGCAP可以察看各项参数;
          4.通过VIDIOCGPICT获取struct video_picture参数,代码如下:
     ioctl (vd->fd, VIDIOCGPICT, &vd->videopict);
     printf ("VIDIOCGPICT brightnes=%d hue=%d color=%d contrast=%d whiteness=%d"
       "depth=%d palette=%d/n", dev->videopict.brightness,
       dev->videopict.hue, dev->videopict.colour, dev->videopict.contrast,
       dev->videopict.whiteness, dev->videopict.depth,
       dev->videopict.palette);
            5.修改struct video_picture中format和depth参数并保存设置:
     dev->videopict.palette = dev->formatIn;
       dev->videopict.depth = GetDepth (dev->formatIn);
       dev->bppIn = GetDepth (dev->formatIn);
       ioctl (dev->fd, VIDIOCSPICT, &dev->videopict);
       dev->framesizeIn = (dev->hdrwidth * dev->hdrheight * dev->bppIn) >> 3;
           6.memset (&(dev->videombuf), 0, sizeof (dev->videombuf)) 清空videombuf
           ioctl (dev->fd, VIDIOCGMBUF,&(dev->videombuf))  保存影射buffer准备采集,返回非0表示 设置成功默认采集第一次的数据放在buffer[0],下一次放在buffer[1];再一次buffer[0].....
           7.dev->pFramebuffer =
     (unsigned char *) mmap (0, dev->videombuf.size, PROT_READ | PROT_WRITE,
        MAP_SHARED, vd->fd, 0);
     mmap内存影射,影射区大小为videombuf.size,分了videombuf.frames块buffer,每块buffer大  小为videombuf.size/videombuf.frames,偏移量大小等于一块buffer的大小,pFramebuffer指  向内存影射区0地址;
          8.初始化时候采集数据填满2块buffer(本课题中videombuf.frames=2,硬件决定);
     for (f = 0; f < vd->videombuf.frames; f++)
     {
       vd->vmmap.frame = f;
       if (ioctl (vd->fd, VIDIOCMCAPTURE, &(vd->vmmap)))
         {
           perror ("cmcapture");
          }
     dev->vmmap.frame = 0;
     
    采集

          1.ioctl (dev->fd, VIDIOCSYNC,&dev->vmmap.frame),frame同步,察看dev->vmmap.frame是否已 经采集完成。
          2.处理此frame数据:首先察看framelock[]是否被占用,如果可用则调用压缩算法函数处理ptFramebuffer指向的数据,将处理后的数据保存到ptframebuffer[]中,在这个过程中必须保证为互斥操作,调用线程互斥锁。
          3.采集数据:ioctl (dev->fd, VIDIOCMCAPTURE, &(dev->vmmap)
     dev->vmmap.frame = (dev->vmmap.frame + 1) % dev->videombuf.frames;
           dev->frame_cour = (dev->frame_cour +1) % OUTFRMNUMB;
     更新标示。

     
    展开全文
  • OpenCv视频采集

    2009-11-26 15:08:56
    OpenCv视频采集OpenCv视频采集OpenCv视频采集OpenCv视频采集OpenCv视频采集OpenCv视频采集
  • 万能视频采集卡驱动

    2020-07-14 12:24:04
    视频采集卡万能驱动是针对市面上出售的监控视频采集卡而开发的一款驱动程序。视频采集卡万能驱动该驱动程序不但能够支持目前网络上大部分的采集卡,而且能够支持32位和64位win2000winxpvistawin7win8系统,以及支持...
  • DirectShow 视频采集

    2018-03-21 18:14:59
    视频采集模块主要完成的功能是枚举视频采集设备生产列表;枚举音频采集设备生成列表;枚举视频采集设备上支持的所有视频格式;枚举音频采集设备上支持的所有音频格式;调整采集设备输出图像的显示参数;实时保存采集...

        视频采集模块主要完成的功能是枚举视频采集设备生产列表;枚举音频采集设备生成列表;枚举视频采集设备上支持的所有视频格式;枚举音频采集设备上支持的所有音频格式;调整采集设备输出图像的显示参数;实时保存采集的视频文件。

     

    视频采集设备枚举

       DirectShow使用特殊的Filter对视频采集设备进行封装,WDM驱动模型的视频采集设备使用WDM Video CaptureFilter,VFW驱动模型的采集设备使用VFW CaptureFilter。只要视频采集设备正确安装,DirectShow就能把它封装成一个Filter,注册在特定目录下。

       系统中的硬件是不可预知的,通过系统枚举的方式枚举某个目录下的所有Filter,从枚举出的Filter选择要使用的Filter。视频采集设备注册在Video Capture Sources目录下,应用程序主要枚举该目录,就能直到系统中安装有多少个、以及何种类型的视频采集设备。DirectShow提供了一个专门的系统枚举组件(CLSID_SystemDeviceEnum),其枚举过程如下图所示:

        1)使用CoCreateInstance函数创建系统枚举器组件对象,并获得ICreateDevEnum接口;

        2)使用接口方法ICreateDevEnum::CreateClassEnumerator为指定的Filter注册类型目录创建一个枚举器(参数类型为CLSID_VideoInputDeviceCategory),并获得IEnumMoniker接口;

        3)使用IEnumMoniker::Next接口方法枚举指定类型目录下所有设备,每个设备上都实现了IMoniker接口;

        4)调用IMoniker::BindToStorage之后,可以访问设备标识的属性集,得到DispalyName、Freuendly name等;

        5)调用IMoniker::BindToObject可以将设备标识生成一个DirectShow Filter。

        随后调用IFilterGraph::AddFilter将之加入到Filter Graph中参与工作。

        音频采集设备的枚举过程与视频采集设备的枚举过程是一样的,不同点是音频采集注册的跟目录和视频采集设备的根目录不同。

     

    视频参数设置

        在视频预览或采集之前,需要设置视频参数。这些参数包括采集图像的大小,帧率,输出格式,图像显示的亮度、对比度、色调、饱和度等。对于WDM卡,可以通过IAMStreamConfig接口和IAMVideoProcAmp接口编程来实现。

        首先获得Preview Pin或者Capture Pin上的IAMStreamConfig接口 ,通过ICaptureGraphBuilder2::FindInterface设置视频参数。

       典型情况下,采集卡可以输出多个格式,如16位或32位的RGB格式、YUYV格式等。通过接口方法IAMStreamConfig::GetNumberOfCapabilities和IAMStreamConfig::GetStreamCaps枚举采集卡支持的输出格式。第一个函数返回Pin上支持的输出格式的数量,描述输出格式的数据结构的大小。IAMStreamConfig接口即可用于视频格式的配置,也可用于音频格式的配置。视频使用VIDEO_STREAM_CONFIG_CAPS数据结构,音频使用AUDIO_STREAM_CONFIG_CAPS数据结构,通过数据结构的大小判断使用的数据结构类型。

        同时,在采集过程中,需要调节获取当前图像的显示参数,如图像显示的亮度、色调、饱和度等。视频采集Filter通过IAMVideoProcAmp接口的Get方法获取当前使用的图像显示参数,Set方法设置图像的显示参数类型改变图像的亮度等显示信息。

     

    视频编码选择

       在视频采集过程中,选择一种对视频有效的编码很重要,编码质量不但高,且能满足视频采集实时的需要,通过对与个主要标准的介绍,综合分析:M-JPEG压缩率太小,而且对硬件的要求太高;H.26x系列,算法较成熟,而且有很多参数可以调整,能够适合多种情况,经过适当设置可以在算法复杂度和实时性要求上满足视频压缩技术项目要求;MPEG系统算法成熟度高,标准完整详细,尤其是其中的MPEG-4标准,采用了基于对象的方法,非常适合视频采集压缩技术项目中背景不变的视频流,并且在软件方面,XviD组织提供了完善的可运行的Filter组件,可以免费使用。

        在实时采集中,大部分项目压缩都是由硬件来完成,成本较高。综合系统的各个方面,最终选定了Xvid组织Filter实现视频的压缩。

     

    视频采集实现

        DirectShow框架下,所有功能的实现都是基于Filter的,单个Filter没有数据的流动,只有将各个功能的Filter连成一条链路,Filter Graph Manager统一管理,实现数据的流动,才能完成一定的功能。

        实现采集应用的Filter Graph比较复杂。DirectShow提供了辅助组件CaputerGraphBuilder简化了采集Filter Graph的创建,该组件暴露了ICaptureGraphBuilder2接口。接口上AllocCapFile方法设置采集文件的大小,ControlStream方法控制采集数据的每路流的开始时间与结束时间,控制各个输出Pin上的数据流的属性设置;CopyCaptureFile方法可以从采集的文件中复制一段保存成新的文件;RenderStream设置采集Filter的输出Pin,流类型,输出Pin的下一级Filter,以及流要压缩的类型;SetFilterGraph设置Filter Graph到Capture Graph Builder组件中;SetOutputFileName设置保存文件的路径与文件类型;FindInterface获得采集链路中的特定功能的Filter,设置数据流的压缩参数和流格式;GetFilterGraph方法获得Filter Graph接口指针。

        实现视频采集的流程图如下图所示:

        在流程图中,Capture Graph Builder组件初始化是将Filter Graph设置给Capture Graph Builder组件。在连接视频预览分支链路时,当采集卡Filter上有VP Pin时,连接Overlay Mixer2|Video Render;含有Preview Pin时,直接连接Video Render;而只有Capture Pin时,要插入一个Smart Tee Filter进行分路后,再连接到Video Render。在运行过程中,可以改变图像的显示参数,可以实时保存。

     

    热插拔的支持

        该系统实现了对音视频采集卡热插拔的支持。一个正在使用的采集卡脱离系统时,Filter Graph Manager会向应用程序发出一个EC_DEVICE_LOST事件;而当这个设备重新介入系统时,Filter Graph Manager会再次发出一个EC_DEVICE_LIST事件。这两次事件通过事件的第二个参数IParam2来区分;0表示设备脱离系统,1表示设备又重新接入系统。实际实现中,设备脱离珍惜爱重新接入后,采集卡Filter先前的状态不会保持下来。因此当获取到设备重新接入的事件,要重建Filter Graph。

        另外,当我们的应用程序正在运行时,一个全新的设备接入系统,DirectShow并不会发送EC_DEVICE_LOST事件,在实现中必须依赖窗口消息WM_DEVICEHANGE来做成正确的回应,实现热插拔的支持。

     

    视频采集与预览

        视频采集界面包括视频采集设备的选取,视频输出格式的选取,音频采集设备的选取,音频输入Pin(Channel)的选择音频输出格式的选取,视频预览界面,图像显示参数的设置,以及要保存的文件路径。

     

    参考:

    https://www.yuque.com/docs/share/4ee921de-2d2d-4a5d-a7a4-010c4a9ee54a

    展开全文
  • 快手指定用户视频采集下载是一款针对最近火热的快手短视频平台进行针对用户采集视频的软件,它可以帮你自动采集指定用户的所有视频,并且采集下载的快手视频都是无水印的。 快手指定用户视频采集下载 v1202 更新...
  • 快手热点视频采集

    2018-03-02 09:32:03
    自己写的快手热点视频采集工具,搞自媒体的人可以看看
  • 问题:我需要在MFC界面上同步显示视频采集卡采集到的视频,并且保存在本地。 采集卡安装好驱动后在设备管理器“声音、视频和游戏控制器”这一栏里可以看到驱动正常,说明这个采集卡应该是标准的。 但是采集卡厂家...
  • 多媒体视频处理工具FFmpeg有非常强大的功能[1]包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。 视频采集功能 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个...

    多媒体视频处理工具FFmpeg有非常强大的功能[1]包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

    视频采集功能

    FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。

    ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

    ffmpeg在Linux下的视频采集

    在Linux平台上,ffmpeg对V4L2的视频设备提高了很好的支持,如:

    ./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0-vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp

    以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集 QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为h263,输出格式为RTP,后面定义了IP地址及端口,将 该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器就可以实现直播了。

    ffmpeg在windows下的视频采集

    在windows下关于ffmpeg视频采集的资料非常少,但是ffmpeg还是支持windows下视频采集的。ffmpeg支持windows下video for windows(VFW)设备的视频采集,不过VFW设备已经过时,正在被WDM的视频设备所取代,但是ffmpeg还没有支持WDM的计划,不过好像有将WDM转为VFW的工具,因此ffmpeg还是可以在windows下进行视频采集的。

    展开全文
  • 直播的模式火了之后很多软件都会集成音视频相关需求,下边我们先来讲一下摄像头视频采集: 视频模块 相关技术:OpenGLPlayer+videoinput。 视频信息采集到之后通过OpenGLPlayer(继承自QOpenGLWidget)进行绘制渲染...

    直播的模式火了之后很多软件都会集成音视频相关需求,下边我们先来讲一下摄像头视频采集:
    视频模块
    相关技术:OpenGLPlayer+videoinput。
    视频信息采集到之后通过OpenGLPlayer(继承自QOpenGLWidget)进行绘制渲染。
    Videoinput:视频信息采集库(感兴趣实现原理的可以看一下源码,C++实现) 

    封装一个线程类,在线程中启动videoInput对象,实现视频的采集,具体实现如下:
    void run()
    {
        videoInput VI;
        int devideNumber = m_deviceName.toInt();

        VI.setIdealFramerate(devideNumber, 24);
        VI.setRequestedMediaSubType(m_pixelFormat);

        bool res = VI.setupDevice(devideNumber, m_w, m_h);
        if (!res) {
            xs_log_error("setup camera error.");
            return;
        }

        VI.setAutoReconnectOnFreeze(devideNumber, true, 240);

        int width     = VI.getWidth(devideNumber);
        int height     = VI.getHeight(devideNumber);
        int size    = VI.getSize(devideNumber);
        unsigned char * bgr = new unsigned char[size];
        QImage img(width, height, QImage::Format_RGB888);

        while (!m_stop) {
            //to get the data from the device first check if the data is new
            if(VI.isFrameNew(devideNumber)){
                VI.getPixels(devideNumber, bgr, true, false);    //fills pixels as a BGR (for openCV) unsigned char array - no flipping
                memcpy(img.bits(), bgr, size);
                //to do 每一帧视频数据绘制等
            }

            msleep(30);
        }

        VI.stopDevice(devideNumber);
    }

    展开全文
  • 视频采集

    2014-03-14 13:26:57
    视频采集视频采集卡(Video Capture card)也叫视频卡,是将模拟摄像机、录像机、LD视盘机、电视机输出的视频信号等输出的视频数据或者视频音频的混合数据输入电脑,并转换成电脑可辨别的数字数据,存储在电脑中,...
  • 视频聊天 【从头到脚】撸一个多人视频聊天 — 前端 WebRTC 实战(一) ...Vue实现视频采集 这个很不错, 有点像拍短视频 H5实现摄像头的视频流数据的捕获 h5+实现手机端的录音,拍照,录像 视频采集 ...
  • VC++视频采集资料

    热门讨论 2013-09-28 17:39:55
    VC++视频采集资料,详细文档见http://blog.csdn.net/ma451152002/article/details/12138343
  • HI3518摄像头视频采集

    热门讨论 2013-11-18 15:42:59
    HI3518摄像头视频采集,可用VLC作为客服端登陆,显示摄像头采集视频,把程序放到3518SDK MPP sample 直接MAKE编译,VLC播放路径为rtsp://摄像头ip
  • 选购采集卡的目的不外乎就是能更方便的更有效的监看,安防领域(视频采集卡),各种各样的DVR卡琳琅满目,让很多的工程商和消费者特别是刚入行者无从下手,您应该需要关注一下几个大区。  视频采集卡的主要功能和...
  • WebRTC之视频采集

    2020-05-17 23:23:41
    基于WebRTC的实时音视频会议中对于视频处理流水,第一级就是视频采集,视频内容可以摄像头、屏幕和视频文件,视频来源的操作系统可以是Linux、Windows、Mac,IOS以及Android,不同的平台由不同的公司开发设计,因而...
  • 腾讯视频采集软件

    2019-07-06 19:34:04
    腾讯视频采集软件已更新,默认非vip的视频,高清,无水印,可以按关键词和作者主页采集,需要的可以联系我。 联系方式vx:yish997
  • 自媒体短视频采集工具: 易撰短视频采集工具,可以采集各大平台的视频还有爆文,你可以根据平台、发布时间、发领域等等选项来进行素材的选择,选择了合适的素材之后也可以批量进行下载,易撰素材采集工具,不仅可以...
  • 作为iOS音视频开发之视频开发的第一篇,本文介绍iOS视频采集的相关概念及视频采集的工作原理,后续将对采集后的视频数据进行硬编码、硬解码、播放等流程进行分析讲解。 基本概念 AVCaptureSession 苹果为了管理从...
  • 快手指定用户视频采集下载是一款针对最近火热的快手短视频平台进行针对用户采集视频的软件,它可以帮你自动采集指定用户的所有视频,并且采集下载的快手视频都是无水印的。 快手指定用户视频采集下载 v1202 更新...
  • 优酷视频采集网站源码可以自动采集优酷视频,免维护,采用THINKPHP框架采用开发,采用MCV结构布局,自动采集优酷视频资源,自动更新免维护。 目前包括分类有电视剧、电影、综艺、动漫、教育、纪实和电影。 程序...
  • 该资源是基于FFMpeg进行的二次开发,该压缩包包含两部分:视频采集类、视频格式转换类,视频采集类根据用户传入的设备名字、帧率、视频大小进行视频采集,而采集类中包含一个视频转换类,视频转换类负责将摄像头采集...
  • MediaFoundation视频采集

    2020-05-19 16:18:45
    概述:利用MediaFoundation实现视频采集,利用同步方式实现视频数据的读取。 MediaFoundation介绍: MediaFoundation是DirectShow的替代,vist及以上才能支持,也就是说xp不支持,且不同的系统某些功能支持情况也...
  • 用AVFoundation做音视频采集,首先记住一张图。 这张图完全展示了AVFoundation 是如何做音视频采集的。 1.首先创建一个AVCAaptureSeesion对象。 2.获取输入设备,输入设备指的是摄像机和麦克风。 获取输入...
  • 视频采集 via Media Foundation

    千次阅读 2019-02-13 14:07:08
    视频采集 via Media FoundationMedia Foundation 简介Media Foundation 采集视频采集流程图MF 采集视频代码MMDeviceHelper::enumVidCapDevices 函数CMFCapture::startCapture 函数CMFCapture::_configVideoCapture ...
  • Android视频采集+RTSP完整代码

    千次下载 热门讨论 2015-01-15 13:34:09
    Android视频采集+RTSP完整代码
  • webrtc视频采集模块

    2017-05-27 17:37:49
    webkit视频采集流程webrtc中平台相关视频采集模块是在video_capture_module_internal_impl中 window下采用directshow采集摄像头数据 主要流程图如下: 其中CaptureSinkFilter为过滤模块,主要是为了将...
  • v4l2视频采集与传输

    2013-05-12 19:34:21
    视频采集与传输,利用v4l2采集视频,H264编解码视频,UDP视频传输
  • 由于篇幅较大,视频采集和音频采集分成两篇博文,这里先分析视频采集流程。分析的时候先分析WebRTC原生的视频采集流程,再捎带提一下Chromium对WebRTC视频采集的适配,这样能更好地理解WebRTC的接口设计。 1. ...
  • SharpCapture是一款音视频数据采集类库。它完全采用C#语言开发,基于DirectShow技术实现摄像头帧画面采集、屏幕录制、声卡采集、麦克风采集、混音等诸多强大功能为一体,且不依赖任何其他第三方组件。通过调用它,您...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,811
精华内容 5,524
关键字:

视频采集