基于ExoSIP的GB28181协议IPC示例程序发布

需积分: 12 5 下载量 143 浏览量 更新于2024-10-15 收藏 1.86MB ZIP 举报
资源摘要信息:"该文件是一个基于exosip库实现的GB28181协议的IPC(Internet Protocol Camera)Demo,其编码语言为C语言。文件名为'gb28181_UA_demo.zip'。" 知识点一:GB28181协议 GB28181是中华人民共和国国家标准《安全防范视频监控联网系统信息传输、交换、控制技术要求》的简称。该协议是针对安防视频监控系统中视频数据传输、交换和控制提出的技术要求,主要用于指导视频监控联网系统的设计、建设和验收。它规定了视频监控系统中各个组件之间的通信方式、协议框架和功能要求,包括视频数据的实时传输、视频存储与检索、报警信息处理等。 知识点二:IPC IPC是Internet Protocol Camera的缩写,即网络摄像机。这是一种可以使用网络连接的数字摄像机,它可以直接将视频信号通过IP网络进行传输,实现远程的视频监控。IPC通常具备网络功能,可以通过浏览器、专业软件等工具进行远程访问和管理。 知识点三:exosip库 exosip是一个开源的SIP协议栈的实现,它是一个纯C语言编写的库,支持SIP协议的各种版本。SIP(Session Initiation Protocol)是会话初始协议,用于启动、修改和终止多媒体会话,广泛应用于VoIP(Voice over IP)和即时通信系统中。exosip库提供了一整套API,方便开发者在各种平台上快速构建SIP客户端和服务器。 知识点四:C语言编写 C语言是一种广泛使用的计算机编程语言,它具有高效、灵活、功能强大的特点。在嵌入式系统开发、操作系统开发以及网络通信等众多领域都有广泛的应用。C语言特别适合做底层硬件和系统软件的开发,因此用C语言开发的GB28181 IPC Demo具有轻量级和易移植的特点。 知识点五:嵌入式系统 嵌入式系统是指嵌入于各种设备和产品中,实现特定功能的专用计算机系统。它们通常具有专一性、实时性、硬件依赖性强、资源受限等特点。由于嵌入式系统常常需要处理特定的任务,所以通常需要将软件进行简化,以适应硬件资源的限制。使用C语言进行嵌入式开发,可以更好地控制硬件资源,并提高系统的运行效率。 知识点六:Demo的作用 Demo是Demonstration的缩写,意为演示、示范。在软件开发中,Demo通常指的是一个功能有限但可以展示软件核心功能或概念的小型程序。它能够帮助开发者验证概念的可行性、测试核心功能,同时也可以作为向潜在用户展示软件能力的样本。在本例中,'gb28181_UA_demo.zip'可能是一个旨在展示如何利用exosip库实现GB28181协议的IPC客户端或服务器端的简单应用。 总结而言,该文件提供的压缩包包含一个用C语言编写的基于exosip库的GB28181协议的IPC Demo。该Demo小巧、便于移植,适合嵌入式平台使用,可以作为理解和学习GB28181协议以及SIP协议栈在视频监控领域的应用的参考示例。

UA_StatusCode OpcuaClient::ReadCNCValue(CString dataCategory,CNCStruct* m_pCncstruct) { const int arraySize = 7; UA_ReadValueId CNC_itemArray[arraySize]; for (int i = 0; i < arraySize; ++i) { UA_ReadValueId_init(&CNC_itemArray[i]); CNC_itemArray[i].attributeId = UA_ATTRIBUTEID_VALUE; } CNC_itemArray[0].nodeId = UA_NODEID_STRING(2, "不知道是哪一个变量);//cncType CNC_itemArray[1].nodeId = UA_NODEID_STRING(2, "/Channel/Configuration/numSpindles");//主轴数 CNC_itemArray[2].nodeId = UA_NODEID_STRING(2, "/Channel/Configuration/numGeoAxes");//伺服轴数 CNC_itemArray[3].nodeId = UA_NODEID_STRING(2, "/Channel/ProgramInfo/progName");//程序名称 CNC_itemArray[4].nodeId = UA_NODEID_STRING(2, "/Channel/Spindle/status");//运行状态 CNC_itemArray[5].nodeId = UA_NODEID_STRING(2, "/Channel/MachineAxis/actFeedRate");//进给速度 CNC_itemArray[6].nodeId = UA_NODEID_STRING(2, "/Channel/Spindle/actSpeed");//主轴转速 //读数据 UA_ReadRequest request; UA_ReadRequest_init(&request); request.nodesToRead = &valueIdCategory[0]; request.nodesToReadSize = arraySize; UA_ReadResponse response = UA_Client_Service_read(m_Client, request); UA_StatusCode *retStatusArray=NULL; UA_StatusCode retval = response.responseHeader.serviceResult; if (retval == UA_STATUSCODE_GOOD) { if (response.resultsSize == arraySize) { for (int i = 0; i < arraySize; ++i) { retStatusArray[i] = response.results[i].status; } } else { UA_ReadResponse_clear(&response); return UA_STATUSCODE_BADUNEXPECTEDERROR; } } //按顺序存储plc的节点值 vector<void*> cncNodeValue; for (int i = 0; i < arraySize; ++i) { if (retStatusArray[i] == UA_STATUSCODE_GOOD) { UA_DataValue res = response.results[i]; if (!res.hasValue) // no value { UA_ReadResponse_clear(&response); return UA_STATUSCODE_BADUNEXPECTEDERROR; } UA_Variant out; memcpy(&out, &res.value, sizeof(UA_Variant)); UA_Variant_init(&res.value); if (out.type == &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]) { UA_LocalizedText* ptr = (UA_LocalizedText*)out.data; printf("Text: %.*s\n", ptr->text.length, ptr->text.data); cncNodeValue.push_back(ptr->text.data); } else if (out.type == &UA_TYPES[UA_TYPES_UINT64]) { UA_UInt64* ptr = (UA_UInt64*)out.data; printf("UInt64 Value: %d\n", *ptr); cncNodeValue.push_back(ptr); } else if (out.type == &UA_TYPES[UA_TYPES_UINT32]) { UA_UInt32* ptr = (UA_UInt32*)out.data; printf("UInt32 Value: %d\n", *ptr); cncNodeValue.push_back(ptr); } else if (out.type == &UA_TYPES[UA_TYPES_FLOAT]) { UA_Float* ptr = (UA_Float*)out.data; printf("Float Value: %d\n", *ptr); cncNodeValue.push_back(ptr); } else if (out.type == &UA_TYPES[UA_TYPES_DATETIME]) { UA_DateTime* ptr = (UA_DateTime*)out.data; UA_DateTimeStruct ptrdts = UA_DateTime_toStruct(*ptr); printf("DateTime Value: %u-%u-%u %u:%u:%u.%03u\n", ptrdts.day, ptrdts.month, ptrdts.year, ptrdts.hour, ptrdts.min, ptrdts.sec, ptrdts.milliSec); cncNodeValue.push_back(ptr); } } } //问题三:数据如何处理成人可读或者可显示的形式?? UA_ReadResponse_clear(&response); return UA_STATUSCODE_GOOD; }

2023-02-06 上传