
本地:
String appKey = "QNtP3EjtLw26ekt0";
String appSecret = "a5e619003868258e0f7c5b5821ea00fb6b2302faf2ab3737";

--
clientA1

--
aaaaa2


--

# 国内测试外网api文档
https://imapitest.wecloud.cn/api//doc.html#/home

# 国内测试外网web示例
https://imwebtest.wecloud.cn/

## 集群配置
### AWS服务器内部获取公网IP地址 等元数据
curl http://instance-data/latest/meta-data/public-ipv4

### 华为
查询弹性云服务器的网络信息 Network data（OpenStack元数据API）
文档:https://support.huaweicloud.com/usermanual-ecs/ecs_03_0166.html
Linux操作系统：
curl http://169.254.169.254/latest/meta-data/public-ipv4
Windows操作系统：
Invoke-RestMethod http://169.254.169.254/latest/meta-data/public-ipv4


配置文件中配置当前服务器的运营商 可以从运营商处获取公网IP, 如果获取不到则走IP138等接口获取公网IP
服务器负载均衡配置
load-blance:
  服务器配置 Local,AWS,AlibabaCloud,HuaweiCloud
  server-type: Local


## 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(如果本地不开,可以连上测试环境)
###  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
    username: root
    password: axT8knPN5hAP
  redis:
    database: 0
    host: 127.0.0.1
    password: JH86uc53r8Ca
    port: 6379
utf8mb4_unicode_ci

## 建库语句
CREATE DATABASE IF NOT EXISTS wecloud_im DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;


## 单人RTC设计思路 , 2021年10月08日 周五

1. 引入"频道RtcChannel"概念, 可以不基于会话发起音视频通话
2. 不在同个会话中的两个client加入到同一个频道进行通话 (可配置是否两个client必须在同一个会话才能发起音视频通话)
3. 目前频道只支持两个client,进行通话的两端必须先加入到同一个"频道",所有的指令都在频道内进行转发
4. 一个频道可以由通话发起者绑定到会话ID,"挂断","未接听"等状态会同步到会话, 未绑定将不同步到会话(可选)
5. 连接websocket时带上client类型, 如web,安卓,ios

client需要监听频道内 状态更新(房间断开 .挂断)、用户状态更新(用户加入, 用户退出)、流状态更新(切换音频 切换视频)

# RTC接口

## 创建频道

* 请求参数
接收者id (数组)
扩展参数(Object)
绑定的聊天会话ID(可选)

* 响应参数 :
生成的唯一频道id

## 维护判断信息
rci
rtc_channel_info:10001
=
{
"owner" = "123123123",
"createTimestamp","123123"
}


### 维护用户当前在线的频道ID
new Map<String,Long> map
map.put("clientA",10001)
map.put("clientB",10001)
map.put("clientC",10002)
map.put("clientD",10003)

redis Key:
user_join_channel = ujc
rcu:clientA = 10001
rcu:clientB = 10001
rcu:clientC = 10002
rcu:clientD = 10003


### 维护频道中存在的用户
Map<Long,List<String>> map

new List<String> list
list.add("clientA")
list.add("clientB")

map.put(10001,list)

redis Key (set 集合):
rtc_channel_users = rcu
rcu:10001  = clientA , clientB

rcu:10002 = clientC
rcu:10003 = clientD

rtc官网demo
# 发起人

## http 获取ice地址
https://appr.tc/v1alpha/iceconfig?key=
返回{"iceServers": [{"urls": ["stun:turn2.l.google.com"]}]}

##  http 加入房间
https://appr.tc/join/790192954
返回:
is_initiator: "true"
ice_server_transports: ""
ice_server_url: "https://appr.tc/v1alpha/iceconfig?key="
client_id: "12876268"

