资源描述:
《VFW音视频采集播放压缩和存储》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、使用vfw进行进行音视频采集、播放和存储(总结)使用VFW在windows下编程控制摄像头Microsoft®VideoforWindows®(VFW)提供的函数可以让应用程序去处理视频数据。VFW在16位Windows的时候就被引入了。它的许多重要功能已经被DirectX取代了。要获得更多的信息,你可以参考DirectX的文档。下面讲介绍VFW的视频捕获:3.视频捕获你可以使用windows的AVICap类轻松地完成视频捕获。AVICap提供给应用程序一个简单的、基于消息的接口去访问视频设备和录音设备,并且可以控制处理视频流捕获。3
2、.1关于视频捕获AVICap支持实是视频流捕获和实时单帧图像捕获。另外,AVICap提供了对视频源的控制(MCI媒体控制接口设备),因此使用者可以通过应用程序控制一个视频源开始和结束的位置,并且可以加大对帧捕获的控制。你使用AVICap类可以完成如下的任务:l 捕获声音和视频,并将他们写入到一个AVI文件中。l 动态连接和断开视频和音频的输入设备。l 使用覆盖或预览的方法去显示当前的视频信号。l 指定一个文件用于捕获,并且把这个捕获文件的内容拷贝给另一个文件。l 设
3、定捕获图像速度(好多帧)。l 显示对话框用于控制视频源和格式。l 创建、保存、加载调色板。l 拷贝图像和调色板到剪贴板中。l 捕获并把图像作为一个DIB位图保存。3.1.1视频捕获:最简单的方法 视频捕获将数字化一个视频流和音频数据,并且将他们保存在硬盘和其他存储设备上。这里将描述如何在应用程序中简单地应用视频捕获,它通过三句代码实现。它还介绍了如何通过发送消息给视频捕获窗口来结束或中断一个视频会话。AVICap捕获窗口可以把捕获的音视频信息写入一个AVI文件中。你的应用程序可以
4、自由地处理这个AVI文件、管理缓存区的音视频数据、还可以在底层访问音视频设备的驱动器。AVICap为应用程序提供了一个灵活的接口。你可以使用下面的代码,在你的应用程序中加入视频捕获: SendMessage函数HWndC = capCreateCaptureWindow("MyOwnCaptureWindow", WS_CHILD
5、WS_VISIBLE , 0, 0, 160, 120, hwndParent, nID);SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0
6、L);SendMessage (hWndC, WM_CAP_SEQUENCE, 0, 0L);宏接口同样有用,你可以选择是使用宏接口还是SendMessage函数来实现上面的功能,不过宏接口可以让你的代码更加容易理解。下面就使用了宏接口。 HWndC = capCreateCaptureWindow("MyOwnCaptureWindow", WS_CHILD
7、WS_VISIBLE, 0, 0, 160, 120, hwndParent, nID);capDriverConnect (hWndC, 0); //宏接口capCa
8、ptureSequence (hWndC); //宏接口 你的应用程序创建AVICap捕获窗口,并和视频设备建立连接后。你创建的这个捕获窗口就准备捕获数据了。这时,你可以通过发送WM_CAP_SEQUENCE消息(或capCaptureSequence宏)开始对数据进行捕获。 WM_CAP_SEQUENCE将使用默认设置,开始对视频和音频进行捕获,并把数据放在一个CAPTURE.AVI的文件中,捕获动作将一直持续,除非有下面的事件发生:l 用户按了ESC键或者鼠标的按钮。l 你的应用程序停止或者退出了
9、捕获操作。l 磁盘写满了。在应用程序中,你可以通过发送WM_CAP_STOP命令(或capCaptureStop)给捕获窗口,让它停止向文件写数据。你还可以通过发送WM_CAP_ABORT命令(或capCaptureAbort)给捕获窗口,让它中断捕获操作。 3.1.2捕获基本设置 通过对定义在CAPTUREPARMS结构中的捕获参数进行修改,你可以完成:l 改变捕获的帧频律(帧/秒);l 指定用键盘或鼠标去结束一个捕获会话;l 为一个捕获会话指定时间周期;捕获的帧频率捕获的帧频
10、率表示在一个捕获会话中,每秒要捕获多少帧。你通过WM_CAP_GET_SEQUENCE_SETUP消息(capCaptureGetSetup宏)可以得到当前捕获的帧频率。当前的帧频率被保存在CAPTUREPARMS结构的