Commit c2933f38 by giaogiao

添加md文档

parent d9f5e117
# wecloud-RTC音视频客户端对接文档
# wecloud-RTC音视频客户端对接文档
## 文档描述
此文档为单人RTC音视频通讯技术对接文档
由于RTC基于wecloud-im即时通讯服务,**对接RTC前,需要先对接wecloud-im服务**
## 流程图
![单人WebRTC发起流程图](https://tva1.sinaimg.cn/large/008i3skNgy1guxhnn6x64j60jr0xgmz302.jpg)
# 指令说明
subType子类型:
创建会话:create
接收到RTC:rtcCall
## 发起RTC音视频通话
client发送方向服务端发送数据:
```json
{
"reqId":"555111",
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":null,
"toClient":"client_3030",
"subType":"create",
"push":{
"title":"xxx正在邀请你视频通话",
"subTitle":"点击接听"
},
"attrs":{
"a":"示例: 用户自定义的一些键值对",
"b":"示例: 存储用户自定义的一些键值对"
}
}
}
```
**说明:** toConversation会话ID可以为空, 为空时通话记录将不会记录到会话当中, 如"未接听", "已拒绝"等事件通知不会写入到会话的聊天记录中.
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 是 | 会话id,可为空 |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| push | String | 是 | 接收方展示的推送内容 |
| subType | String | 否 | 子类型 |
| toClient | String | 否 | 被邀请的客户端ID |
## 接收方收到RTC音视频通话邀请
服务端向client接收方下发数据:
```json
{
"reqId":"",
"cmd":4,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":null,
"subType":"rtcCall",
"sender":"client_1010",
"attrs":{
"a":"示例: 用户自定义的一些键值对",
"b":"存储用户自定义的一些键值对"
}
}
}
```
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
| sender | String | 否 | 发起通话的客户端ID |
## 接收方同意加入房间
client接收方向服务端发送数据:
```json
{
"reqId":"123",
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"agree",
"attrs":{}We
}
}
```
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
### 通知发送方: 接收方同意加入房间
服务端向发送方下发数据:
```json
{
"reqId":"123",
"cmd":4,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"agree"
}
}
```
## 接收方拒绝加入房间
client接收方向服务端发送数据:
```json
{
"reqId":"123",
"cmd":3,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"reject",
"attrs":{}
}
}
```
**说明:**
**参数描述**
| 字段名 | 字段类型 | 是否可空 | 说明 |
| ---- | -------- | -- | ------ |
| cmd | String | 否 | 指令码 |
| attrs | Object | 是 | 自定义拓展字段 |
| toConversation | Long | 否 | 会话id |
| diyParam自定义字段 | Object | 是 | 自定义拓展字段 |
| subType | String | 否 | 子类型 |
### 通知发送方: 接收方拒绝加入房间
服务端向发送方下发数据:
```json
{
"reqId":"123",
"cmd":4,
"data":{
"diyParam自定义字段":"aaaa自已定义字段的值",
"toConversation":1402147846261706752,
"subType":"reject"
}
}
```
## 流媒体描述信息SDP转发
(服务端仅负责转发)(ice_candidate,anser,offer)
## 视频切音频
## 离开房间
## 系统电话繁忙
## 断线重连
## 发送心跳
## 对方是否还挂起
## 挂断
## 确认离开
## 确认是否离开
## 查询对方是否离开
# wecloud-im服务端REST API对接文档
# wecloud-im服务端REST API对接文档
## 本地API文档地址
http://192.168.1.110:8082/api/doc.html#/home
账号密码admin admin
以上只包含api接口文档 websocket对接说明在此文档中
## 测试外网
文档:
```
https://wstest.im199.com/api/doc.html#/home
```
___
测试外网请求示例:
```
https://wstest.im199.com/api/imApplication/add
```
___
ws连接示例
```
wss://wstest.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______
## 生产环境
ws.im199.com
文档:
```
https://ws.im199.com/api/doc.html#/home
```
___
测试外网请求示例:
```
https://ws.im199.com/api/imApplication/add
```
___
ws连接示例
```
wss://ws.im199.com/ws?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJ3ZWIiLCJjbGllbnRJZCI6ImFiY2QxIiwiaXNzIjoid2VjbG91ZF9pbSIsImFwcEtleSI6IkpLdE5IZnJWVXdzaGF4ek4iLCJleHAiOjE2MjgzMjMxNDMsImlhdCI6MTYyMzEzOTE0MywianRpIjoiNWU3NzU5ZjM2ODQ3NDFiMzg4MGEyYjkwMjQ0OWZjZmYifQ.CC-iuGjNwQLH4VxFI2wZEPuP4AGabOUOiRh9snp3IB4
```
_______
## 鉴权方式
### 方式一:
对于 POST 和 PUT 请求,请求的主体必须是 JSON 格式,而且 HTTP header 的 Content-Type 需要设置为 `application/json`
用户验证通过 HTTP header 来进行,**X-LC-Id** 标明正在运行的是哪个应用(应用的 App ID), **X-LC-Key** 用来授权鉴定 endpoint:
```json
curl -X PUT \
-H "X-LC-Id: {{appid}}" \
-H "X-LC-Key: {{appkey}}" \
-H "Content-Type: application/json" \
-d '{"content": "更新一篇博客的内容"}' \
https://https://ws.im199.com/api/
```
**X-LC-Key** 通常情况下是应用的 App Key
### 方式二
**更安全的鉴权**
我们还支持一种新的 API 鉴权方式,即在 HTTP header 中使用 **X-LC-Sign** 来代替 **X-LC-Key**,以降低 App Key 的泄露风险。例如:
```json
curl -X PUT \
-H "X-LC-Id: {{appid}}" \
-H "X-LC-Sign: d5bcbb897e19b2f6633c716dfdfaf9be,1453014943466" \
-H "Content-Type: application/json" \
-d '{"content": "在 HTTP header 中使用 X-LC-Sign 来更新一篇博客的内容"}' \
https://https://ws.im199.com/api/
```
**X-LC-Sign** 的值是由 `sign,timestamp` 组成的字符串:
| 取值 | 约束 | 描述 |
| :-------- | :--- | :----------------------------------------------------------- |
| sign | 必须 | 将 timestamp 加上 App Key 组成的字符串,再对它做 MD5 签名后的结果。 |
| timestamp | 必须 | 客户端产生本次请求的 unix 时间戳(UTC),精确到**毫秒**。 |
举例来说,假设应用的信息如下:
| App Id | `FFnN2hso42Wego3pWq4X5qlu` |
| ---------- | --------------------------------- |
| App Key | `UtOCzqb67d3sN12Kts4URwy8` |
| 请求时间 | 2016-01-17 15:15:43.466 GMT+08:00 |
| timestamp | `1453014943466` |
**使用 App Key 来计算(MD5) sign**:
```sh
-H "X-LC-Sign: d5bcbb897e19b2f6633c716dfdfaf9be,1453014943466" \
```
## 响应格式
对于所有的请求,响应格式都是一个 JSON 对象。
一个请求是否成功是由 HTTP 状态码标明的。一个 2XX 的状态码表示成功,而一个 4XX 表示请求失败。当一个请求失败时响应的主体仍然是一个 JSON 对象,但是总是会包含 `code``error` 这两个字段,你可以用它们来进行调试。举个例子,如果尝试用非法的属性名来保存一个对象会得到如下信息:
## 单聊、群聊
### 创建对话
### 查询对话
### 更新对话
### 删除对话
### 增加成员
### 移除成员
### 查询成员
### 单聊、群聊-发消息
### 查询历史消息
### 单聊、群聊-修改消息
### 单聊、群聊-撤回消息
## 黑名单
### 增加对话黑名单
### 移除对话黑名单
### 查询对话黑名单
......@@ -19,7 +19,7 @@ aaaaa3
--
-- 会话
## 会话
1邀请2
1427910060675305472
......@@ -78,13 +78,13 @@ load-blance:
server-type: Local
2021年09月27日17:00:50部署国内IM集成版
## 2021年09月27日17:00:50部署国内IM集成版
部署1.3 版本
| weikeyun_imapi | 121.37.208.9 | 国内IM集成版
docker run -p 6379:6379 -d --restart=always --name redis6 -v $PWD/dockerData/redis6:/data redis:6 --appendonly yes --requirepass "axT8knPN5hAP"
##mysql5.7(如果本地不开,可以连上测试环境)
## mysql5.7(如果本地不开,可以连上测试环境)
### docker 安装mysql
docker run -p 3306:3306 --name mysql57 -v $PWD/dockerData/mysql57/data:/var/lib/mysql --restart always -e MYSQL_ROOT_PASSWORD=JH86uc53r8Ca -d mysql:5.7
mysql
......@@ -97,5 +97,25 @@ mysql
port: 6379
utf8mb4_unicode_ci
建库语句
## 建库语句
CREATE DATABASE IF NOT EXISTS wecloud_im DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
## 单人RTC设计思路 , 2021年10月08日 周五
1. 引入"频道RtcChannel"概念, 可以不基于会话发起音视频通话
2. 不在同个会话中的两个client加入到同一个频道进行通话 (可配置是否两个client必须在同一个会话才能发起音视频通话)
3. 目前频道只支持两个client,进行通话的两端必须先加入到同一个"频道",所有的指令都在频道内进行转发
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios
client需要监听频道内 状态更新(房间断开 .挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)
## 创建频道请求参数
接收者id (数组)
扩展参数(Object)
### 响应参数
频道id
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