视频监控系统视频上云解决方案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

相关文章

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D