VFW.h宏解析 (详细的参考VFW.H)   
                                               作者:岳东卫   转载请写明转载出处......
                                        
VFW库是微软推出的支持视频处理的一组库,我们利用VFW可以开发出各种各样的视频处理程序 。 开发实时语音视频系统的时候 一般用TCP/IP传输控制命令 一般用UDP传输数据   
下面都是一些宏操作 ,对应的消息自己MSDN去 。。。。
capCreateCaptureWindow   //这个宏如果我们在一个窗体上显示视频那么调用    其实是发送了一个响应的消息我们可以在MSDN中查到  
capDriverConnect(hw,0)  ;  //链接到指定设备驱动 将采集窗口和摄像头驱动相连接   这个驱动列表可以枚举出来通过 capGetDriverDescription 函数  ,默认就一个摄像头所因为0 
capPreviewRate( hw, 55 );  //设置Preview模式的显示速率 设置预览模式
capPreview( hw, TRUE );   //进入预览模式系统捕获视频并且显示在捕获窗口之上    capOverlay模式是覆盖模式需要特定硬件支持
以上操作就在一个窗体上面显示出来了视频摄像头的窗口 注意 hw是父窗体 下面是对视频流的具体操作

BOOL capDriverDisconnect(hwnd) ;//断开设备驱动和捕获窗体的联系  也就是断开视频连接 
BOOL capCaptureSequence(hwnd );//将捕获到的视频存入到驱动器目录下的 CAPTURE.avi中   
BOOL capCaptureAbort( hwnd  );//放弃当前视频捕获的操作 在录制视频之后必须调用这个关闭 视频否则AVI文件将不能播放 
BOOL capCaptureStop(hwnd );  //停止当前视频捕获操纵
BOOL capCaptureSequenceNoFile( hwnd );  //这个宏捕获的视频流并不存储在文件中  我们可以注册回调函数来处理捕获到的数据,每一帧数据被捕获的时候都会调用capSetCallbackOnVideoStream设置的回调函数
我们在基于网络的视频语音通信中,可以对其进行缓冲 当缓冲区满了直接发送给对方。   这个减去了中间存储在磁盘上的环节

