Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
79edb4c7
Commit
79edb4c7
authored
Oct 19, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
封装webrtc响应实体
parent
a2bd91b1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
177 additions
and
109 deletions
+177
-109
common/src/main/java/com/wecloud/im/ws/enums/WsResponseCmdEnum.java
+0
-14
common/src/main/java/com/wecloud/im/ws/enums/WsRtcResponseSubCmdEnum.java
+52
-0
common/src/main/java/com/wecloud/im/ws/strategy/concrete/SingleRtcConcrete.java
+22
-22
docs/md/wecloud-RTC对接文档的.md
+103
-73
No files found.
common/src/main/java/com/wecloud/im/ws/enums/WsResponseCmdEnum.java
View file @
79edb4c7
...
...
@@ -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
;
...
...
common/src/main/java/com/wecloud/im/ws/enums/WsRtcResponseSubCmdEnum.java
0 → 100644
View file @
79edb4c7
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
;
}
}
common/src/main/java/com/wecloud/im/ws/strategy/concrete/SingleRtcConcrete.java
View file @
79edb4c7
...
...
@@ -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.
Rtc
SubCmd
;
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
(
Rtc
SubCmd
.
SUB_CMD
)
==
null
)
{
return
;
}
String
cmd
=
receiveModel
.
getData
().
get
(
SubCmd
.
SUB_CMD
).
toString
();
String
cmd
=
receiveModel
.
getData
().
get
(
Rtc
SubCmd
.
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 Rtc
SubCmd.CREATE:
//
break;
//
//
//加入频道
// case Rtc
SubCmd.JOIN:
//
break;
//
//
//拒绝加入频道
// case Rtc
SubCmd.REJECT:
//
break;
//
//
//SDP数据转发
// case Rtc
SubCmd.SDP:
//
break;
//
//
//主动挂断(离开频道)
// case Rtc
SubCmd.LEAVE:
//
break;
}
...
...
docs/md/wecloud-RTC对接文档的.md
View file @
79edb4c7
# wec
loud-RTC音视频客户端信令对接文档
# wec
loud-RTC音视频客户端信令对接文档
...
...
@@ -19,42 +19,54 @@
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios
client需要监听频道内 状态更新(房间断开,挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
6.如果接收方未在线时收到音视频通话邀请,在规定时间内发起方还在等待中,发起方重新连接可以收到音视频通话的离线信令
```
## 流程图
### 不绑定到会话 示例一


## 指令码说明
##
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主动离开频道
## 视频/音频切换
## 查询对方是否离开
## 查询对方是否离开
频道
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment