监控编码
来源:互联网 发布:div中调用js函数 编辑:程序博客网 时间:2024/05/29 03:51
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace YangShi
{
public class cVideo
{
private IntPtr lwndC; //保存无符号句柄
private IntPtr mControlPtr; //保存管理指示器
private int mWidth;
private int mHeight;
public cVideo(IntPtr handle, int width, int height)
{
mControlPtr = handle; //显示视频控件的句柄
mWidth = width; //视频宽度
mHeight = height; //视频高度
}
/// 打开视频设备
/// </summary>
public void StartWebCam()
{
byte[] lpszName = new byte[100];
byte[] lpszVer = new byte[100];
VideoAPI.capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100);
this.lwndC = VideoAPI.capCreateCaptureWindowA(lpszName, VideoAPI.WS_CHILD | VideoAPI.WS_VISIBLE, 0, 0, mWidth, mHeight, mControlPtr, 0);
if (VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_CONNECT, 0,0))
{
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEWRATE, 100,0);
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEW, true, 0);
}
}
/// <summary>
/// 关闭视频设备
/// </summary>
public void CloseWebcam()
{
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_DISCONNECT, 0,0);
}
/// <summary>
/// 拍照
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public void GrabImage(IntPtr hWndC, string path)
{
IntPtr hBmp = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(path);
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SAVEDIB, 0, hBmp.ToInt32());
}
/// <summary>
/// 开始录像
/// </summary>
/// <param name="path">要保存录像的路径</param>
public void StarKinescope(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt32());
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SEQUENCE, 0, 0);
}
/// <summary>
/// 停止录像
/// </summary>
public void StopKinescope()
{
VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_START, 0, 0);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace YangShi
{
public class VideoAPI
{
//视频API调用
//包含执行视频捕获的函数,给AVI文件的I/O处理和视频,音频设备驱动程序提供一个高级接口
[DllImport("avicap32.dll")]
// 该函数用于创建一个视频捕获窗口
// 参数:标识窗口的名称,标识窗口风格,(X、Y标识窗口的左上角坐标),标识窗口的宽度和高度,标识父窗体句柄,标识窗口ID。
// 返回视频捕捉窗口句柄
public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
[DllImport("avicap32.dll")]
public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);
[DllImport("User32.dll")]
//用于向Windows系统发送消息机制
//参数:hWnd:窗口句柄,wMsg:将要发送的消息,wParam、IParam:消息的参数,每个消息都有两个参数,参数设置有发送消息而定
public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
[DllImport("User32.dll")]
public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);
// 常量
public const int WM_USER = 0x400; //16进制数 0x400=16^2乘以4=1024(十进制) 0x是16进制的前缀
public const int WS_CHILD = 0x40000000;
public const int WS_VISIBLE = 0x10000000;
public const int SWP_NOMOVE = 0x2;
public const int SWP_NOZORDER = 0x4;
public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;
public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11;
public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5;
public const int WM_CAP_SET_PREVIEW = WM_USER + 50;
public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;
public const int WM_CAP_START = WM_USER;
public const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
//视频录像变量
public const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
public const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace YangShi
{
public partial class ShiPin : Form
{
public ShiPin()
{
InitializeComponent();
}
cVideo video = null;
//开始录像
private void button1_Click(object sender, EventArgs e)
{
btnPlay.Enabled = false;
btnStop.Enabled = true;
btnPz.Enabled = true;
video = new cVideo(pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height);
video.StartWebCam();
video.StarKinescope(@"d:\lx.avi");
}
//暂停录像
private void btnStop_Click(object sender, EventArgs e)
{
btnPlay.Enabled = true;
btnStop.Enabled = false;
btnPz.Enabled = false;
video.CloseWebcam();
video.StopKinescope();
}
//拍照
private void btnPz_Click(object sender, EventArgs e)
{
video.GrabImage(pictureBox1.Handle, "d:\\a.bmp");
}
//关闭系统
private void button4_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
- 监控编码
- 监控中视频编码分辨率的选择
- 监控视频编码研究进展摘要汇总
- 基于h.264编码的视频监控(软编码)
- 视频监控行业G711编解码[续]编码样例
- 发明专利:一种适用于监控视频的编码方法
- openfalcon插件 监控http时候的编码问题
- 监控
- 《监控》
- 监控
- 监控
- 监控
- 监控
- 监控
- 监控
- 监控
- H.264视频编码标准在网络视频监控系统中的应用
- FLASH 编码和推送技术,轻松搭建跨平台网络视频监控系统
- 使用Deinstall专用工具删除Oracle Database
- Android onTouchEvent, onClick及onLongClick的调用机制
- Android_使用ActivityGroup来切换Activity和Layout
- CDN
- 解析Java对象的equals()和hashCode()的使用
- 监控编码
- 不小心把文件夹管理员权限删除的回复方法
- LG E900 越狱
- html笔记
- OVER(PARTITION BY)函数介绍
- C# 设计模式之 观察者模式
- VS中如何使用SQLite(C#版)
- SELECT 查询
- android两个Activity跳转之间使用ProgressDialog方法