## http上传offer SDP
https://appr.tc/message/790192954/12876268
请求
{
  "sdp": "v=0\r\no=- 6939265646429638945 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS 135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:O094\r\na=ice-pwd:R+IHhU9wwCuIDR8pd/hnmMco\r\na=ice-options:trickle\r\na=fingerprint:sha-256 82:CF:2C:D2:7C:8D:A2:96:29:B7:C1:87:CE:39:16:FD:ED:12:99:AF:3B:73:B6:3D:5E:03:DD:1E:99:0F:3C:B1\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 52c233e3-d82f-4ad4-baaa-014d7bfb0deb\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:109924000 cname:VEO/rU2hhPHuuPu0\r\na=ssrc:109924000 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 52c233e3-d82f-4ad4-baaa-014d7bfb0deb\r\na=ssrc:109924000 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\r\na=ssrc:109924000 label:52c233e3-d82f-4ad4-baaa-014d7bfb0deb\r\nm=video 9 UDP/TLS/RTP/SAVPF 98 100 96 97 99 101 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:O094\r\na=ice-pwd:R+IHhU9wwCuIDR8pd/hnmMco\r\na=ice-options:trickle\r\na=fingerprint:sha-256 82:CF:2C:D2:7C:8D:A2:96:29:B7:C1:87:CE:39:16:FD:ED:12:99:AF:3B:73:B6:3D:5E:03:DD:1E:99:0F:3C:B1\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 VP9/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 profile-id=0\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 VP9/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 profile-id=2\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 transport-cc\r\na=rtcp-fb:102 ccm fir\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=102\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:120 rtx/90000\r\na=fmtp:120 apt=127\r\na=rtpmap:125 H264/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:107 rtx/90000\r\na=fmtp:107 apt=125\r\na=rtpmap:108 H264/90000\r\na=rtcp-fb:108 goog-remb\r\na=rtcp-fb:108 transport-cc\r\na=rtcp-fb:108 ccm fir\r\na=rtcp-fb:108 nack\r\na=rtcp-fb:108 nack pli\r\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:109 rtx/90000\r\na=fmtp:109 apt=108\r\na=rtpmap:35 AV1X/90000\r\na=rtcp-fb:35 goog-remb\r\na=rtcp-fb:35 transport-cc\r\na=rtcp-fb:35 ccm fir\r\na=rtcp-fb:35 nack\r\na=rtcp-fb:35 nack pli\r\na=rtpmap:36 rtx/90000\r\na=fmtp:36 apt=35\r\na=rtpmap:124 H264/90000\r\na=rtcp-fb:124 goog-remb\r\na=rtcp-fb:124 transport-cc\r\na=rtcp-fb:124 ccm fir\r\na=rtcp-fb:124 nack\r\na=rtcp-fb:124 nack pli\r\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\r\na=rtpmap:119 rtx/90000\r\na=fmtp:119 apt=124\r\na=rtpmap:123 H264/90000\r\na=rtcp-fb:123 goog-remb\r\na=rtcp-fb:123 transport-cc\r\na=rtcp-fb:123 ccm fir\r\na=rtcp-fb:123 nack\r\na=rtcp-fb:123 nack pli\r\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\r\na=rtpmap:118 rtx/90000\r\na=fmtp:118 apt=123\r\na=rtpmap:114 red/90000\r\na=rtpmap:115 rtx/90000\r\na=fmtp:115 apt=114\r\na=rtpmap:116 ulpfec/90000\r\na=ssrc-group:FID 1330070973 2207934575\r\na=ssrc:1330070973 cname:VEO/rU2hhPHuuPu0\r\na=ssrc:1330070973 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\r\na=ssrc:1330070973 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\r\na=ssrc:1330070973 label:745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\r\na=ssrc:2207934575 cname:VEO/rU2hhPHuuPu0\r\na=ssrc:2207934575 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\r\na=ssrc:2207934575 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\r\na=ssrc:2207934575 label:745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\r\n",
  "type": "offer"
}

## http上传candidate
https://appr.tc/message/790192954/12876268
请求
{
  "type": "candidate",
  "label": 0,
  "id": "0",
  "candidate": "candidate:2199032595 1 udp 2122260223 192.168.1.89 50421 typ host generation 0 ufrag O094 network-id 1 network-cost 10"
}

上行 先加入到ws频道
{"cmd":"register","roomid":"065395880","clientid":"12440330"}

