语音对讲对接指南

在阅读本节内容前,请确保你已经阅读并理解了臻云极致最佳实践。那么现在的问题是,你已经通过获取语音对讲地址接口拿到了语音对讲地址,但究竟该如何的使用呢?

语音对讲协议

从语音对讲地址的格式可以看出来,其是一个基于WebSocket的连接,整体交互流程如下:

image.png

WebSocket帧类型

协议类型 帧类型 数据格式
交互协议 TEXT json
数据协议 BINARY 见后面的数据协议部分

交互协议

开始播放(StartPlay)

请求(用户端 -> 设备端)
{
    "request":"StartPlay"
    "parm":{
        "ver":"1.0",
        "codec":"pcm",
        "sample_format": "flt",
    }
}
响应(设备端 -> 用户端)
{
    "reply":"StartPlay",
    "state":200,
    "state_string":"ok",
    "parm":{
        "ver":"1.0",
        "sample_rate":8000,
        "channel" : 1 ,
        "frame_size":2048
        "stream_id" : 0
    }
}
字段 含义 备注
ver 协议版本,默认1.0
codec 音频编码类型(pcm ,711a)
sample_format "u8" "s16" "s32" "flt" "dbl" "u8p" "s16p" "s32p" "fltp" "dblp"
channel 通道数
frame_size 帧大小
stream_id 流ID, 用来标识流ID, 流的发送方决定ID,

停止播放(StopPlay)

请求(用户端 -> 设备端)
{
    "request":"StopPlay"
    "parm":{
        "stream_id" : 0
    }
}
响应(设备端 -> 用户端)
{
    "reply":"StopPlay",
    "state":200,
    "state_string":"ok",
    "parm":{
        "stream_id" : 0
    }
}

开始讲话(StartTalk)

请求(用户端 -> 设备端)
{
    "request":"StartTalk",
    "parm":{
        "ver":"1.0"
        "codec":"pcm",
        "sample_format":"flt",
        "sample_rate":8000,
        "channel" : 1 ,
        "frame_size":2048
        "stream_id" : 0
    }
}
响应(设备端 -> 用户端)
{
    "reply":"StartTalk",
    "state":200,
    "state_string":"ok",
    "parm":{
        "stream_id" : 0
    }
}

停止讲话(StopTalk)

请求(用户端 -> 设备端)
{
    "request":"StopTalk"
    "parm":{
        "stream_id" : 0
    }
}
响应(设备端 -> 用户端)
{
    "reply":"StopTalk",
    "state":200,
    "state_string":"ok",    
    "parm":{
        "stream_id" : 0
    }
}

状态码

字段 id 含义
state 200 ok
state 201 busy
state 202 talking now
state 203 not start talk
state 204 playinf now
state 205 not start plat
state 206 not support codec tyep
state -1 err

数据协议

无论是设备发给用户的音频数据帧;还是用户发送给设备的音频数据帧,其格式都是一样的,分为包头和音频数据,都存放在websocket帧中,包头数据为网络字节序。

image.png

字段 类型 备注
streamid uint32 流ID,和请求的一致
seq uint32 序列号,每帧+1
size uint32 帧数据size
ts uint64 时间戳, utc时间,毫秒

设备音频格式支持

目前设备支持

"codec":"pcm",
"sample_format":"flt",
"sample_rate":8000,
"channel" : 1 ,
"frame_size":2048
"codec":"g711a",
"sample_format":"u8",
"sample_rate":8000,
"channel" : 1 ,
"frame_size":512

两种音频数据格式,推荐使用g711a,原因是更省流,而pcm的flt格式占用带宽是g711a的4倍。

注意

在浏览器中使用,必须要https页面(或者localhost)才能使用,这是浏览器的安全策略决定的。

results matching ""

    No results matching ""