BOOL capGrabFrame(hwnd  );//捕获单帧并且 从捕获驱动并且显示在捕获窗体上  。 我们调用一次便捕获一次  并且显示一次
capGetDriverDescription  可以枚举系统的摄像头 设备
BOOL capDlgVideoSource(hwnd); //打开一个视频设置 用户可以设置视频  就像QQ中 设置视频一样 
BOOL capDlgVideoFormat(hwnd  ); //打开视频格式设置的对话框 用户可以设置 视频的分辨率等等
BOOL capFileSaveDIB( hwnd,  szName );  //捕获当前帧到一张 bmp位图可以使其他指定的格式  可以捕获视频图像  
BOOL capGetStatus( hwnd,  s, wSize  );//获得一个捕获窗体的信息   CAPSTATUS 结构体 具体应用时候 看MSDN
capCaptureGetSetup();//获得视频流的一个设置 。具体MSDN  比如我们可以fCaptureAudio  修改为FALSE取消声音的录制
capCaptureSetSetup() ;//设置一个视频流的设置信息 具体MSDN CAPTUREPARMS  捕获结构体    具体应用时可以设置捕获帧的时间间隔
capFileSetCaptureFile   这个宏是改变默认的捕获视频的存储路径  具体去看vfw.h的消息  实际上是发送消息的 这个消息指定文件名;它不实际创建文件,分配空间,也不能打开文件   应该在不惑之前设置 
(capFileFGetCaptureFile  可以获得当前设置的 捕获视频文件的 存储路径 
capFileSaveAs 果用户想保存捕获数据,把数据存到另外一个文件中。可以使用WM_CAP_FILE_SAVEAS消息(capFileSaveAs宏) 。这个消息不能改变捕获文件的名称和内容。你必须去指定新建的文件名,因为捕获文件将保留原来的文件名称。
使用WM_CAP_SEUENCE_NOFILE消息(capCaptureSequenceNoFile宏),可以不向磁盘文件写入数据。该消息仅在配合回调函数时有用,它允许你的应用程序直接使用音视频数据。例如,在视频会议中,应用程序使用该消息区获得视频流。回调函数将传输捕获的图像传送给远程的计算机。  
BOOL capDlgVideoCompression(hwnd  ); //让用户选择压缩程序的一个对话框  compressor
BOOL capSetUserData(hwnd,  lUser  );  //关联一个标识到捕获窗口
capDriverGetName 获得驱动器的名字
capDriverGetVersion获得驱动器的版本
capDriverGetCaps  这个宏填充CAPDRIVERCAPS结构体 返回设备驱动的性能      
DWORD capGetVideoFormat(hwnd, psVideoFormat,wSize); //可以获得当前捕获窗体的一个捕获位图的位图信息 填充 BITMAPINFO结构体
capSetVideoFormat设置视频格式
capGetAudioFormat获得音频格式信息
capSetAudioFormat设置音频格式信息
capGrabFrame 手动捕获帧  调用一次捕获一次 图像,预览模式是自动捕获 帧  .捕获操作会触发capSetCallbackOnFrame设置的回调函数 实际上只要是捕获视频 都会调用这个 回调函数
capGetMCIDeviceName获得当前使用的设备
capSetMCIDeviceName设置当期要使用的设备

捕获过程中用到的回调函数    关闭直接设置NULL
capSetCallbackOnError     //当发生错误的时候 系统调用这个函数设置的回调函数 处理   在程序的一开始 我们就应该设置错误处理回调函数 
capSetCallbackOnStatus   //当捕获窗口发生改变的时候 会调用这个函数设置的回调函数  
capSetCallbackOnVideoStream //当捕获到视频流的时候 调用这个函数设置的回调函数   当视频文件写入到磁盘之前调用 capCaptureSequence 才会调用
capSetCallbackOnWaveStream //当捕获到音频流的时候调用这个函数 设置的回调函数  当视频文件写入到磁盘之前调用  capCaptureSequence才会调用
capSetCallbackOnYield   //可以有选择的设置产量回调函数  当捕获到每一帧的时候 至少调用一次  MSDN上的介绍 似乎不大重要。。。详细MSDN
capSetCallbackOnFrame//没获得一帧一帧的数据 就会调用我们设置的回调函数格式和上面capSetCallbackOnWaveStream 都一样  其实 这个回调函数就是数据的入口   ,每次当capGrabFrameNoStop 或者capGrabFrame,
或者我们直接将捕获窗体和视频连接的时候 捕获到一帧图像都会进入这个 回调函数进行处理,回调函数的VIDEOHDR 参数就是 包含的 每张图像的数据缓冲

用到的结构体
在利用AVICap编程时,应该熟悉与视频捕获相关的结构,下面对常用的四个结构作一简要介绍,对于前三个结构都有对应的函数来设置和获得结构包含的信息:
  (1)CAPSTATUS:定义了捕获窗口的当前状态,如图像的宽、高等;   capGetStatus 宏用到获取捕获窗口的状态
  (2)CAPDRIVERCAPS:定义了捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;    capDriverGetCaps 使用  获得驱动设备性能
  (3)CAPTUREPARMS:包含控制视频流捕获过程的参数,如捕获帧频、指定键盘或鼠标键以终止捕获、捕获时间限制等;      capCaptureGetSetup    capCaptureSetSetup 宏使用
  (4)VIDEOHDR:定义了视频数据块的头信息,在编写回调函数时常用到其数据成员lpData(指向数据缓存的指针)和dwBufferLength(数据缓存的大小)。 capVideoStreamCallback  视频流回调方法中用到                 
      由 capSetCallbackOnVideoStream注册 ,在 capCaptureSequenceNoFile下直接读取缓冲区 可以提高实时性,在实时语音视频中用到。

VFW.h宏解析 (视频开发必备) ----------纠结了2天憋出来的东西相关推荐

  1. 音视频开发必备基本基础知识(1)

    最近收到了朋友邮寄过来的一本书,刚拿回来就趁机学习了一波音视频开发的知识.现就音视频开发的一些基本知识做一个总结.如下: 1.视频编码 通过特定的压缩技术,将视频格式文件转换成另一种视频格式文件的方法 ...

  2. MySQL:指定索引+事务+存储引擎的配置 开发必备 天呐!为什么会有索引这种东西

    来来来,我告诉你为什么要有索引 索引的概念 索引的作用 索引的分类 普通索引创建的三种方式与删除 创建唯一索引与创建的三种方式 主键索引与创建的两种方式 组合索引 全文索引 创建索引的原则依据 事务的 ...

  3. 【秒懂音视频开发】23_H.264编码

    本文主要介绍一种非常流行的视频编码:H.264. 计算一下:10秒钟1080p(1920x1080).30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 ...

  4. 【秒懂音视频开发】07_音频录制01_命令行

    命令简介 FFmpeg的bin目录中提供了3个命令(可执行程序),可以直接在命令行上使用. 3个命令 ffmpeg ffmpeg的主要作用:对音视频进行编解码. # 将MP3文件转成WAV文件 ffm ...

  5. 音视频开发系列(62)基于FFmpeg实现简单的视频解码器

    一.FFmpeg解码过程流程图和关键的数据结构 FFmpeg解码涉及的知识点比较多,很容易被函数和结构体搞定不知所错,我们先从整体上对解码流程有个认知,画了张解码流程图,如下 1.1 解码流程如下 a ...

  6. Android音视频开发---0基础入门准备篇

    文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...

  7. 谈谈对Android音视频开发的探究

    ​ 在日常生活中,视频类应用占据了我们越来越多的时间,各大公司也纷纷杀入这个战场,不管是抖音.快手等短视频类型,虎牙.斗鱼等直播类型,腾讯视频.爱奇艺.优酷等长视频类型,还是Vue.美拍等视频编辑美颜 ...

  8. 【秒懂音视频开发】15_AAC编码实战

    本文将分别通过命令行.编程2种方式进行AAC编码实战,使用的编码库是libfdk_aac. 要求 fdk-aac对输入的PCM数据是有参数要求的,如果参数不对,就会出现以下错误: [libfdk_aa ...

  9. 微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等

    内容概述 腾讯多媒体内核中心高级研究员时永方接受了LiveVideoStack的邮件采访,谈及了个人成长中的关键时刻,学习多媒体开发的三点核心,以及在5G和高清时代下,微信多媒体团队面临的挑战. Q: ...

最新文章

  1. 让资源管理器不显示最近常用文件夹
  2. linux查看节点使用进程后退出,Linux通过端口号查看使用进程-结束进程
  3. python怎么写文件-来看文件处理Python怎么写?
  4. 查询条件中含有加号_excel中最全的多条件查询方法都在这里了
  5. mysql查询时间类型c语言处理_资讯类app用户热度及资讯类型分析-Mysql进行数据预处理...
  6. Mac升级自带ruby方法
  7. Kubernetes里的ConfigMap的用途
  8. cobar mysql cluster_Cobar使用文档(可用作MySQL大型集群解决方案)
  9. BDB (Berkeley DB)简要数据库(转载)
  10. 马化腾最新演讲谈机遇:让所有企业在云端利用AI处理大数据
  11. php加密解密函数,PHP加密解密的函数
  12. 48 页小米用户画像实战PPT
  13. Office 如何打印A4不干胶标签纸
  14. 有效的数独 python_LeetCode 36. 有效的数独 | Python
  15. mysql无法连接locahost_完美解决MySQL通过localhost无法连接数据库的问题
  16. 使用所学的javaWeb知识,实现一个小型的记账管理系统
  17. 淘宝,搜狐,ip-api 免费IP地址查询API接口
  18. bat putty shell 连携
  19. 图片转icon图标并在项目中引用
  20. linux下使用man命令查看系统调用

热门文章

  1. 简易二极管收音机制作方法
  2. mysql mysqldump导出数据
  3. Linux中命令行获得帮助及输入输出管理
  4. lora和lorawan无线技术在物联网的应用
  5. fc安卓模拟器_fc模拟器pc版下载-fc模拟器pc版高级兼容版免费下载
  6. win10桌面突然显示未激活
  7. 小米潘多拉路由器添加节点_腾讯网游加速器联手小米路由器,共创全场景游戏加速体验!...
  8. python编程的文件后缀是什么意思_python文件的后缀名是什么
  9. 二维码在微信中无法保存的解决办法
  10. 安装配有NVIDIA GRID K2服务器系统不能正常安装和其他的GPU卡如K20x不能正常安装原厂驱动