作者:wnety

转自:http://blog.csdn.net/wnety/article/details/7452303

准备:天敏VC4000视频采集卡的二次开发包有两个文件,分别是Sa7134Capture.dll和Mix.dll,缺一不可。

代码中使用的全是Sa7134Capture.dll中的方法,如果不添加Mix.dll会报Sa7134Capture.dll错误,截图:

确实很有意思,两个文件都放在bin/Debug目录下就OK了。

官方文档上说的是Sa7134Capture.dll为VC401P/404P的开发包,Sa7130Capture.dll为VC4000/8000的开发包,并且给出的例子都是基于VC401P/404P的。电话与其技术人员沟通后确认VC4000/8000也是用的Sa7134Capture.dll,因此参考Sa7134Capture.dll的开发文档。

C#中拖上Panel控件用作视频显示窗口,其中必须设置背景色:

如果不设置无论如何都不会显示摄像头内容的。试验了一下还有几种背景色也是可以的。切记!

VS2008中截图:

实现最基本的单摄像头功能,连接视频采集卡1号口(注意设备索引号为0):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using Microsoft.Win32;
using System.Threading;
using System.Runtime.InteropServices;

namespace VideoCapture
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

private void Form1_Load(object sender, EventArgs e)
        {
            if (VideoOperate.VCAInitSdk(this.Handle, VideoOperate.DISPLAYTRANSTYPE.PCI_MEMORY_VIDEOMEMORY, false))
            {
                int m_dwDevNum = VideoOperate.VCAGetDevNum();
                if (m_dwDevNum == 0)
                {
                    MessageBox.Show("采集卡驱动程序没有安装");
                }
                else
                {
                    VideoOperate.VCAOpenDevice(0, panel1.Handle);
                    VideoOperate.VCAStartVideoPreview(0);
                }
            }

}

}

