Commit 79edb4c7 by giaogiao

封装webrtc响应实体

parent a2bd91b1
...@@ -34,20 +34,6 @@ public enum WsResponseCmdEnum { ...@@ -34,20 +34,6 @@ public enum WsResponseCmdEnum {
this.cmdCode = uriCode; 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() { public int getCmdCode() {
return cmdCode; 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; ...@@ -14,7 +14,7 @@ import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.sender.SystemPush; import com.wecloud.im.ws.sender.SystemPush;
import com.wecloud.im.ws.service.WriteDataService; import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.ImCmdAbstract; import com.wecloud.im.ws.strategy.ImCmdAbstract;
import com.wecloud.rtc.SubCmd; import com.wecloud.rtc.RtcSubCmd;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -59,31 +59,31 @@ public class SingleRtcConcrete extends ImCmdAbstract { ...@@ -59,31 +59,31 @@ public class SingleRtcConcrete extends ImCmdAbstract {
public void process(ReceiveModel receiveModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException { 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; return;
} }
String cmd = receiveModel.getData().get(SubCmd.SUB_CMD).toString(); String cmd = receiveModel.getData().get(RtcSubCmd.SUB_CMD).toString();
switch (cmd) { switch (cmd) {
//创建频道 // //创建频道
case SubCmd.CREATE: // case RtcSubCmd.CREATE:
break; // break;
//
//加入频道 // //加入频道
case SubCmd.JOIN: // case RtcSubCmd.JOIN:
break; // break;
//
//拒绝加入频道 // //拒绝加入频道
case SubCmd.REJECT: // case RtcSubCmd.REJECT:
break; // break;
//
//SDP数据转发 // //SDP数据转发
case SubCmd.SDP: // case RtcSubCmd.SDP:
break; // break;
//
//主动挂断(离开频道) // //主动挂断(离开频道)
case SubCmd.LEAVE: // case RtcSubCmd.LEAVE:
break; // break;
} }
......
# wecloud-RTC音视频客户端信令对接文档 # wecloud-RTC音视频客户端信令对接文档
...@@ -19,42 +19,54 @@ ...@@ -19,42 +19,54 @@
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选) 4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios 5. 连接websocket时带上client类型, 如web,安卓,ios
client需要监听频道内 状态更新(房间断开,挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频) 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**:状态更新(网络断开,挂断) CLIENT_LEAVE(3),
**SDP**:SDP数据转发
**busy**:忙线
/**
* 用户状态更新事件(用户拒接邀请,不同意进入频道)
*/
CLIENT_REJECT(4),
/**
* SDP数据转发
*/
SDP_FORWARD(5),
/**
* candidate候选者数据转发
*/
CANDIDATE_FORWARD(6);
```
## 创建频道 发起RTC音视频通话 (http) ## 创建频道 发起RTC音视频通话 (http)
...@@ -70,14 +82,14 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更 ...@@ -70,14 +82,14 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
{ {
"cmd":4, "cmd":4,
"data":{ "data":{
"subCmd":"rtcCall", "subCmd":"1",
"subData":{ "subData":{
"type":"video", "type":"video",
"toConversation":null, "conversationId":null,
"channelId":1234263457652, "channelId":1234263457652,
"sender":"client_1010" "timestamp":113123123,
"clientId":"client_1010"
}, },
"diyParam自定义字段":"aaaa自已定义字段的值",
"attrs":{ "attrs":{
"a":"示例: 用户自定义的一些键值对", "a":"示例: 用户自定义的一些键值对",
"b":"存储用户自定义的一些键值对" "b":"存储用户自定义的一些键值对"
...@@ -92,12 +104,12 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更 ...@@ -92,12 +104,12 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
| ---- | -------- | -- | ------ | | ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 | | cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 | | attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 绑定的会话id | | conversationId | Long | 否 | 绑定的会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subCmd | String | 否 | 子类型指令 | | subCmd | String | 否 | 子类型指令 |
| sender | String | 否 | 发起通话的客户端ID | | clientId | String | 否 | 发起通话的客户端ID |
| channelId | Long | 否 | 由服务端创建的频道id | | channelId | Long | 否 | 由服务端创建的频道id |
| type | String | 否 | 类型: "video" 或 "voice" | | type | String | 否 | 类型: "video" 或 "voice" |
| timestamp | Timestamp | 否 | 频道创建时间戳 |
## 同意加入频道(http) ## 同意加入频道(http)
...@@ -112,10 +124,9 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更 ...@@ -112,10 +124,9 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
{ {
"cmd":4, "cmd":4,
"data":{ "data":{
"subCmd":"clientEvent", "subCmd":"2",
"subData":{ "subData":{
"channelId":1234263457652, "channelId":1234263457652,
"type":"join",
"clientId":7657567, "clientId":7657567,
} }
} }
...@@ -124,32 +135,8 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更 ...@@ -124,32 +135,8 @@ client需要监听频道内 状态更新(房间断开,挂断)、用户状态更
## 拒绝加入频道 http ## 拒绝加入频道 http
client接收方向服务端请求数据: 见http接口文档
```json
{
"reqId":"123",
"cmd":3,
"data":{
"subCmd":"reject",
"diyParam自定义字段":"aaaa自已定义字段的值",
"channelId":1234263457652,
"attrs":{}
}
}
```
**说明:**
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subCmd | String | 否 | 子类型 |
## 有Client拒绝加入频道(ws下发) ## 有Client拒绝加入频道(ws下发)
...@@ -159,17 +146,18 @@ client接收方向服务端请求数据: ...@@ -159,17 +146,18 @@ client接收方向服务端请求数据:
{ {
"cmd":4, "cmd":4,
"data":{ "data":{
"subCmd":"clientEvent", "subCmd":4,
"subData":{ "subData":{
"channelId":1234263457652, "channelId":1234263457652,
"type":"reject",
"clientId":7657567, "clientId":7657567,
} }
} }
} }
``` ```
## 流媒体描述信息SDP转发 ## SDP转发
流媒体描述信息
(服务端仅负责转发)(candidate,anser,offer) (服务端仅负责转发)(candidate,anser,offer)
...@@ -183,52 +171,89 @@ client接收方向服务端请求数据: ...@@ -183,52 +171,89 @@ client接收方向服务端请求数据:
{ {
"cmd":4, "cmd":4,
"data":{ "data":{
"subCmd":"sdp", "subCmd":5,
"subData":{ "subData":{
"channelId":1234263457652, "channelId":1234263457652,
"clientId":7657567, "clientId":7657567,
"sdpData":"xxxxxxxxxxxxxxxx", "sdpData":"xxxxxxxxxxxxxxxx",
"diyParam自定义字段":"aaaa自已定义字段的值", "sdpType":"Offer/Answer"
},
"attrs":{} "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 ```json
{ {
"cmd":4, "cmd":4,
"data":{ "data":{
"subCmd":"clientEvent", "subCmd":6,
"subData":{ "subData":{
"channelId":1234263457652, "channelId":1234263457652,
"type":"leave",
"clientId":7657567, "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 ```json
{ {
"reqId":"555111-ad-afd12", "cmd":4,
"cmd":5,
"data":{ "data":{
"subCmd":"busy", "subCmd":3,
"subData":{ "subData":{
"channelId":1234263457652, "channelId":1234263457652,
"clientId":7657567 "clientId":7657567
...@@ -237,6 +262,11 @@ client主动离开频道 ...@@ -237,6 +262,11 @@ client主动离开频道
} }
``` ```
## 查询忙线状态(对方正在通话中) http
见http接口文档
## 断线重连 ## 断线重连
重新join进频道即可重连 重新join进频道即可重连
...@@ -247,7 +277,7 @@ client主动离开频道 ...@@ -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