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

 

                            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下直接读取缓冲区 可以提高实时性,在实时语音视频中用到。

时间: 2024-10-08 18:16:39

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

【FFMpeg视频开发与应用基础】三、调用FFmpeg SDK对H.264格式的视频压缩码流进行解码

<FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK>视频教程已经在"CSDN学院"上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 经过了上篇调用FFMpeg SDK对视频进行编码的过程之后,我们可以比较容易地理解本篇的内容,即上一篇的逆过程--将H.264格式的裸码流解码为像素格式的图像信息. 1.FFMpeg视频

【H.264/AVC视频编解码技术详解】十二、解析H.264码流的宏块结构(上)

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中Slice Body--宏块结构(M

【H.264/AVC视频编解码技术详解】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流

【H.264/AVC视频编解码技术详解】 九、序列参数集Sequence Paramater Set(SPS)解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 在H.264标准协议中规定了多种不同的NAL U

【H.264/AVC视频编解码技术详解】 十、图像参数集Picture Paramater Set(PPS)解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 除了序列参数集SPS之外,H.264中另一重要的

【H.264/AVC视频编解码技术详解】十一、H.264的Slice Header解析

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 H.264中的条带(Slice) 1. Slic

【FFMpeg视频开发与应用基础】二、调用FFmpeg SDK对YUV视频序列进行编码

<FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK>视频教程已经在"CSDN学院"上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 视频由像素格式编码为码流格式是FFMpeg的一项基本功能.通常,视频编码器的输入视频通常为原始的图像像素值,输出格式为符合某种格式规定的二进制码流. 1.FFMpeg进行视频编码所需要的

【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 本节视频免费 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与

WCF分布式开发必备知识(2):.Net Remoting

上一节我们学习了网络分布式编程中的MSMQ消息队列技术.本节我们将学习分布式编程的另外一个重要的技术.Net Remoting,文章的结构还是先讨论基本概念,再来探讨具体的技术实现,希望能和大家一起交流学习. .Net Remoting技术,我们可以将其看作是一种分布式处理方式.作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程序的通信.从微软的产品角度来看,可以说Remoting就是分布式组件DCOM的一种升级,它