语音对讲对接指南
在阅读本节内容前,请确保你已经阅读并理解了臻云极致最佳实践。那么现在的问题是,你已经通过获取语音对讲地址接口拿到了语音对讲地址,但究竟该如何的使用呢?
语音对讲协议
从语音对讲地址的格式可以看出来,其是一个基于WebSocket的连接,整体交互流程如下:
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帧中,包头数据为网络字节序。
字段 | 类型 | 备注 |
---|---|---|
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)才能使用,这是浏览器的安全策略决定的。