onvif 模拟摄像头_ONVIF 设备发现(网络摄像头)——实例笔记

相关配置

ONVIF官网:http://www.onvif.org/

gSOAP安装配置:gSOAP安装配置+使用案例参考+参考链接

操作系统:CentOS7

资料参考:

许振坪的ONVIF专栏:传送门

onvif开发之设备发现功能的实现

Linux下onvif服务端之发现设备

还有一个博文找不到网址了,如果网友发现可以私信补充。

代码实战

完整源码下载:GitHub,码云

客户端

1、WS-Discovery的Ad hoc模式,使用多播(不使用gSOAP实现设备发现)

参考文章:ONVIF协议网络摄像机(IPC)客户端程序开发(7):设备搜索

源码如下 search_c.c:

#include

#include

#include

#ifdef WIN32

#include

#else

#include

#include

#include

#include

#include

#endif

/* 从技术层面来说,通过单播、多播、广播三种方式都能探测到IPC,但多播最具实用性*/

#define COMM_TYPE_UNICAST 1// 单播

#define COMM_TYPE_MULTICAST 2// 多播

#define COMM_TYPE_BROADCAST 3// 广播

#define COMM_TYPE COMM_TYPE_MULTICAST

/* 发送探测消息(Probe)的目标地址、端口号 */

#if COMM_TYPE == COMM_TYPE_UNICAST

#define CAST_ADDR "100.100.100.15"// 单播地址,预先知道的IPC地址

#elif COMM_TYPE == COMM_TYPE_MULTICAST

#define CAST_ADDR "239.255.255.250"// 多播地址,固定的239.255.255.250

#elif COMM_TYPE == COMM_TYPE_BROADCAST

#define CAST_ADDR "100.100.100.255"// 广播地址

#endif

#define CAST_PORT 3702// 端口号

/* 以下几个宏是为了socket编程能够跨平台,这几个宏是从gsoap中拷贝来的 */

#ifndef SOAP_SOCKET

# ifdef WIN32

# define SOAP_SOCKET SOCKET

# define soap_closesocket(n) closesocket(n)

# else

# define SOAP_SOCKET int

# define soap_closesocket(n) close(n)

# endif

#endif

#if defined(_AIX) || defined(AIX)

# if defined(_AIX43)

# define SOAP_SOCKLEN_T socklen_t

# else

# define SOAP_SOCKLEN_T int

# endif

#elif defined(SOCKLEN_T)

# define SOAP_SOCKLEN_T SOCKLEN_T

#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(__ANDROID__) || defined(_XOPEN_SOURCE)

# define SOAP_SOCKLEN_T socklen_t

#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS) || defined(HP_UX)

# define SOAP_SOCKLEN_T int

#elif !defined(SOAP_SOCKLEN_T)

# define SOAP_SOCKLEN_T size_t

#endif

#ifdef WIN32

#define SLEEP(n) Sleep(1000 * (n))

#else

#define SLEEP(n) sleep((n))

#endif

/* 探测消息(Probe),这些内容是ONVIF Device Test Tool 15.06工具搜索IPC时的Probe消息,通过Wireshark抓包工具抓包到的 */

const char *probe = "uuid:fc0bad56-5f5a-47f3-8ae2-c94a4e907d70urn:schemas-xmlsoap-org:ws:2005:04:discoveryhttp://schemas.xmlsoap.org/ws/2005/04/discovery/Probedn:NetworkVideoTransmitter";

int main(int argc, char **argv)

{

int ret;

int optval;

SOAP_SOCKET s;

SOAP_SOCKLEN_T len;

char recv_buff[4096] = {0};

struct sockaddr_in multi_addr;

struct sockaddr_in client_addr;

#ifdef WIN32

WSADATA wsaData;

if( WSAStartup(MAKEWORD(2,2), &wsaData) != 0 ) { // 初始化Windows Sockets DLL

printf("Could not open Windows connection.\n");

return 0;

}

if ( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2 ) {

printf("the version of WinSock DLL is not 2.2.\n");

return 0;

}

#endif

s = socket(AF_INET, SOCK_DGRAM, 0); //

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将ONVIF网络摄像头添加到ZoneMinder中,需要按照以下步骤进行操作: 1. 确认网络摄像头支持ONVIF协议。ONVIF是一个开放的网络视频接口标准,如果摄像头支持该协议,它能够与支持ONVIF的软件进行兼容。 2. 确保ZoneMinder已经安装并且能够正常运行。ZoneMinder是一个用于监控摄像头的开源软件,需要先确保该软件已经正确安装并配置。 3. 进入ZoneMinder的Web界面。在浏览器中输入ZoneMinder IP地址和端口号,登录到ZoneMinder的控制面板。 4. 点击左侧导航栏中的“添加新监控源”或类似的按钮,打开添加监控源的界面。 5. 在添加监控源界面,选择“ONVIF”作为监控源类型。填写摄像头的名称和描述等信息。 6. 在连接设置中,输入摄像头的IP地址、用户名和密码等登录信息。确保填写的信息准确无误。 7. 点击“测试”按钮来验证连接是否成功。如果连接成功,会出现一个成功的提示。如果连接失败,检查摄像头的配置和网络设置。 8. 确认连接成功后,点击“添加”或类似的按钮以添加监控源。 9. 在监控列表中,应该能够看到新添加的ONVIF摄像头。点击该摄像头,可以进行调整、管理和监控等操作。 通过以上步骤,你就可以成功将ONVIF网络摄像头添加到ZoneMinder中进行监控了。请注意,具体的操作步骤可能会因ZoneMinder的版本和设置而有所不同,请根据实际情况进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值