关于视频采集的一些说明

在windows中,提供了一整套视频采集函数,要做一个视频采集软件,先要创建一个采集窗口
hCapWnd = capCreateCaptureWindow((LPSTR)"Capture Window",
WS_CHILD | WS_VISIBLE,
        15, 129, VideoW, VideoH,
       m_hWnd, (int) 0) ;

采集窗口的大小一般与摄像头有关,然后指定回调函数,这个函数是用来接收采集的数据的,

FARPROC fpVideoCallback = MakeProcInstance((FARPROC)VideoCallbackProc, m_hInstance);
        capSetCallbackOnVideoStream(hCapWnd, fpVideoCallback);
if(!capDriverConnect(hCapWnd, 0))
MessageBox("Error!  Not found video card!");

设置视频格式。
ZeroMemory(&m_biInput, sizeof(BITMAPINFO));
m_biInput.bmiHeader.biSize = sizeof(BITMAPINFO);
m_biInput.bmiHeader.biWidth = VideoW;
m_biInput.bmiHeader.biHeight = VideoH;
m_biInput.bmiHeader.biPlanes = 1;
m_biInput.bmiHeader.biBitCount = 24;
m_biInput.bmiHeader.biCompression = BI_RGB;
m_biInput.bmiHeader.biSizeImage = VideoW * VideoH * m_biInput.bmiHeader.biBitCount / 8;
m_biInput.bmiHeader.biXPelsPerMeter = 0;
m_biInput.bmiHeader.biYPelsPerMeter = 0;
m_biInput.bmiHeader.biClrUsed = 0;
m_biInput.bmiHeader.biClrImportant = 0;
capSetVideoFormat(hCapWnd, &m_biInput, sizeof(m_biInput));

设置其它一些参数,如帧速率等。
CAPTUREPARMS   CapParam;
capCaptureGetSetup(hCapWnd, &CapParam, sizeof(CapParam));
CapParam.fAbortLeftMouse = FALSE;
CapParam.fAbortRightMouse = FALSE;
CapParam.fYield = TRUE;
CapParam.dwRequestMicroSecPerFrame = 1000000/25;   //25 FPS
capCaptureSetSetup(hCapWnd, &CapParam, sizeof(CapParam));
capOverlay(hCapWnd, TRUE);

开始视频采集
time1 = GetTickCount();
capCaptureSequenceNoFile(hCapWnd);

停止视频采集
capCaptureStop(hCapWnd);

视频采集回调函数

LRESULT FAR PASCAL VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
//lpVHdr就是一帧图象的数据
char s[120];
wsprintf(s, "%ld", FrameNo++);
SetDlgItemText(hMainWnd, IDC_CAPFRAME, s);

if(fpCode)
{
memcpy(EncodeSrc, lpVHdr->lpData, lpVHdr->dwBytesUsed);
//MP4压缩
int length = EncEncode(EncodeSrc, EncodeDest);
//写AVI文件
fwrite(&length, sizeof(int), 1, fpCode);
fwrite(EncodeDest, length, 1, fpCode);

time2 = GetTickCount();
WORD dTime = WORD(time2-time1);
fwrite(&dTime, sizeof(WORD), 1, fpCode);
time1 = GetTickCount();
}

    return (LRESULT)TRUE;
}

这是实现视频采集的框架,具体代码大家只有自己写了,因为MP4压缩算法现在美国禁止出口,在Windows中不含有该算法,
采用这种算法每帧图象的数据量只有800字节,如果每秒按15帧来处理,在互联网上传送应该可以实现,如果采用H263协议,数据量还会更小一些,但图象清晰度会下降很多。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值