关于视频流压缩的问题

xiaoc10 2007-07-26 04:03:41
我想将摄像头拍摄时得到的视频流压缩。。
现在我有两个地方不会。
(1) 如何得到视频流
(2) 如何压缩。。
...全文
202 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
leibo_80 2007-07-27
  • 打赏
  • 举报
回复
正好我这些时写的一个小函数获得视屏流,希望对你有点帮助,建个WIN32DLL工程,把下面复制到你的工程文件,然后编译成DLL文件.

头文件
#include <windows.h>
#include <vfw.h>

#define VIDEOCAPDEVICE 0

struct CAPWND
{
LPCSTR lpszWindowName;
int x;
int y;
int nWidth;
int nHeight;
HWND hWnd;
int nID;
int cpr;
BOOL cpf;
};

struct CAPHRGN
{
HRGN hrgn;
BOOL bRedraw;
};

HWND cWndhandle;

extern "C"
{
_declspec(dllexport) HWND WINAPI VideocapWindow(CAPWND &cWnd,CAPHRGN &cHrgn,LPCTSTR pWindowName);
_declspec(dllexport) BOOL WINAPI CloseVideocapWindow();
}
原文件

#include "capVIDEO.h"

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}

return TRUE;
}

HWND WINAPI VideocapWindow(CAPWND &cWnd,CAPHRGN &cHrgn,LPCTSTR pWindowName)
{
CAPWND *capWnd=&cWnd;
CAPHRGN *capHrgn=&cHrgn;
HWND pWinname=FindWindow(NULL,pWindowName);
cWndhandle=capCreateCaptureWindow(
capWnd->lpszWindowName,
WS_CHILD | WS_VISIBLE,
capWnd->x,
capWnd->y,
capWnd->nWidth,
capWnd->nHeight,
pWinname,
capWnd->nID);

if(!capDriverConnect(cWndhandle,VIDEOCAPDEVICE))
{
MessageBox(NULL,"no capvideodevice!",NULL,MB_OK | MB_ICONEXCLAMATION);
return 0;
}

if(capHrgn->bRedraw)
{
SetWindowRgn(cWndhandle,capHrgn->hrgn,capHrgn->bRedraw);
}

capPreviewRate(cWndhandle,capWnd->cpr);

capPreview(cWndhandle,capWnd->cpf);

return cWndhandle;
}

BOOL WINAPI CloseVideocapWindow()
{
if(!capDriverDisconnect(cWndhandle))
{
return FALSE;
}
return TRUE;
}
VB声明

Public Type CAPWND
lpszWindowName As String
x As Long
y As Long
nWidth As Long
nHeight As Long
hWnd As Long
nID As Long
cpr As Long
cpf As Long
End Type

Public Type CAPHRGN
hrgn As Long
bRedraw As Long
End Type

Public Type POINTAPI
x As Long
y As Long
End Type

Public Declare Function VideocapWindow Lib "capVIDEO.dll" Alias "_VideocapWindow@12" (cWnd As CAPWND, cHrgn As CAPHRGN, ByVal pWindowName As String) As Long
Public Declare Function CloseVideocapWindow Lib "capVIDEO.dll" Alias "_CloseVideocapWindow@0" () As Long
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

VB调用

Dim cWnd As CAPWND, cHrgn As CAPHRGN, cHandle As Long
Private Sub Form_Load()
Form1.ScaleMode = 3
With cWnd
.lpszWindowName = "capWindow"
.nWidth = 500
.nHeight = 400
.x = 50
.y = 50
.hWnd = Form1.hWnd
.nID = 1
.cpf = 1
.cpr = 33
End With
With cHrgn
.hrgn = 0
.bRedraw = 0
End With
cHandle = VideocapWindow(cWnd, cHrgn, Form1.Name)
StatusBar1.SimpleText = cHandle & "," & Form1.hWnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
CloseVideocapWindow
End Sub

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