读书人

视频采集卡的二次开发,用C#作应用程序

发布时间: 2013-10-11 14:52:39 作者: rapoo

视频采集卡的二次开发,用C#做应用程序出错
我用海康的DS4000的视频采集卡,初始化完毕怎么只能打开一路图像啊?
4路的采集卡,为什么只有1路能打开呢?
用C++的DEMO没事,改成C# 就不行了
求指点,谢谢

HikVisionSDK是我用C#写的,包含了DLL中的函数名称,下面引用即可


public FormFullScreenShow()
{
InitializeComponent();

if (HikVisionSDK.InitDSPs() <= 0)
{
MessageBox.Show("视频压缩卡初始化失败!");
return;
}

for (int i = 0; i < PLAYER_MONITORS_COUNT; i++)
{
player_monitors[i] = new UCtrlPlayer();//初始化窗口
panel_RealPlay.Controls.Add(player_monitors[i]);//添加窗口
player_monitors[i].iSubWndIndex = i;//子窗口标记

}

iTotalDSPs = HikVisionSDK.GetEncodeChannelCount(); //获取系统中编码通道的总数
//MessageBox.Show(iTotalDSPs.ToString());
}




private void FormFullScreenShow_Load(object sender, EventArgs e)
{
PlayerMonitorsShowResize();//播放器重置
for (int i = 0; i < iTotalDSPs; i++)
{
handle[i] = HikVisionSDK.ChannelOpen(i);//..........................................................
MessageBox.Show(string.Format("handle[{0}]的句柄号为:{1}", i,handle[i]));
rec[i].Location = player_monitors[i].Location;
rec[i].Size = player_monitors[i].Size;
player_monitors[i].RealPlayStart(rec[i], handle[i]);
}
}

以上运行起来后,一切正常,通道总数也获取成功,就是我分了4个画面,只有画面1有图像,其他都没有
是我的代码写的有问题还是调用顺序不对呢?

[解决办法]

引用:
同样的USB视频采集卡在VS2008 C++下面的可以正常运行起来,相关代码如下
g_TotalDSPs = InitDSPs();//初始化板卡 g_TotalDSPs 为全局变量(int)
g_TotalChannel = GetTotalChannels();//获取通道总数 g_TotalChannel 为全局变量(int)

SDK开发包提供的头文件中相关的如下

DVRS_API int __stdcall InitDSPs();
DVRS_API int __stdcall GetTotalChannels();

这些都可以正常获取数据,板卡初始化成功返回1;通道总数获取为4;

现在看下C#中的相关代码:

total_DspCount = API.InitDSPs();//total_DspCount 为全局变量(uint)
total_ChanelCount = API.GetTotalChannels();//total_ChanelCount 为全局变量(uint)

API是我根据SDK的头文件改写的入口,相关如下

/// <summary>
/// 初始化DSP InitDSPs
/// 说 明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表明

初始化失败,可能没有找到相应的DSP软件模块。
/// int __stdcall InitDSPs()
/// </summary>
/// <returns>系统内可用的软件模块个数。 </returns>

[DllImport("Dvrshw.dll")]
public static extern uint InitDSPs();

/// <summary>
/// 获取通道数量
/// 说 明: 获取板卡中的通道数量。
/// int __stdcall GetTotalDSPs()
/// </summary>
/// <returns>0</returns>

[DllImport("Dvrshw.dll")]


public extern static uint GetTotalChannels();

问题来了,C#运行也一切正常,不报告错误,板卡初始化成功(返回1)。但是获取通道总数的时候一直返回1,这个是怎么回事呢?应该是4才对啊?
请大家帮我看下。是不是我改写的有问题





应该有初始化的设置错误,仔细研究动态库吧!

读书人网 >C#

热点推荐