视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——通过流媒体服务开启语音对讲

本文主要是介绍视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——通过流媒体服务开启语音对讲,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TSINGSEE青犀视频团队研发的视频平台大多已经支持了语音对讲的功能,EasyCVR视频上云服务也能够在海康EHome协议下调用语音对讲(语音对讲操作流程),本文是语音对讲功能的一个拓展,将跟大家讲解一下EasyCVR集成海康EHome协议通过流媒体服务通道实现的语音对讲功能的流程。

通过流媒体服务开启语音对讲的接口调用图

1421.png

可以看到通过流媒体服务开启语音对讲比直接打开语音对讲功能的流程要复杂。以下是调用步骤:

1、调用NET_ECMS_XMLConfig和命令GetDevAbility获取设备能力并判断设备是否支持通过流媒体服务开启语音对讲。

设备能力由pOutBuf返回:
如果支持,将返回节点,可继续下面步骤。
否则,请结束该任务。

2、调用NET_ESTREAM_StartListenPreview开启SMS监听服务并接收来自设备的连接请求。

3、调用NET_ESTREAM_SetExceptionCallBack为SMS注册异常回调函数。

4、调用NET_ECMS_StartVoiceWithStmServer将语音对讲开启请求从CMS发送给设备。

发送SMS的地址和端口号给设备,设备自动为CMS分配一个会话ID。

5、调用NET_ECMS_StartPushVoiceStream将语音传输请求从CMS发送给设备。设备自动连接SMS并开始发送音频数据给SMS。

6、执行下面某个操作接收来自设备的音频数据或发送音频数据至设备。

调用NET_ESTREAM_SetVoiceTalkDataCB为SMS注册回调函数用于接收来自设备的音频数据。

从SMS注册的语音回调函数中获取音频数据并将其转发给客户端软件。

语音对讲音频码流的解码和显示由客户端软件实现。
调用NET_ESTREAM_SendVoiceTalkData将音频数据发送给设备。

7、调用NET_ESTREAM_StopVoiceTalk停止SMS的音频码流转发。

8、调用NET_ECMS_StopVoiceTalkWithStmServer将语音对讲停止请求从CMS发送给设备。设备停止传输音频码流。