下行 另一端SDP应答
{"msg":"{\"sdp\":\"v=0\\r\\no=- 4129310300810400747 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS BVdxzDjOlGOX5CJe8d6QD5STXJMRLx4YYlPx\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 110 112 113 126\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:npgH\\r\\na=ice-pwd:Xg7PFj5k3skAzKRQszRTFZNS\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 30:89:F0:F6:C7:4E:40:AD:CD:8F:8C:B5:96:64:D9:91:99:5E:92:C7:82:F3:7D:E4:43:B4:C1:C1:E8:C6:9B:09\\r\\na=setup:active\\r\\na=mid:0\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:BVdxzDjOlGOX5CJe8d6QD5STXJMRLx4YYlPx 18e6bcf6-4d4b-4279-843b-cf015b1b836a\\r\\na=rtcp-mux\\r\\na=rtpmap:111 opus/48000/2\\r\\na=rtcp-fb:111 transport-cc\\r\\na=fmtp:111 minptime=10;useinbandfec=1\\r\\na=rtpmap:103 ISAC/16000\\r\\na=rtpmap:104 ISAC/32000\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:110 telephone-event/48000\\r\\na=rtpmap:112 telephone-event/32000\\r\\na=rtpmap:113 telephone-event/16000\\r\\na=rtpmap:126 telephone-event/8000\\r\\na=ssrc:1526334845 cname:QDAIpojrEkvKVrx7\\r\\nm=video 9 UDP/TLS/RTP/SAVPF 98 100 96 97 99 101 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:npgH\\r\\na=ice-pwd:Xg7PFj5k3skAzKRQszRTFZNS\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 30:89:F0:F6:C7:4E:40:AD:CD:8F:8C:B5:96:64:D9:91:99:5E:92:C7:82:F3:7D:E4:43:B4:C1:C1:E8:C6:9B:09\\r\\na=setup:active\\r\\na=mid:1\\r\\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:13 urn:3gpp:video-orientation\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\\r\\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\\r\\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:BVdxzDjOlGOX5CJe8d6QD5STXJMRLx4YYlPx ddd008ed-cb04-49c5-a838-d3777061c416\\r\\na=rtcp-mux\\r\\na=rtcp-rsize\\r\\na=rtpmap:98 VP9/90000\\r\\na=rtcp-fb:98 goog-remb\\r\\na=rtcp-fb:98 transport-cc\\r\\na=rtcp-fb:98 ccm fir\\r\\na=rtcp-fb:98 nack\\r\\na=rtcp-fb:98 nack pli\\r\\na=fmtp:98 profile-id=0\\r\\na=rtpmap:100 VP9/90000\\r\\na=rtcp-fb:100 goog-remb\\r\\na=rtcp-fb:100 transport-cc\\r\\na=rtcp-fb:100 ccm fir\\r\\na=rtcp-fb:100 nack\\r\\na=rtcp-fb:100 nack pli\\r\\na=fmtp:100 profile-id=2\\r\\na=rtpmap:96 VP8/90000\\r\\na=rtcp-fb:96 goog-remb\\r\\na=rtcp-fb:96 transport-cc\\r\\na=rtcp-fb:96 ccm fir\\r\\na=rtcp-fb:96 nack\\r\\na=rtcp-fb:96 nack pli\\r\\na=rtpmap:97 rtx/90000\\r\\na=fmtp:97 apt=96\\r\\na=rtpmap:99 rtx/90000\\r\\na=fmtp:99 apt=98\\r\\na=rtpmap:101 rtx/90000\\r\\na=fmtp:101 apt=100\\r\\na=rtpmap:102 H264/90000\\r\\na=rtcp-fb:102 goog-remb\\r\\na=rtcp-fb:102 transport-cc\\r\\na=rtcp-fb:102 ccm fir\\r\\na=rtcp-fb:102 nack\\r\\na=rtcp-fb:102 nack pli\\r\\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\\r\\na=rtpmap:121 rtx/90000\\r\\na=fmtp:121 apt=102\\r\\na=rtpmap:127 H264/90000\\r\\na=rtcp-fb:127 goog-remb\\r\\na=rtcp-fb:127 transport-cc\\r\\na=rtcp-fb:127 ccm fir\\r\\na=rtcp-fb:127 nack\\r\\na=rtcp-fb:127 nack pli\\r\\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\\r\\na=rtpmap:120 rtx/90000\\r\\na=fmtp:120 apt=127\\r\\na=rtpmap:125 H264/90000\\r\\na=rtcp-fb:125 goog-remb\\r\\na=rtcp-fb:125 transport-cc\\r\\na=rtcp-fb:125 ccm fir\\r\\na=rtcp-fb:125 nack\\r\\na=rtcp-fb:125 nack pli\\r\\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\\r\\na=rtpmap:107 rtx/90000\\r\\na=fmtp:107 apt=125\\r\\na=rtpmap:108 H264/90000\\r\\na=rtcp-fb:108 goog-remb\\r\\na=rtcp-fb:108 transport-cc\\r\\na=rtcp-fb:108 ccm fir\\r\\na=rtcp-fb:108 nack\\r\\na=rtcp-fb:108 nack pli\\r\\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\\r\\na=rtpmap:109 rtx/90000\\r\\na=fmtp:109 apt=108\\r\\na=rtpmap:35 AV1X/90000\\r\\na=rtcp-fb:35 goog-remb\\r\\na=rtcp-fb:35 transport-cc\\r\\na=rtcp-fb:35 ccm fir\\r\\na=rtcp-fb:35 nack\\r\\na=rtcp-fb:35 nack pli\\r\\na=rtpmap:36 rtx/90000\\r\\na=fmtp:36 apt=35\\r\\na=rtpmap:124 H264/90000\\r\\na=rtcp-fb:124 goog-remb\\r\\na=rtcp-fb:124 transport-cc\\r\\na=rtcp-fb:124 ccm fir\\r\\na=rtcp-fb:124 nack\\r\\na=rtcp-fb:124 nack pli\\r\\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\\r\\na=rtpmap:119 rtx/90000\\r\\na=fmtp:119 apt=124\\r\\na=rtpmap:123 H264/90000\\r\\na=rtcp-fb:123 goog-remb\\r\\na=rtcp-fb:123 transport-cc\\r\\na=rtcp-fb:123 ccm fir\\r\\na=rtcp-fb:123 nack\\r\\na=rtcp-fb:123 nack pli\\r\\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f\\r\\na=rtpmap:118 rtx/90000\\r\\na=fmtp:118 apt=123\\r\\na=rtpmap:114 red/90000\\r\\na=rtpmap:115 rtx/90000\\r\\na=fmtp:115 apt=114\\r\\na=rtpmap:116 ulpfec/90000\\r\\na=ssrc-group:FID 2674131219 2077425702\\r\\na=ssrc:2674131219 cname:QDAIpojrEkvKVrx7\\r\\na=ssrc:2077425702 cname:QDAIpojrEkvKVrx7\\r\\n\",\"type\":\"answer\"}","error":""}

