TSINGSEE Qingxi Videoが開発した一部のビデオプラットフォームは、すでに音声インターコムの機能をサポートしています。屋内セキュリティビデオ監視では、音声インターコムの実用性を過小評価することはできません。そのため、EasyCVRビデオ監視システムを使用して、海のクラウドプラットフォームを統合しています。音声インターコム機能は、Kang EHomeプロトコルでも実現されています。
このドキュメントでは、Haikang EHomeプロトコルに基づく音声インターコム機能の実装手順について説明します。
音声インターコム操作を開始する前に、必ずNET_ECMS_Initを実行してCMSを初期化し、NET_ECMS_StartListenを実行してCMS監視サービスを開始してデバイス登録情報を受信してください。
デバイスは音声インターコム関数をサポートする必要があります。プログラムはNET_ECMS_StartListenを呼び出してCMS監視および登録コールバック関数を開始し、コールバック関数DEVICE_REGISTER_CBのdwDataTypeをENUM_DEV_ONに設定します。デバイスがサポートするバージョン情報は、構造体NET_EHOME_DEV_REG_INFOのメンバーbyDevProtocolVersionを通じてコールバックされます。
1. NET_ECMS_StartVoiceTalkを呼び出し、NET_EHOME_VOICETALK_PARAのbyVoiceTalkを「0」に設定して、音声インターコムを開始します
。2。NET_ECMS_StopVoiceTalkを呼び出して、音声転送とインターコムを停止します。
3. NET_ECMS_ForceLogoutを呼び出して、デバイスのログアウトを強制します
#include <Windows.h>
#include "HCISUPCMS.h"
LONG lLoginID = -1;
LONG m_lVoiceTalkHandle = -1;
//
//注册回调函数
BOOL CALLBACK RegisterCallBack(LONG lUserID, DWORD dwDataType, void *pOutBuffer, DWORD dwOutLen, void *pInBuffer, DWORD dwInLen, void *pUser)
{
if (ENUM_DEV_ON == dwDataType)
{
NET_EHOME_DEV_REG_INFO *pDevInfo = (NET_EHOME_DEV_REG_INFO *)pOutBuffer;
if (pDevInfo != NULL)
{
lLoginID = lUserID;
printf("On-line, lUserID: %d, Device ID: %s\n", lLoginID, pDevInfo->byDeviceID);
}
//输入参数
NET_EHOME_SERVER_INFO *pServerInfo = (NET_EHOME_SERVER_INFO *)pInBuffer;
pServerInfo->dwTimeOutCount = 6; //心跳超时次数
pServerInfo->dwKeepAliveSec = 15; //心跳间隔
}
else if (ENUM_DEV_OFF == dwDataType)
{
printf("Off-line, lUserID: %d\n", lUserID);
NET_ECMS_ForceLogout(lUserID);
}
else
{
}
return TRUE;
}
//
//语音数据回调函数
void CALLBACK g_fVoiceDataCallBack(LONG iVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, DWORD dwEncodeType, BYTE byAudioFlag, void *pUser)
{
//获取到语音数据自行处理
}
void main(){
//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_VOICETALK_PARA struVoiceTalkPara = {0};
struVoiceTalkPara.bNeedCBNoEncData = 0; //需要回调的语音类型:0- 编码后语音,1- 编码前语音(语音转发时不支持)
struVoiceTalkPara.cbVoiceDataCallBack = g_fVoiceDataCallBack;
struVoiceTalkPara.dwEncodeType = 0; //设备的语音编码类型:0- G722,1- G711U,2- G711A,3- G726,4- AAC,5- MP2L2,6- PCM
struVoiceTalkPara.byVoiceTalk = 0; //语音对讲模式:0- 语音对讲,1- 语音转发
DWORD dwVoiceChan = 1; //语音对讲通道号
//开始语音对讲
m_lVoiceTalkHandle = NET_ECMS_StartVoiceTalk(lLoginID, dwVoiceChan, &struVoiceTalkPara);
if (m_lVoiceTalkHandle < 0)
{
printf("NET_ECMS_StartVoiceTalk failed, error code: %d\n", NET_ECMS_GetLastError());
NET_ECMS_Fini();
return;
}
Sleep(30000);
//停止语音对讲
if(!NET_ECMS_StopVoiceTalk(m_lVoiceTalkHandle))
{
printf("NET_ECMS_StopVoiceTalk failed, error code: %d\n", NET_ECMS_GetLastError());
NET_ECMS_Fini();
return;
}
//退出
//CMS停止监听服务
if(!NET_ECMS_StopListen(lListen))
{
printf("NET_ECMS_StopListen failed, error code: %d\n", NET_ECMS_GetLastError());
}
//CMS反初始化,释放资源
NET_ECMS_Fini();
printf("Exit!\n");
}
EasyCVRインターフェースのプレビュー:
ビデオ関連のソリューションについては、Tsingseeビデオの公式Webサイトにアクセスして、システム効果の詳細を確認できます。www.tsingsee.comから無料でダウンロードしてテストできます。