设备需具备音频输入和外放的能力。本接入指南以海康 IPC 为例,介绍慢直播语音对讲功能的接入步骤。
说明
海康 IPC 只有部分型号支持公网语音对讲。
首先需要使能 IPC 的 GB28181 国标接入功能,并配置 语音输出通道编码ID。参考以下示例:
语音输出通道编码ID 的规则为20位数字,其中类型编码(11-13位)需为137,例如:
34020000001370000001
。
调用慢直播服务端 “开始语音对讲” 接口(StartVoiceTalk
),返回示例如下:
POST Action=StartVoiceTalk?SpaceID=<空间ID>&DeviceNSID=<设备国标ID> response 示例: { "AudioSendUrl": "wss://aiotvideo.volces.com/voice_talk/nss/talk/34020081991180402721?vhost=12345678" }
接口返回 WebSocket 音频推流地址
客户端音频录音采集参数为 8KHz@Mono 16bit PCM 格式
需编码为 PCMA,再通过 WebSocket 发送至服务端,message 类型为 ArrayBuffer
前端调用流程:
PCM录音->PCMA编码->FLV封装->WebSocket发送音频帧至AudioSendUrl
调用慢直播服务端 “结束语音对讲” 接口(StopVoiceTalk
),返回示例如下:
POST Action=StopVoiceTalk?SpaceID=<空间ID>&DeviceNSID=<设备国标ID> response 200
按住 长按对讲 按钮,发送语音至 IPC,此时应该能听到 IPC 发出声音。
松开 长按对讲 按钮,结束语音发送。
<script src="https://unpkg.byted-static.com/byted/web-pusher/0.1.1/dist/index.min.js"></script> <script> // 重置 WebPusher const resetPusher = () => { if (window.webPusher) { window.webPusher.destroy(); window.webPusher = null; } }; // 初始化 WebPusher const initPusher = async (url: string) => { const options: any = { url, samplesPreFrame: 160, }; const webPusher: any = new WebPusher(options); await webPusher.startCapture(); webPusher.publish(); webPusher.on('ready', () => { console.log('ready!'); }); webPusher.on('error', (e: any) => { Message.error(`对讲失败: ${e}`); stopVoice(); }); window.webPusher = webPusher; }; // 开始对讲 const startVoice = async () => { try { const res = await StartVoiceTalk({ SpaceID, DeviceNSID }); await initPusher(res?.AudioSendUrl || ''); } catch (error) { stopVoice(); } }; // 结束对讲 const stopVoice = async () => { try { await StopVoiceTalk({ SpaceID, DeviceNSID }); } catch (error) { } finally { resetPusher(); } }; </script>