From 65af3db0b29da779668df3970a2df4f59e5e6d40 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 2 Jan 2024 07:31:06 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E6=97=A5=E5=B8=B8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Docker.md | 2 +- docs/Protocol.md | 705 +++++++++++++++++++++++++++++------------------ docs/TODO.md | 2 - docs/WebRTC.md | 43 --- 4 files changed, 437 insertions(+), 315 deletions(-) diff --git a/docs/Docker.md b/docs/Docker.md index 4365513..6e38b2a 100644 --- a/docs/Docker.md +++ b/docs/Docker.md @@ -115,4 +115,4 @@ services: - /etc/localtime:/etc/localtime:ro environment: - TZ=Asia/Shanghai -``` \ No newline at end of file +``` diff --git a/docs/Protocol.md b/docs/Protocol.md index f456d2f..6df32dd 100644 --- a/docs/Protocol.md +++ b/docs/Protocol.md @@ -19,8 +19,8 @@ ### 符号解释 ``` --[消息类型]> 异步请求 | 单播 -=[消息类型]> 同步请求 +-[消息类型]> 异步请求 | 单播消息 +=[消息类型]> 同步请求:到达目标终端后沿原路返回 -[消息类型]) 全员广播:对所有的终端广播信令(排除自己) +[消息类型]) 全员广播:对所有的终端广播信令(包含自己) ...:其他自定义的透传内容 @@ -56,27 +56,31 @@ ### 关闭终端信令(client::close) -同时释放所有资源,所以如果终端意外掉线重连,需要终端实现音视频重连逻辑。 +信令连接断开以后执行,同时释放所有资源。 +如果终端意外掉线,需要自己实现重连逻辑。 ``` # 消息主体 {} # 数据流向 -终端->信令服务->终端 -终端->信令服务-[终端下线])终端 +终端=>信令服务 +终端=[关闭终端]>信令服务-[终端下线])终端 +终端-[连接断开]>信令服务-[终端下线])终端 ``` ### 终端配置信令(client::config) +终端应该在收到配置之后进行媒体操作 + ``` # 消息主体 { - "media": "媒体配置(可选)", - "webrtc": "WebRTC配置(可选)", + "media" : "媒体配置(可选)", + "webrtc" : "WebRTC配置(可选)", "datetime": "日期时间(yyyyMMddHHmmss)" } # 数据流向 -终端=[终端注册]>信令服务->终端 +终端=[终端注册]>信令服务-[终端配置]>终端 ``` ### 终端心跳信令(client::heartbeat) @@ -84,18 +88,19 @@ ``` # 消息主体 { - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} } # 数据流向 终端->信令服务->终端 @@ -112,27 +117,28 @@ } [ { - "ip": "终端IP", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "ip" : "终端IP", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} }, ... ] # 数据流向 -终端->信令服务->终端 +终端=>信令服务 ``` ### 终端下线信令(client::offline) @@ -143,7 +149,8 @@ "clientId": "下线终端ID" } # 数据流向 -终端-[终端关闭]>信令服务-)终端 +终端=[关闭终端]>信令服务-[终端下线])终端 +终端-[连接断开]>信令服务-[终端下线])终端 ``` ### 终端上线信令(client::online) @@ -151,22 +158,23 @@ ``` # 消息主体 { - "ip": "终端IP", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "ip" : "终端IP", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} } # 数据流向 终端=[终端注册]>信令服务-)终端 @@ -183,29 +191,32 @@ ### 终端注册信令(client::register) +收到注册响应之后应该设置终端的终端索引 + ``` # 消息主体 { - "username": "信令用户", - "password": "信令密码", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "username" : "信令用户", + "password" : "信令密码", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} } # 数据流向 -终端=>信令服务->终端 +终端=>信令服务 终端=>信令服务-[终端配置]>终端 终端=>信令服务-[终端上线])终端 ``` @@ -229,25 +240,26 @@ "clientId": "终端ID(可选)" } { - "ip": "终端IP", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "ip" : "终端IP", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} } # 数据流向 -终端->信令服务->终端 +终端=>信令服务 ``` ### 终端单播信令(client::unicast) @@ -265,26 +277,17 @@ 终端->信令服务->终端 ``` -### 终端唤醒信令(client::wakeup) - -``` -# 消息主体 -{} -# 数据流向 -信令服务->终端 -``` - ### 响铃信令(control::bell) ``` # 消息主体 { - "to": "目标终端ID", + "to" : "目标终端ID", "enabled": 是否响铃(true|false) } # 数据流向 -信令服务->终端 -终端->信令服务->终端 +信令服务=>终端 +终端=>信令服务->终端 ``` ### 终端录像信令(control::client::record) @@ -292,16 +295,16 @@ ``` # 消息主体 { - "to": "目标终端ID", + "to" : "目标终端ID", "enabled": 是否录像(true|false) } { - "enabled": 是否录像(true|false), + "enabled" : 是否录像(true|false), "filepath": "视频文件路径" } # 数据流向 -信令服务->目标终端->信令服务 -终端=>信令服务->目标终端->信令服务->终端 +信令服务=>终端 +终端=>信令服务->终端 ``` ### 配置音频信令(control::config::audio) @@ -315,7 +318,7 @@ ...MediaAudioProperties } # 数据流向 -信令服务->终端 +信令服务=>终端 终端=>信令服务->终端 ``` @@ -330,7 +333,7 @@ ...MediaVideoProperties } # 数据流向 -信令服务->终端 +信令服务=>终端 终端=>信令服务->终端 ``` @@ -345,8 +348,8 @@ "filepath": "图片文件路径" } # 数据流向 -信令服务->目标终端->信令服务 -终端=>信令服务->目标终端->信令服务->终端 +信令服务=>终端 +终端=>信令服务->终端 ``` ### 服务端录像信令(control::server::record) @@ -368,22 +371,34 @@ 终端=>信令服务->终端 ``` +### 终端唤醒信令(control::wakeup) + +``` +# 消息主体 +{ + "to": "目标终端ID" +} +# 数据流向 +信令服务=>终端 +终端=>信令服务->终端 +``` + ### 终端音量信令(media::audio::volume) ``` # 消息主体 { - "roomId": "房间ID", - "volumes" : [ + "roomId" : "房间ID", + "volumes": [ { - "volume": 音量, + "volume" : 音量, "clientId": "终端ID" }, ... ] } # 数据流向 -媒体服务->信令服务->终端 +媒体服务->信令服务-)终端 ``` ### 消费媒体信令(media::consume) @@ -395,26 +410,56 @@ ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID", "producerId": "生产者ID" } +{ + "roomId" : "房间ID", + "clientId" : "消费者ID", + "sourceId" : "生产者ID", + "streamId" : "媒体ID", + "producerId" : "生产者ID", + "consumerId" : "消费者ID", + "kind" : "消费者媒体类型", + "type" : "消费者类型", + "appData" : "APP数据", + "rtpParameters" : "RTP参数", + "producerPaused": "生产者是否暂停", +} # 数据流向 -终端-[生产媒体]>信令服务-[其他终端消费])信令服务 -终端-[创建WebRTC消费通道]>信令服务-[消费其他终端])信令服务 -终端->信令服务->媒体服务=>信令服务->终端->信令服务->媒体服务 +终端->信令服务->媒体服务=>信令服务->终端 +终端-[生产媒体]>信令服务-[消费媒体])信令服务=>信令服务->终端 +终端-[创建WebRTC通道]>信令服务-[消费媒体])信令服务=>信令服务->终端 ``` ### 关闭消费者信令(media::consumer::close) +关闭通过回调实现所以不能同步响应 + ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "消费者ID" } # 数据流向 -媒体服务->信令服务-)终端 -终端->信令服务->媒体服务->信令服务+)终端 +媒体服务->信令服务->终端 +信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务->信令服务->终端 +``` + +### 消费者空间层和时间层改变信令(media::consumer::layers::change) + +``` +# 消息主体 +{ + "roomId" : "房间ID" + "consumerId" : "消费者ID", + "spatialLayer" : 最佳空间层, + "temporalLayer": 最佳时间层 +} +# 数据流向 +媒体服务->信令服务+)终端 ``` ### 暂停消费者信令(media::consumer::pause) @@ -422,11 +467,12 @@ ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "消费者ID" } # 数据流向 终端->信令服务->媒体服务->信令服务->终端 +终端-[暂停生产者]>信令服务->媒体服务-[暂停消费者]>信令服务->终端 ``` ### 请求关键帧信令(media::consumer::request::key::frame) @@ -434,11 +480,11 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "consumerId": "消费者ID" } # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务 ``` ### 恢复消费者信令(media::consumer::resume) @@ -446,11 +492,12 @@ ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "消费者ID" } # 数据流向 终端->信令服务->媒体服务->信令服务->终端 +终端-[恢复生产者]>信令服务->媒体服务-[恢复消费者]>信令服务->终端 ``` ### 媒体消费者评分信令(media::consumer::score) @@ -458,12 +505,16 @@ ``` # 消息主体 { - "score": "消费者RTP流得分表示传输质量:0~10", - "producerScore": "生产者RTP流得分表示传输质量:0~10", - "producerScores": [所有生产者RTP流得分] + "roomId" : "房间ID" + "consumerId": "消费者ID" + "score" : { + "score" : 消费者RTP流得分表示传输质量:0~10, + "producerScore" : 生产者RTP流得分表示传输质量:0~10, + "producerScores": [Simulcast生产者RTP流得分] + } } # 数据流向 -媒体服务->信令服务->终端 +媒体服务->信令服务+)终端 ``` ### 修改最佳空间层和时间层信令(media::consumer::set::preferred::layers) @@ -471,26 +522,28 @@ ``` # 消息主体 { - "roomId": "房间ID", - "consumerId": "消费者ID", - "spatialLayer": 最佳空间层, + "roomId" : "房间ID", + "consumerId" : "消费者ID", + "spatialLayer" : 最佳空间层, "temporalLayer": 最佳时间层 } # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务 ``` ### 设置消费者优先级信令(media::consumer::set::priority) +如果优先级不在范围内表示取消优先级设置 + ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "consumerId": "消费者ID", - "priority": 优先级(1~255) + "priority" : 优先级(1~255) } # 数据流向 -终端->信令服务->终端 +终端->信令服务->媒体服务 ``` ### 查询消费者状态信令(media::consumer::status) @@ -498,11 +551,18 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "consumerId": "消费者ID" } +{ + "roomId" : "房间ID", + "consumerId": "消费者ID", + "status" : [ + ...状态信息 + ] +} # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 消费数据信令(media::data::consume) @@ -512,24 +572,27 @@ ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "producerId": "生产者ID", } # 数据流向 -终端=>信令服务->媒体服务->信令服务->媒体服务 +终端->信令服务->媒体服务->信令服务->终端 ``` ### 关闭数据消费者信令(media::data::consumer::close) +关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开 + ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "数据消费者ID" } # 数据流向 -媒体服务->信令服务-)终端 -终端->信令服务->媒体服务->信令服务+)终端 +媒体服务->信令服务->终端 +信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务->信令服务->终端 ``` ### 查询数据消费者状态信令(media::data::consumer::status) @@ -537,11 +600,18 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "consumerId": "数据消费者ID" } +{ + "roomId" : "房间ID", + "consumerId": "数据消费者ID", + "status" : [ + ...状态信息 + ] +} # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 生产数据信令(media::data::produce) @@ -549,23 +619,31 @@ ``` # 消息主体 { - "roomId": "房间标识", + "roomId" : "房间标识", "transportId": "通道标识" } +{ + "roomId" : "房间ID", + "producerId": "生产者ID", +} # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 关闭数据生产者信令(media::data::producer::close) +关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开 + ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "数据生产者ID" } # 数据流向 -终端->信令服务->媒体服务->信令服务+)终端 +媒体服务->信令服务->终端 +信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务->信令服务->终端 ``` ### 查询数据生产者状态信令(media::data::producer::status) @@ -573,11 +651,18 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "producerId": "数据生产者ID" } +{ + "roomId" : "房间ID", + "producerId": "数据生产者ID", + "status" : [ + ...状态信息 + ] +} # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 重启ICE信令(media::ice::restart) @@ -585,16 +670,16 @@ ``` # 消息主体 { - "roomId": "房间标识", + "roomId" : "房间标识", "transportId": "通道标识" } { - "roomId": "房间标识", - "transportId": "通道标识", + "roomId" : "房间标识", + "transportId" : "通道标识", "iceParameters": "iceParameters" } # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 生产媒体信令(media::produce) @@ -602,25 +687,34 @@ ``` # 消息主体 { - "kind": "媒体类型", - "roomId": "房间标识", - "transportId": "通道标识", + "kind" : "媒体类型", + "roomId" : "房间ID", + "transportId" : "通道ID", "rtpParameters": "rtpParameters" } +{ + "kind" : "媒体类型", + "roomId" : "房间ID", + "producerId": "生产者ID", +} # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 关闭生产者信令(media::producer::close) +关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开 + ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "consumerId": "生产者ID" } # 数据流向 -终端->信令服务->媒体服务->信令服务+)终端 +媒体服务->信令服务->终端 +信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务->信令服务->终端 ``` ### 暂停生产者信令(media::producer::pause) @@ -628,8 +722,8 @@ ``` # 消息主体 { - "roomId": "房间ID" - "producerId": "消费者ID" + "roomId" : "房间ID" + "producerId": "生产者ID" } # 数据流向 终端->信令服务->媒体服务->信令服务->终端 @@ -640,8 +734,8 @@ ``` # 消息主体 { - "roomId": "房间ID" - "producerId": "消费者ID" + "roomId" : "房间ID" + "producerId": "生产者ID" } # 数据流向 终端->信令服务->媒体服务->信令服务->终端 @@ -651,9 +745,15 @@ ``` # 消息主体 -{} +{ + "roomId" : "房间ID" + "consumerId": "消费者ID" + "score" : { + ...生产者评分 + } +} # 数据流向 -媒体服务->信令服务->终端 +媒体服务->信令服务+)终端 ``` ### 查询生产者状态信令(media::producer::status) @@ -661,11 +761,18 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "producerId": "生产者ID" } +{ + "roomId" : "房间ID", + "producerId": "生产者ID", + "status" : [ + ...状态信息 + ] +} # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 路由RTP协商信令(media::router::rtp::capabilities) @@ -675,56 +782,58 @@ { "roomId": "房间标识" } -{ - "codec": "编码解码", +"roomId" : "房间标识", +"rtpCapabilities": { + "codec" : "编码解码", "headerExtensions": "扩展" } # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 -``` - -### 设置路由类型信令(media::set::router::type) - -``` -# 消息主体 -{ - "roomId": "房间ID" - "routerType": "路由类型" -} -# 数据流向 -终端->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 关闭通道信令(media::transport::close) +关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开 + ``` # 消息主体 { - "roomId": "房间ID" + "roomId" : "房间ID" "transportId": "通道ID" } # 数据流向 -终端->信令服务->媒体服务->信令服务+)终端 +媒体服务->信令服务->终端 +信令服务->媒体服务->信令服务->终端 +终端->信令服务->媒体服务->信令服务->终端 ``` -### 创建RTP输入通道信令(media::transport::plain) +### 创建RTP输入通道信令(media::transport::plain::create) + +用来接入RTP协议终端 ``` # 消息主体 { - "roomId": "房间ID", - "rtcpMux": RTP和RTCP端口复用(true|false), - "comedia": 自动终端端口(true|false), - "enableSctp": 是否开启sctp(true|false), - "numSctpStreams": sctp数量, - "enableSrtp": 是否开启srtp(true|false), + "roomId" : "房间ID", + "rtcpMux" : RTP/RTCP端口复用(true|false), + "comedia" : 自动识别终端端口(true|false), + "enableSctp" : 是否开启SCTP(true|false), + "numSctpStreams" : SCTP数量, + "enableSrtp" : 是否开启SRTP(true|false), "srtpCryptoSuite": { "cryptoSuite": "算法(AEAD_AES_256_GCM|AEAD_AES_128_GCM|AES_CM_128_HMAC_SHA1_80|AES_CM_128_HMAC_SHA1_32)", - "keyBase64": "密钥" + "keyBase64" : "密钥" } } +{ + roomId : "房间ID", + transportId: "通道ID", + ip : "RTP监听IP", + port : "RTP媒体端口", + rtcpPort : "RTP媒体RTCP端口" +} # 数据流向 -终端->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 查询通道状态信令(media::transport::status) @@ -732,20 +841,35 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "transportId": "通道ID" } +{ + "roomId" : "房间ID", + "transportId": "通道ID", + "status" : [ + ...状态信息 + ] +} # 数据流向 -终端=>信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 连接WebRTC通道信令(media::transport::webrtc::connect) ``` # 消息主体 - +{ + "roomId" : "房间ID", + "transportId" : "通道ID", + "dtlsParameters": "DTLS参数" +} +{ + "roomId" : "房间ID", + "transportId" : "传输通道标识" +} # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 创建WebRTC通道信令(media::transport::webrtc::create) @@ -753,25 +877,35 @@ ``` # 消息主体 { - "roomId": "房间标识" + "roomId" : "房间ID", + "forceTcp" : "强制使用TCP", + "producing" : "是否生产", + "consuming" : "是否消费", + "sctpCapabilities": "sctpCapabilities" } { - "roomId": "房间标识", - "transportId": "传输通道标识", - "iceCandidates": "iceCandidates", - "iceParameters": "iceParameters", + "roomId" : "房间ID", + "transportId" : "传输通道ID", + "iceCandidates" : "iceCandidates", + "iceParameters" : "iceParameters", "dtlsParameters": "dtlsParameters", "sctpParameters": "sctpParameters" } # 数据流向 -终端->信令服务->媒体服务->信令服务->终端 +终端=>信令服务->媒体服务 ``` ### 视频方向变化信令(media::video::orientation::change) ``` # 消息主体 - +{ + "roomId" : "房间ID", + "producerId": "生产者ID", + "flip" : "是否翻转", + "camera" : "是否摄像头", + "rotation" : "旋转角度" +} # 数据流向 媒体服务->信令服务->终端 ``` @@ -782,7 +916,8 @@ # 消息主体 {} # 数据流向 -终端->信令服务->终端 +终端=>信令服务 +信令服务->终端 ``` ### 重启平台信令(platform::reboot) @@ -792,6 +927,7 @@ {} # 数据流向 信令服务+)终端 +终端=>信令服务 终端->信令服务+)终端 ``` @@ -806,7 +942,7 @@ "result": "结果" } # 数据流向 -终端->信令服务->终端 +终端=>信令服务 ``` ### 关闭平台信令(platform::shutdown) @@ -816,6 +952,7 @@ {} # 数据流向 信令服务+)终端 +终端=>信令服务 终端->信令服务+)终端 ``` @@ -840,27 +977,29 @@ } [ { - "ip": "终端IP", - "name": "终端名称", - "clientId": "终端ID", - "clientType": "终端类型", - "latitude": 纬度, - "longitude": 经度, - "humidity": 湿度, - "temperature": 温度, - "signal": 信号强度(0~100), - "battery": 电池电量(0~100), - "alarming": 是否发生告警(true|false), - "charging": 是否正在充电(true|false), - "recording": 是否正在录像(true|false), - "lastHeartbeat": "最后心跳时间", - "status": {更多状态}, - "config": {更多配置} + "ip" : "终端IP", + "name" : "终端名称", + "clientId" : "终端ID", + "clientType" : "终端类型", + "latitude" : 纬度, + "longitude" : 经度, + "humidity" : 湿度, + "temperature" : 温度, + "signal" : 信号强度(0~100), + "battery" : 电池电量(0~100), + "alarming" : 是否发生告警(true|false), + "charging" : 是否正在充电(true|false), + "clientRecording": 是否正在录像(true|false), + "serverRecording": 是否正在录像(true|false), + "lastHeartbeat" : "最后心跳时间", + "status" : {更多状态}, + "config" : {更多配置} }, ... ] # 数据流向 -终端=>信令服务->终端 +终端=>信令服务 +终端=[进入房间]>信令服务->终端 ``` ### 房间终端ID信令(room::client::list::id) @@ -870,14 +1009,21 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "clientId": "终端ID(可选)" } { - ... + "roomId" : "房间ID", + "clientId" : "终端ID", + "dataProducers" : "数据生产者ID集合", + "dataConsumers" : "数据消费者ID集合", + "audioProducers": "音频生产者ID集合", + "videoProducers": "视频生产者ID集合", + "audioConsumers": "音频消费者ID集合", + "videoConsumers": "视频消费者ID集合" } # 数据流向 -终端=>信令服务->终端 +终端=>信令服务 ``` ### 关闭房间信令(room::close) @@ -888,7 +1034,7 @@ "roomId": "房间ID" } # 数据流向 -终端->信令服务+)终端 +终端->信令服务->媒体服务->信令服务+)终端 ``` ### 创建房间信令(room::create) @@ -896,17 +1042,19 @@ ``` # 消息主体 { - "name": "房间名称", - "passowrd": "房间密码(选填)", + "name" : "房间名称", + "passowrd" : "房间密码(选填)", "mediaClientId": "媒体服务ID" } { - "name": "房间名称", - "clientSize": "终端数量", + "roomId" : "房间ID", + "name" : "房间名称", + "clientSize" : "终端数量", "mediaClientId": "媒体服务ID" } # 数据流向 -终端->信令服务->媒体服务->信令服务+)终端 +终端=>信令服务->媒体服务 +终端->信令服务->媒体服务->信令服务-)终端 ``` ### 进入房间信令(room::enter) @@ -914,23 +1062,26 @@ ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "password": "房间密码(选填)" } { - "roomId": "房间标识", + "roomId" : "房间标识", "clientId": "终端标识" } # 数据流向 +终端=>信令服务 终端->信令服务-)终端 ``` ### 踢出房间信令(room::expel) +终端收到信令以后调用离开房间信令离开房间,没有实现强制在服务端提出。 + ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "clientId": "终端ID" } # 数据流向 @@ -939,10 +1090,12 @@ ### 邀请终端信令(room::invite) +终端收到信令以后调用进入房间信令进入房间 + ``` # 消息主体 { - "roomId": "房间ID", + "roomId" : "房间ID", "clientId": "终端ID", "password": "密码(选填)" } @@ -955,6 +1108,10 @@ ``` # 消息主体 { + "roomId": "房间ID" +} +{ + "roomId" : "房间ID" "clientId": "离开终端ID" } # 数据流向 @@ -966,23 +1123,29 @@ ``` # 消息主体 +{ + "roomId": "房间ID" +} [ { - "name": "房间名称", - "passowrd": "房间密码", - "clientSize": "终端数量", + "name" : "房间名称", + "passowrd" : "房间密码", + "clientSize" : "终端数量", "mediaClientId": "媒体服务标识" }, ... ] # 数据流向 -终端->信令服务->终端 +终端=>信令服务 ``` ### 房间状态信令(room::status) ``` # 消息主体 +{ + "roomId": "房间ID" +} { "name" : "房间名称", "passowrd" : "房间密码", @@ -990,7 +1153,7 @@ "mediaClientId": "媒体服务标识" } # 数据流向 -终端=>信令服务->终端 +终端=>信令服务 ``` ### 发起会话信令(session::call) @@ -998,12 +1161,16 @@ ``` # 消息主体 { - "clientId": "接收者ID", + "clientId": "目标ID", "audio" : 是否需要声音(true|false), "video" : 是否需要视频(true|false) } +{ + "name" : "终端名称", + "clientId" : "终端ID", + "sessionId": "会话ID" +} # 数据流向 -终端->信令服务->终端 终端=>信令服务->终端 ``` @@ -1012,9 +1179,10 @@ ``` # 消息主体 { + "sessionId": "会话ID" } # 数据流向 -终端->信令服务+)终端 +终端->信令服务->终端 ``` ### 媒体交换信令(session::exchange) @@ -1027,22 +1195,17 @@ ``` # 消息主体 { - "sdp": "sdp" - "type": "offer", + "sdp" : "sdp" + "type" : "offer|answer", "sessionId": "会话ID" } { - "sdp": "sdp" - "type": "answer", - "sessionId": "会话ID" -} -{ - "type": "candidate", + "type" : "candidate", "sessionId": "会话ID", "candidate": { - "sdpMid": "sdpMid", - "candidate": "candidate信息", - "sdpMLineIndex":sdpMLineIndex + "sdpMid" : "sdpMid", + "candidate" : "candidate", + "sdpMLineIndex": sdpMLineIndex } } # 数据流向 @@ -1080,43 +1243,47 @@ { "diskspace": [ { - "path": "存储路径", - "free": 存储空闲, + "path" : "存储路径", + "free" : 存储空闲, "total": 存储总量 }, ... ], - "maxMemory": 最大能用内存, - "freeMemory": 空闲内存, - "totalMemory": 已用内存, - "osArch": "系统架构", - "osName": "系统名称", - "osVersion": "系统版本", - "javaVmName": "虚拟机名称", - "javaVersion": "虚拟机版本", + "maxMemory" : 最大能用内存, + "freeMemory" : 空闲内存, + "totalMemory" : 已用内存, + "osArch" : "系统架构", + "osName" : "系统名称", + "osVersion" : "系统版本", + "javaVmName" : "虚拟机名称", + "javaVersion" : "虚拟机版本", "cpuProcessors": CPU核心数量 } # 数据流向 -终端->信令服务->终端 +终端=>信令服务 ``` ### 重启系统信令(system::reboot) +重启系统 + ``` # 消息主体 {} # 数据流向 信令服务+)终端 -终端->信令服务+)终端 +终端=>信令服务+)终端 ``` ### 关闭系统信令(system::shutdown) +关闭系统 + ``` # 消息主体 {} # 数据流向 信令服务+)终端 -终端->信令服务+)终端 +终端=>信令服务+)终端 ``` diff --git a/docs/TODO.md b/docs/TODO.md index dc3cd88..9e61b63 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -35,7 +35,5 @@ * 存在TURN服务优先使用 * 安卓关闭视频没有删除预览 * 浏览器WebRTC监控页面关闭:`chrome://webrtc-internals/` -* me -> this -* console -> platformError ## 完成任务 diff --git a/docs/WebRTC.md b/docs/WebRTC.md index 5f83ab5..4262002 100644 --- a/docs/WebRTC.md +++ b/docs/WebRTC.md @@ -128,46 +128,3 @@ cmake . -B build \ make -C build make install -C build ``` - -## Linux(鸿蒙) - -``` -# 编译工具 -mkdir -p /data -cd /data -git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git - -# 下载源码 -mkdir -p /data/webrtc -cd /data/webrtc -/data/depot_tools/fetch --nohooks webrtc -#/data/depot_tools/gclient sync - -# 切换分支 -cd src -git checkout -b m94 branch-heads/4606 -/data/depot_tools/gclient sync - -# 编译依赖 -./build/install-build-deps.sh - -# 鸿蒙工具 -wget https://repo.huaweicloud.com/openharmony/os/4.0-Release/ohos-sdk-windows_linux-public.tar.gz - -# 编译项目 -./buildtools/linux64/gn gen out/Release-clang-x64 --args='target_os="linux" target_cpu="x64" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false' -./third_party/depot_tools/ninja -C out/Release-clang-x64 - -./buildtools/linux64/gn gen out/Release-clang-x86 --args='target_os="linux" target_cpu="x86" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false' -./third_party/depot_tools/ninja -C out/Release-clang-x86 - -./build/linux/sysroot_scripts/install-sysroot.py --arch=arm -./buildtools/linux64/gn gen out/Release-clang-arm --args='target_os="linux" target_cpu="arm" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false' -./third_party/depot_tools/ninja -C out/Release-clang-arm - -./build/linux/sysroot_scripts/install-sysroot.py --arch=arm64 -./buildtools/linux64/gn gen out/Release-clang-arm64 --args='target_os="linux" target_cpu="arm64" is_clang=true is_debug=false use_rtti=true rtc_use_h264=true use_custom_libcxx=true rtc_include_tests=false is_component_build=false treat_warnings_as_errors=false rtc_build_examples=false' -./third_party/depot_tools/ninja -C out/Release-clang-arm64 -``` - -* https://github.com/webrtc-sdk/webrtc-build/blob/main/docs/build.md