class VideoOperate
    {
        #region  视频采集卡中的枚举

public enum DISPLAYTRANSTYPE
        {
            NOT_DISPLAY = 0,
            PCI_VIEDOMEMORY = 1,
            PCI_MEMORY_VIDEOMEMORY = 2
        }

//视频预览和视频捕捉数据流格式,目前版本只支持UUY2格式
        public enum COLORFORMAT
        {
            RGB32 = 0x0,
            RGB24 = 0x1,
            RGB16 = 0x2,
            RGB15 = 0x3,
            YUY2 = 0x4,
            BTYUV = 0x5,
            Y8 = 0x6,
            RGB8 = 0x7,
            PL422 = 0x8,
            PL411 = 0x9,
            YUV12 = 0xA,
            YUV9 = 0xB,
            RAW = 0xE
        }

/*视频预览及视频捕获的显示属性,其中:
            BRIGHTNESS为亮度,value范围:0~255,最佳:80
            CONTRAST为对比度,value范围:-128~127,最佳:0x44
            SATURATION为饱和度,value范围:-128~127,最佳:0x40
            HUE为色度,value范围:-128~127,最佳:0x0
                只有当COLORDEVICETYPE等于COLOR_DECODER时才有效
            SHARPNESS为锐度,value范围:-8~7,最佳:0x0
                只有当COLORDEVICETYPE等于COLOR_DECODER时才有效
        */
        public enum COLORCONTROL
        {
            BRIGHTNESS = 0,
            CONTRAST = 1,
            SATURATION = 2,
            HUE = 3,
            SHARPNESS = 4
        }

/*显示设备的显示属性,其中:
            COLOR_DECODER为解码器的显示属性,它会影响视频预览和视频捕获的显示属性
            COLOR_PREVIEW为视频预览的显示属性
            COLOR_CAPTURE为视频捕获的显示属性
        */
        public enum COLORDEVICETYPE
        {
            COLOR_DECODER = 0,
            COLOR_PREVIEW = 1,
            COLOR_CAPTURE = 2,
        }

/*音视频捕获方式,其中:
            CAP_NULL_STREAM 捕获无效
            CAP_ORIGIN_STREAM 捕获为原始流回调
            CAP_MPEG4_STREAM 捕获为MPEG4
        */
        public enum CAPMODEL
        {
            CAP_NULL_STREAM = 0,
            CAP_ORIGIN_STREAM = 1,
            CAP_MPEG4_STREAM = 2,
        }

/*音视频MPEG4捕获方式,只有CAPMODEL等于CAP_MPEG4_STREAM时有效,其中:
           MPEG4_AVIFILE_ONLY 存为MPEG4文件
           MPEG4_CALLBACK_ONLY MPEG数据回调
           MPEG4_AVIFILE_CALLBACK 存为MPEG文件并回调
       */
        public enum MP4MODEL
        {
            MPEG4_AVIFILE_ONLY = 0,
            MPEG4_CALLBACK_ONLY = 1,
            MPEG4_AVIFILE_CALLBACK = 2,
        }

/*MPEG4_XVID压缩模式,其中:
           XVID_CBR_MODE
           XVID_VBR_MODE
       */
        public enum COMPRESSMODE
        {
            XVID_CBR_MODE = 0,
            XVID_VBR_MODE = 1,
        }

/*视频源的输入频率,其中:
           FIELD_FREQ_50HZ 50HZ,绝对多数为PAL制式
           FIELD_FREQ_60HZ 60HZ,绝对多数为NTSC制式
           FIELD_FREQ_0HZ 无信号
       */
        public enum eFieldFrequency
        {
            FIELD_FREQ_50HZ = 0,
            FIELD_FREQ_60HZ = 1,
            FIELD_FREQ_0HZ = 2,
        }

/*电平状态,其中:
           HIGH_VOLTAGE 高电平
           LOW_VOLTAGE 低电平
       */
        public enum eVOLTAGELEVEL
        {
            HIGH_VOLTAGE = 0,
            LOW_VOLTAGE = 1,
        }

#endregion

#region  视频采集卡中的API函数

//初始化系统资源
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAInitSdk")]
        public extern static bool VCAInitSdk(IntPtr hWndMain, DISPLAYTRANSTYPE eDispTransType, bool bLnitAuDev);

//释放系统资源
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAUnInitSdk")]
        public extern static void VCAUnInitSdk();

//打开指定卡号的设备,分配相应系统资源
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAOpenDevice")]
        public extern static bool VCAOpenDevice(Int32 dwCard, IntPtr hPreviewWnd);

//关闭指定卡号的设备,释放相应系统资源
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCACloseDevice")]
        public extern static bool VCACloseDevice(Int32 dwCard);

//返回系统当中卡号数量,即为SAA7134硬件数目,为0时表示没有设备存在
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAGetDevNum")]
        public extern static int VCAGetDevNum();

//开始视频预览
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAStartVideoPreview")]
        public extern static bool VCAStartVideoPreview(Int32 dwCard);

//停止视频预览
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAStopVideoPreview")]
        public extern static bool VCAStopVideoPreview(Int32 dwCard);

//更新视频预览
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAUpdateVideoPreview")]
        public extern static bool VCAUpdateVideoPreview(Int32 dwCard, IntPtr hPreviewWnd);

//更新overlay窗口,当overlay窗口句柄改变或尺寸、位置改变时调用,overlay窗口就是包含
        //多路显示小窗口的大窗口,overlay窗口必须有一个,多路显示小窗口必须包含在其内部
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAUpdateOverlayWnd")]
        public extern static bool VCAUpdateOverlayWnd(IntPtr hOverlayWnd);

//保存快照为JPEG文件
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASaveAsJpegFile")]
        public extern static bool VCASaveAsJpegFile(Int32 dwCard, string lpFileName, Int32 dwQuality);

//保存快照为BMP文件
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASaveAsBmpFile")]
        public extern static bool VCASaveAsBmpFile(Int32 dwCard, string lpFileName);

//开始视频捕获
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAStartVideoCapture")]
        public extern static bool VCAStartVideoCapture(Int32 dwCard, CAPMODEL enCapMode, MP4MODEL enMp4Mode, string lpFileName);

//停止视频捕获
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAStopVideoCapture")]
        public extern static bool VCAStopVideoCapture(Int32 dwCard);

//设置视频捕获尺寸,dwWidth和dwHeight最好为16的倍数,否则,动态检测为16*16的一个检测小块,检测将会不准确
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetVidCapSize")]
        public extern static bool VCASetVidCapSize(Int32 dwCard, Int32 dwWidth, Int32 dwHeight);

//得到视频捕获尺寸
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAGetVidCapSize")]
        public extern static bool VCAGetVidCapSize(Int32 dwCard, Int32 dwWidth, Int32 dwHeight);

//设置视频捕获频率
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetVidCapFrameRate")]
        public extern static bool VCASetVidCapFrameRate(Int32 dwCard, Int32 dwFrameRate, bool bFrameRateReduction);

//设置MPEG压缩的位率
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetBitRate")]
        public extern static bool VCASetBitRate(Int32 dwCard, Int32 dwBitRate);

//设置MPEG压缩的关键帧间隔,必须大于等于帧率
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetKeyFrmInterval")]
        public extern static bool VCASetKeyFrmInterval(Int32 dwCard, Int32 dwKeyFrmInterval);

//设置MPEG4_XVID压缩的质量
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetXVIDQuality")]
        public extern static bool VCASetXVIDQuality(Int32 dwCard, Int32 dwQuantizer, Int32 dwMotionPrecision);

//设置MPEG4_XVID压缩的模式
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetXVIDCompressMode")]
        public extern static bool VCASetXVIDCompressMode(Int32 dwCard, COMPRESSMODE enCompessMode);

//设置视频颜色属性,它将影响视频预览和视频捕获的显示属性
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCASetVidDeviceColor")]
        public extern static bool VCASetVidDeviceColor(Int32 dwCard, COLORCONTROL enCtlType, Int32 dwValue);

//得到视频源输入频率,即可得到视频源输入制式
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAGetVidFieldFrq")]
        public extern static bool VCAGetVidFieldFrq(Int32 dwCard, eFieldFrequency eVidSourceFieldRate);

//初始化视频设备,当视频不显示,只需视频录像获音频处理时,获通过VCAInitSdk()函数已经初始化完成,可以不初始化
        [DllImport("Sa7134Capture.dll", EntryPoint = "VCAInitVidDev")]
        public extern static bool VCAInitVidDev();

#endregion
    }
}