下行 另一端candidate信息
{"msg":"{\"type\":\"candidate\",\"label\":0,\"id\":\"0\",\"candidate\":\"candidate:4258379142 1 udp 2122260223 192.168.1.250 55712 typ host generation 0 ufrag npgH network-id 1\"}","error":""}


接收方

http 加入房间
https://appr.tc/join/790192954

响应已加入到房间的client的sdp与candidate
{
  "params": {
    "is_initiator": "false",
    "room_link": "https://appr.tc/r/790192954",
    "version_info": "{\"gitHash\": \"06b18b54af995bab9e16c2648ddb7edbbe553541\", \"branch\": \"master\", \"time\": \"Mon Sep 14 17:52:24 2020 +0200\"}",
    "messages": [
      "{\"sdp\":\"v=0\\r\\no=- 6939265646429638945 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS 135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 110 112 113 126\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:O094\\r\\na=ice-pwd:R+IHhU9wwCuIDR8pd/hnmMco\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 82:CF:2C:D2:7C:8D:A2:96:29:B7:C1:87:CE:39:16:FD:ED:12:99:AF:3B:73:B6:3D:5E:03:DD:1E:99:0F:3C:B1\\r\\na=setup:actpass\\r\\na=mid:0\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 52c233e3-d82f-4ad4-baaa-014d7bfb0deb\\r\\na=rtcp-mux\\r\\na=rtpmap:111 opus/48000/2\\r\\na=rtcp-fb:111 transport-cc\\r\\na=fmtp:111 minptime=10;useinbandfec=1\\r\\na=rtpmap:103 ISAC/16000\\r\\na=rtpmap:104 ISAC/32000\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:110 telephone-event/48000\\r\\na=rtpmap:112 telephone-event/32000\\r\\na=rtpmap:113 telephone-event/16000\\r\\na=rtpmap:126 telephone-event/8000\\r\\na=ssrc:109924000 cname:VEO/rU2hhPHuuPu0\\r\\na=ssrc:109924000 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 52c233e3-d82f-4ad4-baaa-014d7bfb0deb\\r\\na=ssrc:109924000 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\\r\\na=ssrc:109924000 label:52c233e3-d82f-4ad4-baaa-014d7bfb0deb\\r\\nm=video 9 UDP/TLS/RTP/SAVPF 98 100 96 97 99 101 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:O094\\r\\na=ice-pwd:R+IHhU9wwCuIDR8pd/hnmMco\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 82:CF:2C:D2:7C:8D:A2:96:29:B7:C1:87:CE:39:16:FD:ED:12:99:AF:3B:73:B6:3D:5E:03:DD:1E:99:0F:3C:B1\\r\\na=setup:actpass\\r\\na=mid:1\\r\\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:13 urn:3gpp:video-orientation\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\\r\\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\\r\\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\\r\\na=rtcp-mux\\r\\na=rtcp-rsize\\r\\na=rtpmap:96 VP8/90000\\r\\na=rtcp-fb:96 goog-remb\\r\\na=rtcp-fb:96 transport-cc\\r\\na=rtcp-fb:96 ccm fir\\r\\na=rtcp-fb:96 nack\\r\\na=rtcp-fb:96 nack pli\\r\\na=rtpmap:97 rtx/90000\\r\\na=fmtp:97 apt=96\\r\\na=rtpmap:98 VP9/90000\\r\\na=rtcp-fb:98 goog-remb\\r\\na=rtcp-fb:98 transport-cc\\r\\na=rtcp-fb:98 ccm fir\\r\\na=rtcp-fb:98 nack\\r\\na=rtcp-fb:98 nack pli\\r\\na=fmtp:98 profile-id=0\\r\\na=rtpmap:99 rtx/90000\\r\\na=fmtp:99 apt=98\\r\\na=rtpmap:100 VP9/90000\\r\\na=rtcp-fb:100 goog-remb\\r\\na=rtcp-fb:100 transport-cc\\r\\na=rtcp-fb:100 ccm fir\\r\\na=rtcp-fb:100 nack\\r\\na=rtcp-fb:100 nack pli\\r\\na=fmtp:100 profile-id=2\\r\\na=rtpmap:101 rtx/90000\\r\\na=fmtp:101 apt=100\\r\\na=rtpmap:102 H264/90000\\r\\na=rtcp-fb:102 goog-remb\\r\\na=rtcp-fb:102 transport-cc\\r\\na=rtcp-fb:102 ccm fir\\r\\na=rtcp-fb:102 nack\\r\\na=rtcp-fb:102 nack pli\\r\\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\\r\\na=rtpmap:121 rtx/90000\\r\\na=fmtp:121 apt=102\\r\\na=rtpmap:127 H264/90000\\r\\na=rtcp-fb:127 goog-remb\\r\\na=rtcp-fb:127 transport-cc\\r\\na=rtcp-fb:127 ccm fir\\r\\na=rtcp-fb:127 nack\\r\\na=rtcp-fb:127 nack pli\\r\\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\\r\\na=rtpmap:120 rtx/90000\\r\\na=fmtp:120 apt=127\\r\\na=rtpmap:125 H264/90000\\r\\na=rtcp-fb:125 goog-remb\\r\\na=rtcp-fb:125 transport-cc\\r\\na=rtcp-fb:125 ccm fir\\r\\na=rtcp-fb:125 nack\\r\\na=rtcp-fb:125 nack pli\\r\\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\\r\\na=rtpmap:107 rtx/90000\\r\\na=fmtp:107 apt=125\\r\\na=rtpmap:108 H264/90000\\r\\na=rtcp-fb:108 goog-remb\\r\\na=rtcp-fb:108 transport-cc\\r\\na=rtcp-fb:108 ccm fir\\r\\na=rtcp-fb:108 nack\\r\\na=rtcp-fb:108 nack pli\\r\\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\\r\\na=rtpmap:109 rtx/90000\\r\\na=fmtp:109 apt=108\\r\\na=rtpmap:35 AV1X/90000\\r\\na=rtcp-fb:35 goog-remb\\r\\na=rtcp-fb:35 transport-cc\\r\\na=rtcp-fb:35 ccm fir\\r\\na=rtcp-fb:35 nack\\r\\na=rtcp-fb:35 nack pli\\r\\na=rtpmap:36 rtx/90000\\r\\na=fmtp:36 apt=35\\r\\na=rtpmap:124 H264/90000\\r\\na=rtcp-fb:124 goog-remb\\r\\na=rtcp-fb:124 transport-cc\\r\\na=rtcp-fb:124 ccm fir\\r\\na=rtcp-fb:124 nack\\r\\na=rtcp-fb:124 nack pli\\r\\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032\\r\\na=rtpmap:119 rtx/90000\\r\\na=fmtp:119 apt=124\\r\\na=rtpmap:123 H264/90000\\r\\na=rtcp-fb:123 goog-remb\\r\\na=rtcp-fb:123 transport-cc\\r\\na=rtcp-fb:123 ccm fir\\r\\na=rtcp-fb:123 nack\\r\\na=rtcp-fb:123 nack pli\\r\\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032\\r\\na=rtpmap:118 rtx/90000\\r\\na=fmtp:118 apt=123\\r\\na=rtpmap:114 red/90000\\r\\na=rtpmap:115 rtx/90000\\r\\na=fmtp:115 apt=114\\r\\na=rtpmap:116 ulpfec/90000\\r\\na=ssrc-group:FID 1330070973 2207934575\\r\\na=ssrc:1330070973 cname:VEO/rU2hhPHuuPu0\\r\\na=ssrc:1330070973 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\\r\\na=ssrc:1330070973 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\\r\\na=ssrc:1330070973 label:745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\\r\\na=ssrc:2207934575 cname:VEO/rU2hhPHuuPu0\\r\\na=ssrc:2207934575 msid:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz 745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\\r\\na=ssrc:2207934575 mslabel:135gqeiEqFDCSBQvkrFA7ZIXRnW4YyXCWJDz\\r\\na=ssrc:2207934575 label:745e25c1-11b3-4a11-8bcc-0a3f8d80a60a\\r\\n\",\"type\":\"offer\"}",
      "{\"type\":\"candidate\",\"label\":0,\"id\":\"0\",\"candidate\":\"candidate:2199032595 1 udp 2122260223 192.168.1.89 50421 typ host generation 0 ufrag O094 network-id 1 network-cost 10\"}"
    ],
    "error_messages": [],
    "client_id": "89012080",
    "ice_server_transports": "",
    "bypass_join_confirmation": "false",
    "wss_url": "wss://apprtc-ws.webrtc.org:443/ws",
    "media_constraints": "{\"audio\": true, \"video\": {\"optional\": [{\"minWidth\": \"1280\"}, {\"minHeight\": \"720\"}], \"mandatory\": {}}}",
    "include_loopback_js": "",
    "header_message": "This is a demo of AppRTC and not an official product like Duo or Meet.",
    "is_loopback": "false",
    "offer_options": "{}",
    "pc_constraints": "{\"optional\": []}",
    "pc_config": "{\"rtcpMuxPolicy\": \"require\", \"bundlePolicy\": \"max-bundle\", \"iceServers\": []}",
    "wss_post_url": "https://apprtc-ws.webrtc.org:443",
    "ice_server_url": "https://appr.tc/v1alpha/iceconfig?key=",
    "warning_messages": [],
    "room_id": "790192954"
  },
  "result": "SUCCESS"
}