9、调用NET_ESTREAM_StopListenVoiceTalk停止SMS监听服务并断开其与设备的连接。

   void main(){//SMS开启服务//SMS初始化NET_ESTREAM_Init();//语音对讲监听参数NET_EHOME_LISTEN_VOICETALK_CFG struListen = {0};memcpy(struListen.struIPAdress.szIP,"10.16.2.123", sizeof("10.16.2.123"));struListen.struIPAdress.wPort = 8003; //流媒体服务监听端口struListen.fnNewLinkCB = fnVOICETALK_NEWLINK_CB; //语音对讲连接请求回调函数struListen.pUser = NULL;//启动语音对讲监听LONG lHandle = NET_ESTREAM_StartListenVoiceTalk(&struListen);if(lHandle < -1){printf("NET_ESTREAM_StartListenVoiceTalk failed, error code: %d\n", NET_ESTREAM_GetLastError());NET_ESTREAM_Fini();return;}printf("NET_ESTREAM_StartListenVoiceTalk!\n");////CMS注册和语音对讲请求//CMS注册模块初始化NET_ECMS_Init();//注册监听参数NET_EHOME_CMS_LISTEN_PARAM struCMSListenPara = {0};memcpy(struCMSListenPara.struAddress.szIP, "0.0.0.0", sizeof("0.0.0.0"));struCMSListenPara.struAddress.wPort = 7660;struCMSListenPara.fnCB = RegisterCallBack;//启动监听服务,接收设备注册信息LONG lListen = NET_ECMS_StartListen(&struCMSListenPara);if(lListen < -1){printf("NET_ECMS_StartListen failed, error code: %d\n", NET_ECMS_GetLastError());NET_ECMS_Fini();return;}printf("NET_ECMS_StartListen!\n");while(1){Sleep(1000);  //注册成功之后再做后续操作if(lLoginID >= 0){break;}}//语音对讲请求输入参数NET_EHOME_VOICE_TALK_IN struVoiceTalkIn = {0};struVoiceTalkIn.dwVoiceChan = 1; //语音对讲通道号memcpy(struVoiceTalkIn.struStreamSever.szIP, "10.16.2.123", sizeof("10.16.2.123"));//流媒体服务IP地址struVoiceTalkIn.struStreamSever.wPort = 8003; //流媒体服务端口,需要跟服务监听端口一致//语音对讲请求输出参数NET_EHOME_VOICE_TALK_OUT struVoiceTalkOut = {0};//CMS语音对讲请求if(!NET_ECMS_StartVoiceWithStmServer(lLoginID, &struVoiceTalkIn, &struVoiceTalkOut)){printf("NET_ECMS_StartVoiceWithStmServer failed, error code: %d\n", NET_ECMS_GetLastError());NET_ECMS_Fini();return;}printf("NET_ECMS_StartVoiceWithStmServer!\n");//CMS请求开始推流NET_EHOME_PUSHVOICE_IN struPushVoiceIn = {0};struPushVoiceIn.dwSize = sizeof(struPushVoiceIn);struPushVoiceIn.lSessionID = struVoiceTalkOut.lSessionID;NET_EHOME_PUSHVOICE_OUT struPushVoiceOut = {0};struPushVoiceOut.dwSize = sizeof(struPushVoiceOut);if (!NET_ECMS_StartPushVoiceStream(lLoginID, &struPushVoiceIn, &struPushVoiceOut)){printf("NET_ECMS_StartPushVoiceStream failed, error code: %d\n", NET_ECMS_GetLastError());NET_ECMS_Fini();return;}printf("NET_ECMS_StartPushVoiceStream!\n");//创建线程从文件读取语音数据发送给设备DWORD dwThreadId;CreateThread(NULL, 0, LPTHREAD_START_ROUTINE(TestVoiceTransThread), (void*)lVoiceLinkHandle, 0, &dwThreadId);Sleep(50000);//退出//释放CMS语音对讲请求资源if(!NET_ECMS_StopVoiceTalkWithStmServer(lLoginID, struVoiceTalkOut.lSessionID)){printf("NET_ECMS_StopVoiceTalkWithStmServer failed, error code: %d\n", NET_ECMS_GetLastError());}//CMS停止监听服务if(!NET_ECMS_StopListen(lListen)){printf("NET_ECMS_StopListen failed, error code: %d\n", NET_ECMS_GetLastError());}//CMS反初始化,释放资源NET_ECMS_Fini();////SMS停止语音对讲if(lVoiceHandle >= 0){if (!NET_ESTREAM_StopVoiceTalk(lVoiceHandle)){printf("NET_ESTREAM_StopVoiceTalk failed, error code: %d\n", NET_ECMS_GetLastError());}}//SMS停止语音对讲监听服务if(lVoiceLinkHandle >= 0){if (!NET_ESTREAM_StopListenVoiceTalk(lVoiceLinkHandle)){printf("NET_ESTREAM_StopListenVoiceTalk failed, error code: %d\n", NET_ECMS_GetLastError());}}//SMS反初始化,释放资源NET_ESTREAM_Fini();//释放文件资源if(AudioTalkfile != NULL){fclose(AudioTalkfile);AudioTalkfile = NULL;}printf("Exit!\n");
}

EasyCVR视频平台播放界面:

2.png

视频联网云平台EasyCVR是一个集视频联网共享、存储、流媒体转发、视频转码、视频上云、智能分析统一等多种功能为一体的流媒体视频服务融合性平台。视频相关解决方案均可访问TSINGSEE青犀视频,可以联系我们获取演示方案,直观感受,也可自行进行下载及测试。

这篇关于视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——通过流媒体服务开启语音对讲的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930813

相关文章

Spring Security常见问题及解决方案

《SpringSecurity常见问题及解决方案》SpringSecurity是Spring生态的安全框架,提供认证、授权及攻击防护,支持JWT、OAuth2集成,适用于保护Spring应用,需配置... 目录Spring Security 简介Spring Security 核心概念1. ​Securit

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server