//

改进:

1、获取设备数目后通过循环动态的将多摄像头绑定到不同的Panel中。

2、窗口移动时视频窗口不动,可以通过开发包方法更新视频窗口。

C#结合天敏VC4000采集卡视频监控相关推荐

  1. java 使用JNA连接天敏VC4000采集卡

    突然发现自己快成了专门调硬件的了 废话不多说了,正题开始 使用的库 1.官方的两个dll(Mix.dll,Sa7134Capture.dll),可能对应不同版本,我这是6.0的,附件里有 2.jna的 ...

  2. 使用VLC开发库,预览采集卡视频方法

    1.打开VLC播放器,查看采集卡设备名称,如图所示,查找到的设备名称为HD Video (T230E Card). 2.使用libvlc_media_new_path接口,传递第2个参数时, 路径为: ...

  3. 天敏VC4000调试

    公司让我测试一个从客户那儿返回的问题产品,老板给我的是天敏VC4000采集卡. 我从天敏官网下载了驱动,各个版本及客户端,尝试了两三天天都没解决问题,是通过拨打天敏技服电话,让他远程协助解决的. 我觉 ...

  4. 无线视频监控系统 PHP,基于ARM的无线视频监控系统的解决方案

    随着通信技术.计算机技术.数字视频技术.网络技术等高科技的发展,视频监控领域也快速进步.近年嵌入式计算机技术和网络技术的开发推动了视频监控的再次进步,出现了基于嵌入式技术的无线网络视频监控系统.无线网 ...

  5. 天敏VC4000视频开发设计方案

    作者:wqvbjhc 转自:http://blog.csdn.net/wqvbjhc/article/details/5983967 分类: 其他 2010-11-03 10:17 2689人阅读 评 ...

  6. android v4l2 4路视频,美乐威推出四链路3G-SDI接口的4K M.2采集卡

    2020年7月22日-中国南京:美乐威作为屡获殊荣的创新音视频产品和IP工作流解决方案的专业开发商,今日发布其Eco Capture系列第六款高集成度.低功耗的M.2视频采集卡. 美乐威Eco Cap ...

  7. 钰群的USB3.0采集,可以实现哪些采集卡方案?

    EJ511是钰群eEver一颗将RGB和I2S音视频信号转换为UAC/UVC格式的采集芯片,它采用USB3.1 GEN1的速率进行视频捕获,最高可支持1080P60fps全高清视频采集. 当EJ511 ...

  8. linux测试dvi接口,Pro Capture-DVI 2路高清DVI采集卡 支持Linux系统更专业

    **的简单易用-Pro Capture 系列采集卡 正式推出了2015新品-Pro Capture 系列采集卡.前一代采集卡也是十分良好的产品,其清晰流畅的采集效果和稳定的工作状态获得了专业客户的一致 ...

  9. 精仿B站源码+自动采集360视频

    介绍: 精仿B站源码+自动采集360视频 精仿哔哩哔哩还原度高达90% 响应式设计无需担心网页卡顿问题 整体简洁明了让你的视觉效果达到极致,追寻探索化的中心欢迎您的使用 采用了无数据库全本地化设计(无 ...

最新文章

  1. Linux安全基础:shell及一些基础命令
  2. 【poj3420】 Quad Tiling
  3. Mobile OpenCart 自适应主题模板 ABC-0074
  4. 广州自由自在进口食品休闲消费的趋势
  5. tp5.1的安装与运行流程
  6. php 聚类算法,科学网—matlab-聚类算法笔记 - 孙月芳的博文
  7. django时区设置问题
  8. 4.Model Validation
  9. MATLAB GUI引用了不存在的字段
  10. 锦官城思享会-成都创业与商业CXO闭门会圆满举办
  11. 【算法】【JAVA】冒泡排序
  12. 小数点进位 oracle,使用多个小数点(。)对Oracle中的记录进行排序
  13. springboot冲突导致的发版失败
  14. 请大家慎用联想笔记本的NOVO功能
  15. Directory monitor
  16. 预科阶段:快速实战入门
  17. TOGAF9中文版(二)
  18. mac安装指定版本的ruby_Mac 下安装Ruby环境
  19. 高并发之——并发测试工具ab
  20. 苹果计算机访问限制,苹果手机访问限制密码忘了怎么办

热门文章

  1. jackson序列化首字母大写amp;jackson序列化结果字段名重复
  2. PYTHON3解决‘gbk‘ codec can‘t encode character ‘\xXX‘ in position XX
  3. 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...
  4. PHP截取视频第一帧
  5. php最新友链源码,Thinkphp友链源码
  6. Python求正负交错序列前N项和
  7. 论文阅读:Fast Optical Flow using Dense Inverse Search
  8. Unity Particle System 粒子系统简单介绍
  9. 衢州学院计算机应用技术分数线,2021年衢州学院投档线及各省最低录取分数线统计表...
  10. Element表单验证规则