ws
加入ws
{"cmd":"register","roomid":"790192954","clientid":"89012080"}

上传SDP : "type\":\"answer\"
{"cmd":"send","msg":"{\"sdp\":\"v=0\\r\\no=- 5124761144050338825 2 IN IP4 127.0.0.1\\r\\ns=-\\r\\nt=0 0\\r\\na=group:BUNDLE 0 1\\r\\na=extmap-allow-mixed\\r\\na=msid-semantic: WMS PvyHNDA1KG9m7mwiXxuZw0t6jS5gK1slEVtL\\r\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 110 112 113 126\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:VoGg\\r\\na=ice-pwd:3BDNnB1TRubalgrp84I8qug8\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 89:A4:F5:30:EA:A6:B1:A4:9D:6A:8A:85:8D:B7:FD:C3:B0:A4:05:6B:31:97:F3:19:0E:4C:BD:63:4D:56:3C:AB\\r\\na=setup:active\\r\\na=mid:0\\r\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:PvyHNDA1KG9m7mwiXxuZw0t6jS5gK1slEVtL ac72faad-b426-4501-baa0-d1f45e262c3d\\r\\na=rtcp-mux\\r\\na=rtpmap:111 opus/48000/2\\r\\na=rtcp-fb:111 transport-cc\\r\\na=fmtp:111 minptime=10;useinbandfec=1\\r\\na=rtpmap:103 ISAC/16000\\r\\na=rtpmap:104 ISAC/32000\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:110 telephone-event/48000\\r\\na=rtpmap:112 telephone-event/32000\\r\\na=rtpmap:113 telephone-event/16000\\r\\na=rtpmap:126 telephone-event/8000\\r\\na=ssrc:4262391127 cname:SbDl2+NlSKabussO\\r\\nm=video 9 UDP/TLS/RTP/SAVPF 98 100 96 97 99 101 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116\\r\\nc=IN IP4 0.0.0.0\\r\\na=rtcp:9 IN IP4 0.0.0.0\\r\\na=ice-ufrag:VoGg\\r\\na=ice-pwd:3BDNnB1TRubalgrp84I8qug8\\r\\na=ice-options:trickle\\r\\na=fingerprint:sha-256 89:A4:F5:30:EA:A6:B1:A4:9D:6A:8A:85:8D:B7:FD:C3:B0:A4:05:6B:31:97:F3:19:0E:4C:BD:63:4D:56:3C:AB\\r\\na=setup:active\\r\\na=mid:1\\r\\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\\r\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\r\\na=extmap:13 urn:3gpp:video-orientation\\r\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\r\\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\r\\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\\r\\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\\r\\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\\r\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\r\\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\r\\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\r\\na=sendrecv\\r\\na=msid:PvyHNDA1KG9m7mwiXxuZw0t6jS5gK1slEVtL 56012d93-126e-451f-8e18-6c3a60f7a445\\r\\na=rtcp-mux\\r\\na=rtcp-rsize\\r\\na=rtpmap:98 VP9/90000\\r\\na=rtcp-fb:98 goog-remb\\r\\na=rtcp-fb:98 transport-cc\\r\\na=rtcp-fb:98 ccm fir\\r\\na=rtcp-fb:98 nack\\r\\na=rtcp-fb:98 nack pli\\r\\na=fmtp:98 profile-id=0\\r\\na=rtpmap:100 VP9/90000\\r\\na=rtcp-fb:100 goog-remb\\r\\na=rtcp-fb:100 transport-cc\\r\\na=rtcp-fb:100 ccm fir\\r\\na=rtcp-fb:100 nack\\r\\na=rtcp-fb:100 nack pli\\r\\na=fmtp:100 profile-id=2\\r\\na=rtpmap:96 VP8/90000\\r\\na=rtcp-fb:96 goog-remb\\r\\na=rtcp-fb:96 transport-cc\\r\\na=rtcp-fb:96 ccm fir\\r\\na=rtcp-fb:96 nack\\r\\na=rtcp-fb:96 nack pli\\r\\na=rtpmap:97 rtx/90000\\r\\na=fmtp:97 apt=96\\r\\na=rtpmap:99 rtx/90000\\r\\na=fmtp:99 apt=98\\r\\na=rtpmap:101 rtx/90000\\r\\na=fmtp:101 apt=100\\r\\na=rtpmap:102 H264/90000\\r\\na=rtcp-fb:102 goog-remb\\r\\na=rtcp-fb:102 transport-cc\\r\\na=rtcp-fb:102 ccm fir\\r\\na=rtcp-fb:102 nack\\r\\na=rtcp-fb:102 nack pli\\r\\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\\r\\na=rtpmap:121 rtx/90000\\r\\na=fmtp:121 apt=102\\r\\na=rtpmap:127 H264/90000\\r\\na=rtcp-fb:127 goog-remb\\r\\na=rtcp-fb:127 transport-cc\\r\\na=rtcp-fb:127 ccm fir\\r\\na=rtcp-fb:127 nack\\r\\na=rtcp-fb:127 nack pli\\r\\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\\r\\na=rtpmap:120 rtx/90000\\r\\na=fmtp:120 apt=127\\r\\na=rtpmap:125 H264/90000\\r\\na=rtcp-fb:125 goog-remb\\r\\na=rtcp-fb:125 transport-cc\\r\\na=rtcp-fb:125 ccm fir\\r\\na=rtcp-fb:125 nack\\r\\na=rtcp-fb:125 nack pli\\r\\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\\r\\na=rtpmap:107 rtx/90000\\r\\na=fmtp:107 apt=125\\r\\na=rtpmap:108 H264/90000\\r\\na=rtcp-fb:108 goog-remb\\r\\na=rtcp-fb:108 transport-cc\\r\\na=rtcp-fb:108 ccm fir\\r\\na=rtcp-fb:108 nack\\r\\na=rtcp-fb:108 nack pli\\r\\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\\r\\na=rtpmap:109 rtx/90000\\r\\na=fmtp:109 apt=108\\r\\na=rtpmap:35 AV1X/90000\\r\\na=rtcp-fb:35 goog-remb\\r\\na=rtcp-fb:35 transport-cc\\r\\na=rtcp-fb:35 ccm fir\\r\\na=rtcp-fb:35 nack\\r\\na=rtcp-fb:35 nack pli\\r\\na=rtpmap:36 rtx/90000\\r\\na=fmtp:36 apt=35\\r\\na=rtpmap:124 H264/90000\\r\\na=rtcp-fb:124 goog-remb\\r\\na=rtcp-fb:124 transport-cc\\r\\na=rtcp-fb:124 ccm fir\\r\\na=rtcp-fb:124 nack\\r\\na=rtcp-fb:124 nack pli\\r\\na=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\\r\\na=rtpmap:119 rtx/90000\\r\\na=fmtp:119 apt=124\\r\\na=rtpmap:123 H264/90000\\r\\na=rtcp-fb:123 goog-remb\\r\\na=rtcp-fb:123 transport-cc\\r\\na=rtcp-fb:123 ccm fir\\r\\na=rtcp-fb:123 nack\\r\\na=rtcp-fb:123 nack pli\\r\\na=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f\\r\\na=rtpmap:118 rtx/90000\\r\\na=fmtp:118 apt=123\\r\\na=rtpmap:114 red/90000\\r\\na=rtpmap:115 rtx/90000\\r\\na=fmtp:115 apt=114\\r\\na=rtpmap:116 ulpfec/90000\\r\\na=ssrc-group:FID 4287818524 659493843\\r\\na=ssrc:4287818524 cname:SbDl2+NlSKabussO\\r\\na=ssrc:659493843 cname:SbDl2+NlSKabussO\\r\\n\",\"type\":\"answer\"}"}

