Commit 79edb4c7 by giaogiao

封装webrtc响应实体

parent a2bd91b1
......@@ -34,20 +34,6 @@ public enum WsResponseCmdEnum {
this.cmdCode = uriCode;
}
/**
* 根据uriCode获取
*
* @param uriCode
* @return
*/
public static WsResponseCmdEnum getByCode(int uriCode) {
for (WsResponseCmdEnum wsResponsePathEnum : values()) {
if (wsResponsePathEnum.getCmdCode() == uriCode) {
return wsResponsePathEnum;
}
}
return null;
}
public int getCmdCode() {
return cmdCode;
......
package com.wecloud.im.ws.enums;
/**
* @Description webrtc响应类型
* @Author hewei hwei1233@163.com
* @Date 2019-12-05
*/
public enum WsRtcResponseSubCmdEnum {
// --- 服务端响应
/**
* 接收到RTC邀请
*/
RTC_CALL(1),
/**
* 用户状态更新事件(用户加入频道)
*/
CLIENT_JOIN(2),
/**
* 用户状态更新事件(用户退出频道)
*/
CLIENT_LEAVE(3),
/**
* 用户状态更新事件(用户拒接邀请,不同意进入频道)
*/
CLIENT_REJECT(4),
/**
* SDP数据转发
*/
SDP_FORWARD(5),
/**
* candidate候选者数据转发
*/
CANDIDATE_FORWARD(6);
private final int cmdCode;
WsRtcResponseSubCmdEnum(int cmdCode) {
this.cmdCode = cmdCode;
}
public int getCmdCode() {
return cmdCode;
}
}
......@@ -14,7 +14,7 @@ import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.sender.SystemPush;
import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.ImCmdAbstract;
import com.wecloud.rtc.SubCmd;
import com.wecloud.rtc.RtcSubCmd;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -59,31 +59,31 @@ public class SingleRtcConcrete extends ImCmdAbstract {
public void process(ReceiveModel receiveModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException {
// 指令判空
if (receiveModel.getData().get(SubCmd.SUB_CMD) == null) {
if (receiveModel.getData().get(RtcSubCmd.SUB_CMD) == null) {
return;
}
String cmd = receiveModel.getData().get(SubCmd.SUB_CMD).toString();
String cmd = receiveModel.getData().get(RtcSubCmd.SUB_CMD).toString();
switch (cmd) {
//创建频道
case SubCmd.CREATE:
break;
//加入频道
case SubCmd.JOIN:
break;
//拒绝加入频道
case SubCmd.REJECT:
break;
//SDP数据转发
case SubCmd.SDP:
break;
//主动挂断(离开频道)
case SubCmd.LEAVE:
break;
// //创建频道
// case RtcSubCmd.CREATE:
// break;
//
// //加入频道
// case RtcSubCmd.JOIN:
// break;
//
// //拒绝加入频道
// case RtcSubCmd.REJECT:
// break;
//
// //SDP数据转发
// case RtcSubCmd.SDP:
// break;
//
// //主动挂断(离开频道)
// case RtcSubCmd.LEAVE:
// break;
}
......
# wecloud-RTC音视频客户端信令对接文档
# wecloud-RTC音视频客户端信令对接文档
......@@ -19,42 +19,54 @@
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios
client需要监听频道内 状态更新(房间断开,挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
6.如果接收方未在线时收到音视频通话邀请,在规定时间内发起方还在等待中,发起方重新连接可以收到音视频通话的离线信令
```
## 流程图
### 不绑定到会话 示例一
![双人WebRTC流程图-不绑定会话](https://tva1.sinaimg.cn/large/008i3skNly1gvftfayr8ij60u016wtcx02.jpg)
![image-20211018180059906](https://tva1.sinaimg.cn/large/008i3skNly1gvjmbmw0wcj60u016877z02.jpg)
## 指令码说明
## subCmd指令码说明
#### **subCmd**子类型指令码
##### 客户端**请求**指令列表:
**create**:创建频道
**join**: 加入频道
**SDP**:SDP数据转发
**reject**:拒绝加入频道
**leave**:主动挂断(离开频道)
枚举类:
```
/**
* 接收到RTC邀请
*/
RTC_CALL(1),
##### 服务端**响应**指令列表:
/**
* 用户状态更新事件(用户加入频道)
*/
CLIENT_JOIN(2),
**rtcCall**:接收到RTC邀请
**clientEvent** : 用户状态更新事件(用户加入,用户退出,用户拒接邀请)
**typeEvent**:流状态更新(切换音频 切换视频)
**statusEvent**:状态更新(网络断开,挂断)
**SDP**:SDP数据转发
**busy**:忙线
/**
* 用户状态更新事件(用户退出频道)
*/
CLIENT_LEAVE(3),
/**
* 用户状态更新事件(用户拒接邀请,不同意进入频道)
*/
CLIENT_REJECT(4),
/**
* SDP数据转发
*/
SDP_FORWARD(5),
/**
* candidate候选者数据转发
*/
CANDIDATE_FORWARD(6);
```
## 创建频道 发起RTC音视频通话 (http)
......@@ -70,14 +82,14 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
{
"cmd":4,
"data":{
"subCmd":"rtcCall",
"subCmd":"1",
"subData":{
"type":"video",
"toConversation":null,
"conversationId":null,
"channelId":1234263457652,
"sender":"client_1010"
"timestamp":113123123,
"clientId":"client_1010"
},
"diyParam自定义字段":"aaaa自已定义字段的值",
"attrs":{
"a":"示例: 用户自定义的一些键值对",
"b":"存储用户自定义的一些键值对"
......@@ -92,12 +104,12 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 绑定的会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| conversationId | Long | 否 | 绑定的会话id |
| subCmd | String | 否 | 子类型指令 |
| sender | String | 否 | 发起通话的客户端ID |
| clientId | String | 否 | 发起通话的客户端ID |
| channelId | Long | 否 | 由服务端创建的频道id |
| type | String | 否 | 类型: "video" 或 "voice" |
| timestamp | Timestamp | 否 | 频道创建时间戳 |
## 同意加入频道(http)
......@@ -112,10 +124,9 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
{
"cmd":4,
"data":{
"subCmd":"clientEvent",
"subCmd":"2",
"subData":{
"channelId":1234263457652,
"type":"join",
"clientId":7657567,
}
}
......@@ -124,32 +135,8 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
## 拒绝加入频道 http
client接收方向服务端请求数据:
```json
{
"reqId":"123",
"cmd":3,
"data":{
"subCmd":"reject",
"diyParam自定义字段":"aaaa自已定义字段的值",
"channelId":1234263457652,
"attrs":{}
}
}
```
**说明:**
**参数描述**
见http接口文档
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subCmd | String | 否 | 子类型 |
## 有Client拒绝加入频道(ws下发)
......@@ -159,17 +146,18 @@ client接收方向服务端请求数据:
{
"cmd":4,
"data":{
"subCmd":"clientEvent",
"subCmd":4,
"subData":{
"channelId":1234263457652,
"type":"reject",
"clientId":7657567,
}
}
}
```
## 流媒体描述信息SDP转发
## SDP转发
流媒体描述信息
(服务端仅负责转发)(candidate,anser,offer)
......@@ -183,52 +171,89 @@ client接收方向服务端请求数据:
{
"cmd":4,
"data":{
"subCmd":"sdp",
"subCmd":5,
"subData":{
"channelId":1234263457652,
"clientId":7657567,
"sdpData":"xxxxxxxxxxxxxxxx",
"diyParam自定义字段":"aaaa自已定义字段的值",
"sdpType":"Offer/Answer"
},
"attrs":{}
}
}
}
```
## 主动挂断(离开频道) http
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| channelId | Long | 否 | 频道id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subCmd | String | 否 | 子指令 |
| sdpData | String | 否 | sdp转发的数据 |
| sdpType | String | 否 | sdp类型: Offer或Answer |
client主动离开频道
见http接口文档
## 有client离开频道(ws下发)
## Candidate转发
服务端向频道内其他client响应数据:
候选人信息
(服务端仅负责转发)(candidate,anser,offer)
### client上传Candidate (http接口)
见http接口文档
### client接收Candidate (ws下发)
```json
{
"cmd":4,
"data":{
"subCmd":"clientEvent",
"subCmd":6,
"subData":{
"channelId":1234263457652,
"type":"leave",
"clientId":7657567,
}
"candidateData":"xxxxxxxxxxxxxxxx",
},
"attrs":{}
}
}
```
## 查询忙线状态(对方正在通话中) http
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| channelId | Long | 否 | 频道id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subCmd | String | 否 | 子指令 |
| candidateData | String | 否 | 转发的候选者数据 |
服务端响应给发起方
## 主动挂断(离开频道) http
见http接口文档
## 有client离开频道(ws下发)
服务端向频道内其他client响应数据:
```json
{
"reqId":"555111-ad-afd12",
"cmd":5,
"cmd":4,
"data":{
"subCmd":"busy",
"subCmd":3,
"subData":{
"channelId":1234263457652,
"clientId":7657567
......@@ -237,6 +262,11 @@ client主动离开频道
}
```
## 查询忙线状态(对方正在通话中) http
见http接口文档
## 断线重连
重新join进频道即可重连
......@@ -247,7 +277,7 @@ client主动离开频道
## 视频/音频切换
## 查询对方是否离开
## 查询对方是否离开频道
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment