什么是组播?
网口相机的组播功能可以实现多个PC对同一个相机同时进行访问。
简单直白的说,就是电脑A、电脑B、电脑C,可以同时获取一个相机的图像数据,电脑A的软件可以进行图像处理,而电脑B、C的软件可以进行录像监控等等
有什么限制条件?
1.需要有千兆网交换机进行数据分流,转包
2.同一个相机,只能被一台电脑进行控制(参数设置:曝光修改等),其余的电脑,只能进行图像数据接收
3.只有网口相机支持
本文简单演示下1台相机,通过交换机被两台不同PC链接的情况
1.控制端-主机1:用于相机参数配置,图像接收处理
2.接受端-主机2、3、N:仅支持,用于相机图像接收
3.交换机:千兆网交换机,用于相机图像的分包,接收端主机越多,对交换机性能要求越高
1.控制端-主机1,以“控制与接收模式”打开相机,开始取流
2.接收端-主机2,以“数据接收模式”打开相机,开始取流
3.在控制端主机设置相机参数,可以看见接收端图像同步变化
海康SDK提供了示例以供用户调用其接口实现组播功能,示例代码路径如:
C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\MultiCast
代码整体结构相对简单,在opendevice是,使用不同权限打开相机即可,相机打开部分代码如下:
// ch:选择设备并创建句柄 | en:select device and create handle
nRet = MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[nIndex]);
if (MV_OK != nRet)
{
printf("Create Handle fail! nRet [0x%x]\n", nRet);
break;
}
// ch:询问用户启动多播控制应用程序或多播监控应用程序
// en:Ask the user to launch: the multicast controlling application or the multicast monitoring application.
printf("Start multicast sample in (c)ontrol or in (m)onitor mode? (c/m)\n");
char key;
do
{
scanf("%c", &key);
}
while ( (key != 'c') && (key != 'm') && (key != 'C') && (key != 'M'));
// ch:查询用户使用的模式 | en:Query the user for the mode to use.
bool monitorMode = (key == 'm') || (key == 'M');
// ch:打开设备 | Open device
if (monitorMode)
{
nRet = MV_CC_OpenDevice(handle, MV_ACCESS_Monitor);//接收端
}
else
{
nRet = MV_CC_OpenDevice(handle, MV_ACCESS_Control);//控制与接收
}
if (MV_OK != nRet)
{
printf("Open Device fail! nRet [0x%x]\n", nRet);
break;
}
不同电脑上面运行不同的open接口的代码,即可完成组播功能使用
需注意,接收端,不能控制相机参数,即必须控制端先控制相机取流,否则接收端会失败
3.1组播IP地址无效,系统弹框会提示“请检查IP地址是否有效”
3.2组播端口号如何设置
3.3组播IP和端口号修改后不同步