上传candidate
{"cmd":"send","msg":"{\"type\":\"candidate\",\"label\":0,\"id\":\"0\",\"candidate\":\"candidate:2199032595 1 udp 2122260223 192.168.1.89 33313 typ host generation 0 ufrag VoGg network-id 1 network-cost 10\"}"}

# 发起方断线重连

若房间内只剩一个人 ,下发只剩一个人的通知 并要求仅剩的客户端上传offer的SDP 与candidate, 使原发起方成为"房主"来等待接收方来应答"answer"

原发起方来重连时, 调用join接口,则返回另一端的offer的SDP,同时上传自己的answer SDP

##webrtc测试时https的问题
https://blog.csdn.net/sxc1989/article/details/81291320

在chorme中需要在https的情况下才能使用webrtc，在没有正式证书情况下， 可采用以下几种方式。

mac
用命令行启动chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --unsafely-treat-insecure-origin-as-secure="http://192.168.1.250:5500" --user-data-dir=/Users/giaogiao/Downloads/chr

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --unsafely-treat-insecure-origin-as-secure="im.free.svipss.top" --user-data-dir=/Users/giaogiao/Downloads/chr


win
右击chrome游览器图标，选择“属性”，在目标后面加入如下内容：

--unsafely-treat-insecure-origin-as-secure="http://ip:port" --user-data-dir="C:/temp"
1
其中ip、port为服务端地址,–user-data-dir提供一个本地路径即可。


