通道屏幕视频录制主要是利用Windows 系统的vfw32.lib 库,继承通道订阅类的功能,在vpChannel::EVENT_POST_DRAW 事件中完成帧数据的提取。
通道屏幕视频录制类的设计,第一步需要使用系统的较多功能,需要引入以下几个头文件:
#include <windows.h>
#include <windowsx.h>
#include <memory.h>
#include <wingdi.h>
#include <mmsystem.h>
#include <vfw.h>
#include <GL/gl.h>
并导入vfw32 库:
//Automatically link in vfw32.lib
#pragma comment(lib,"vfw32.lib")
#pragma message("Will automatically link with " "vfw32.lib")
第二步,需要定义较多的私有变量,用于处理视频的相关信息:
依次包含状态、帧数目、视频宽度、视频高度、图像存储指针、操作锁、视频文件名、视频流指针、压缩视频流指针、视频流文字、BITMAP 信息头。这些信息在类的构造函数中都进行了初始化,某些指针变量在析构函数中进行了处理。(www.daowen.com)
第三步,在配置函数中配置相关功能:
int configure(const char* fileName,int fpsRate,bool compressionDialog,int winWidth,int winHeight);
所带5个函数依次为视频文件名、帧率、压缩与否对话框、宽度和高度,函数功能主要是调用 AVI 相关函数完成配置, AVIFileCreateStream 函数创建 AVI 视频流,AVIMakeCompressedStream 使用AVI 视频压缩流,AVIStreamSetFormat 设置视频流格式。
第四步,视频帧的抓取函数“captureFrame();”主要调用了glReadPixels 读取帧数据,使用AVIStreamWrite 把帧数据写入视频文件。
第五步,视频写入操作主要在下面这个事件响应函数中完成,其功能主要是锁定帧数据,抓取写入视频流,解锁,其代码如下:
具体代码如图9.7.1所示。
图9.7.1 通道屏幕视频录制功能设计
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。