国内IM测试 和正式部署在同一台服务器了.  测试外网启动 传递参数
nohup java -jar -Dnetty.port=9001 -Dserver.port=9002 bootstrap-2.0-test.jar &>/dev/null &

docker run -p 6479:6379 -d --restart=always --name redis6Test redis:6 --appendonly yes --requirepass "axT8knPN5hAP"
docker run -p 3406:3306 --name mysql57Test --restart always  -e MYSQL_ROOT_PASSWORD=JH86uc53r8Ca -d mysql:5.7


#资讯项目 本地开发ios的推送证书
[encoded data, 4232 characters]
com.xteng.Hibro	123456

#资讯项目 测试外网和正式的ios的推送证书
[encoded data, 4380 characters]
com.xteng.Hibro	123456




飞蛙测试外网
https://testws.frogsell.com/api/doc.html#/home

国内IM集成版
正式环境
121.37.208.9
域名



国内IM集成版 测试外网
用探路者原来的空闲服务器
探路者_测试_华为_121.37.234.35
域名:
imapitest.wecloud.cn

web示例:
imwebtest.wecloud.cn


2021年11月05日  <<

## 多端在线 + 服务器集群

本地维护 uid 对应 channel_shortID
map<String id , set<channelId>>>
1123=[channelId_ababab1,channelId_ababab2,channelId_ababab3]

channel_shortID对应client端数据
map<String channelId,ChannelInfo>

channelId_ababab1:{
    deviceTypeId =23123,
    deviceType = ios,
    deviceToken = abdsbsn,
    token = sjn321sdjfsdf
}

channelId_ababab1:{
    deviceType = android,
    deviceToken = abdsbsn,
    token = sjn321sdjfsdf
}
channelId_ababab1:{
     deviceType = web,
     deviceToken = abdsbsn,
     token = null
}

2021年11月05日  >>

1. 增加客户端api: 查询会话成员列表, 字段: client id ,client头像, client的拓展字段,
在该会话的会话成员拓展字段,在该会话的昵称



5. 增加客户端api: 添加或修改client的主昵称





6. 获取token接口 要返回在im系统中的头像和昵称
2.增加客户端api: 添加或修改 client的拓展字段