[*] 日常优化

This commit is contained in:
acgist
2024-01-02 07:31:06 +08:00
parent 4a7c3d12cc
commit 65af3db0b2
4 changed files with 437 additions and 315 deletions

View File

@@ -19,8 +19,8 @@
### 符号解释
```
-[消息类型]> 异步请求 | 单播
=[消息类型]> 同步请求
-[消息类型]> 异步请求 | 单播消息
=[消息类型]> 同步请求:到达目标终端后沿原路返回
-[消息类型]) 全员广播:对所有的终端广播信令(排除自己)
+[消息类型]) 全员广播:对所有的终端广播信令(包含自己)
...:其他自定义的透传内容
@@ -56,18 +56,22 @@
### 关闭终端信令client::close
同时释放所有资源,所以如果终端意外掉线重连,需要终端实现音视频重连逻辑
信令连接断开以后执行,同时释放所有资源。
如果终端意外掉线,需要自己实现重连逻辑。
```
# 消息主体
{}
# 数据流向
终端->信令服务->终端
终端->信令服务-[终端下线])终端
终端=>信令服务
终端=[关闭终端]>信令服务-[终端下线])终端
终端-[连接断开]>信令服务-[终端下线])终端
```
### 终端配置信令client::config
终端应该在收到配置之后进行媒体操作
```
# 消息主体
{
@@ -76,7 +80,7 @@
"datetime": "日期时间yyyyMMddHHmmss"
}
# 数据流向
终端=[终端注册]>信令服务->终端
终端=[终端注册]>信令服务-[终端配置]>终端
```
### 终端心跳信令client::heartbeat
@@ -92,7 +96,8 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
@@ -124,7 +129,8 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
@@ -132,7 +138,7 @@
...
]
# 数据流向
终端->信令服务->终端
终端=>信令服务
```
### 终端下线信令client::offline
@@ -143,7 +149,8 @@
"clientId": "下线终端ID"
}
# 数据流向
终端-[终端关闭]>信令服务-)终端
终端=[关闭终端]>信令服务-[终端下线])终端
终端-[连接断开]>信令服务-[终端下线])终端
```
### 终端上线信令client::online
@@ -163,7 +170,8 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
@@ -183,6 +191,8 @@
### 终端注册信令client::register
收到注册响应之后应该设置终端的终端索引
```
# 消息主体
{
@@ -199,13 +209,14 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
}
# 数据流向
终端=>信令服务->终端
终端=>信令服务
终端=>信令服务-[终端配置]>终端
终端=>信令服务-[终端上线])终端
```
@@ -241,13 +252,14 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
}
# 数据流向
终端->信令服务->终端
终端=>信令服务
```
### 终端单播信令client::unicast
@@ -265,15 +277,6 @@
终端->信令服务->终端
```
### 终端唤醒信令client::wakeup
```
# 消息主体
{}
# 数据流向
信令服务->终端
```
### 响铃信令control::bell
```
@@ -283,8 +286,8 @@
"enabled": 是否响铃true|false
}
# 数据流向
信令服务->终端
终端->信令服务->终端
信令服务=>终端
终端=>信令服务->终端
```
### 终端录像信令control::client::record
@@ -300,8 +303,8 @@
"filepath": "视频文件路径"
}
# 数据流向
信令服务->目标终端->信令服务
终端=>信令服务->目标终端->信令服务->终端
信令服务=>终端
终端=>信令服务->终端
```
### 配置音频信令control::config::audio
@@ -315,7 +318,7 @@
...MediaAudioProperties
}
# 数据流向
信令服务->终端
信令服务=>终端
终端=>信令服务->终端
```
@@ -330,7 +333,7 @@
...MediaVideoProperties
}
# 数据流向
信令服务->终端
信令服务=>终端
终端=>信令服务->终端
```
@@ -345,8 +348,8 @@
"filepath": "图片文件路径"
}
# 数据流向
信令服务->目标终端->信令服务
终端=>信令服务->目标终端->信令服务->终端
信令服务=>终端
终端=>信令服务->终端
```
### 服务端录像信令control::server::record
@@ -368,6 +371,18 @@
终端=>信令服务->终端
```
### 终端唤醒信令control::wakeup
```
# 消息主体
{
"to": "目标终端ID"
}
# 数据流向
信令服务=>终端
终端=>信令服务->终端
```
### 终端音量信令media::audio::volume
```
@@ -383,7 +398,7 @@
]
}
# 数据流向
媒体服务->信令服务->终端
媒体服务->信令服务-)终端
```
### 消费媒体信令media::consume
@@ -395,17 +410,32 @@
```
# 消息主体
{
"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
关闭通过回调实现所以不能同步响应
```
# 消息主体
{
@@ -413,8 +443,23 @@
"consumerId": "消费者ID"
}
# 数据流向
媒体服务->信令服务-)终端
终端->信令服务->媒体服务->信令服务+)终端
媒体服务->信令服务->终端
信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务->信令服务->终端
```
### 消费者空间层和时间层改变信令media::consumer::layers::change
```
# 消息主体
{
"roomId" : "房间ID"
"consumerId" : "消费者ID",
"spatialLayer" : 最佳空间层,
"temporalLayer": 最佳时间层
}
# 数据流向
媒体服务->信令服务+)终端
```
### 暂停消费者信令media::consumer::pause
@@ -427,6 +472,7 @@
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端-[暂停生产者]>信令服务->媒体服务-[暂停消费者]>信令服务->终端
```
### 请求关键帧信令media::consumer::request::key::frame
@@ -438,7 +484,7 @@
"consumerId": "消费者ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务
```
### 恢复消费者信令media::consumer::resume
@@ -451,6 +497,7 @@
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端-[恢复生产者]>信令服务->媒体服务-[恢复消费者]>信令服务->终端
```
### 媒体消费者评分信令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
@@ -477,11 +528,13 @@
"temporalLayer": 最佳时间层
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务
```
### 设置消费者优先级信令media::consumer::set::priority
如果优先级不在范围内表示取消优先级设置
```
# 消息主体
{
@@ -490,7 +543,7 @@
"priority" : 优先级1~255
}
# 数据流向
终端->信令服务->终端
终端->信令服务->媒体服务
```
### 查询消费者状态信令media::consumer::status
@@ -501,8 +554,15 @@
"roomId" : "房间ID",
"consumerId": "消费者ID"
}
{
"roomId" : "房间ID",
"consumerId": "消费者ID",
"status" : [
...状态信息
]
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 消费数据信令media::data::consume
@@ -516,11 +576,13 @@
"producerId": "生产者ID",
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->媒体服务
终端->信令服务->媒体服务->信令服务->终端
```
### 关闭数据消费者信令media::data::consumer::close
关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开
```
# 消息主体
{
@@ -528,8 +590,9 @@
"consumerId": "数据消费者ID"
}
# 数据流向
媒体服务->信令服务-)终端
终端->信令服务->媒体服务->信令服务+)终端
媒体服务->信令服务->终端
信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务->信令服务->终端
```
### 查询数据消费者状态信令media::data::consumer::status
@@ -540,8 +603,15 @@
"roomId" : "房间ID",
"consumerId": "数据消费者ID"
}
{
"roomId" : "房间ID",
"consumerId": "数据消费者ID",
"status" : [
...状态信息
]
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 生产数据信令media::data::produce
@@ -552,12 +622,18 @@
"roomId" : "房间标识",
"transportId": "通道标识"
}
{
"roomId" : "房间ID",
"producerId": "生产者ID",
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 关闭数据生产者信令media::data::producer::close
关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开
```
# 消息主体
{
@@ -565,7 +641,9 @@
"consumerId": "数据生产者ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务+)终端
媒体服务->信令服务->终端
信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务->信令服务->终端
```
### 查询数据生产者状态信令media::data::producer::status
@@ -576,8 +654,15 @@
"roomId" : "房间ID",
"producerId": "数据生产者ID"
}
{
"roomId" : "房间ID",
"producerId": "数据生产者ID",
"status" : [
...状态信息
]
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 重启ICE信令media::ice::restart
@@ -594,7 +679,7 @@
"iceParameters": "iceParameters"
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 生产媒体信令media::produce
@@ -603,16 +688,23 @@
# 消息主体
{
"kind" : "媒体类型",
"roomId": "房间标识",
"transportId": "通道标识",
"roomId" : "房间ID",
"transportId" : "通道ID",
"rtpParameters": "rtpParameters"
}
{
"kind" : "媒体类型",
"roomId" : "房间ID",
"producerId": "生产者ID",
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 关闭生产者信令media::producer::close
关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开
```
# 消息主体
{
@@ -620,7 +712,9 @@
"consumerId": "生产者ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务+)终端
媒体服务->信令服务->终端
信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务->信令服务->终端
```
### 暂停生产者信令media::producer::pause
@@ -629,7 +723,7 @@
# 消息主体
{
"roomId" : "房间ID"
"producerId": "消费者ID"
"producerId": "生产者ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
@@ -641,7 +735,7 @@
# 消息主体
{
"roomId" : "房间ID"
"producerId": "消费者ID"
"producerId": "生产者ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务->终端
@@ -651,9 +745,15 @@
```
# 消息主体
{}
{
"roomId" : "房间ID"
"consumerId": "消费者ID"
"score" : {
...生产者评分
}
}
# 数据流向
媒体服务->信令服务->终端
媒体服务->信令服务+)终端
```
### 查询生产者状态信令media::producer::status
@@ -664,8 +764,15 @@
"roomId" : "房间ID",
"producerId": "生产者ID"
}
{
"roomId" : "房间ID",
"producerId": "生产者ID",
"status" : [
...状态信息
]
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
终端=>信令服务->媒体服务
```
### 路由RTP协商信令media::router::rtp::capabilities
@@ -675,28 +782,19 @@
{
"roomId": "房间标识"
}
{
"roomId" : "房间标识",
"rtpCapabilities": {
"codec" : "编码解码",
"headerExtensions": "扩展"
}
# 数据流向
终端=>信令服务->媒体服务->信令服务->终端
```
### 设置路由类型信令media::set::router::type
```
# 消息主体
{
"roomId": "房间ID"
"routerType": "路由类型"
}
# 数据流向
终端->信令服务->终端
终端=>信令服务->媒体服务
```
### 关闭通道信令media::transport::close
关闭通过回调实现所以不能同步响应,以下场景出现:主动断开、离开房间、信令断开
```
# 消息主体
{
@@ -704,27 +802,38 @@
"transportId": "通道ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务+)终端
媒体服务->信令服务->终端
信令服务->媒体服务->信令服务->终端
终端->信令服务->媒体服务->信令服务->终端
```
### 创建RTP输入通道信令media::transport::plain
### 创建RTP输入通道信令media::transport::plain::create
用来接入RTP协议终端
```
# 消息主体
{
"roomId" : "房间ID",
"rtcpMux": RTPRTCP端口复用true|false,
"comedia": 自动终端端口true|false,
"enableSctp": 是否开启sctptrue|false,
"numSctpStreams": sctp数量,
"enableSrtp": 是否开启srtptrue|false,
"rtcpMux" : RTP/RTCP端口复用true|false,
"comedia" : 自动识别终端端口true|false,
"enableSctp" : 是否开启SCTPtrue|false,
"numSctpStreams" : SCTP数量,
"enableSrtp" : 是否开启SRTPtrue|false,
"srtpCryptoSuite": {
"cryptoSuite": "算法AEAD_AES_256_GCM|AEAD_AES_128_GCM|AES_CM_128_HMAC_SHA1_80|AES_CM_128_HMAC_SHA1_32",
"keyBase64" : "密钥"
}
}
{
roomId : "房间ID",
transportId: "通道ID",
ip : "RTP监听IP",
port : "RTP媒体端口",
rtcpPort : "RTP媒体RTCP端口"
}
# 数据流向
终端->信令服务->终端
终端=>信令服务->媒体服务
```
### 查询通道状态信令media::transport::status
@@ -735,17 +844,32 @@
"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": "传输通道标识",
"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 @@
{}
# 数据流向
信令服务+)终端
终端=>信令服务
终端->信令服务+)终端
```
@@ -852,7 +989,8 @@
"battery" : 电池电量0~100,
"alarming" : 是否发生告警true|false,
"charging" : 是否正在充电true|false,
"recording": 是否正在录像true|false,
"clientRecording": 是否正在录像true|false,
"serverRecording": 是否正在录像true|false,
"lastHeartbeat" : "最后心跳时间",
"status" : {更多状态},
"config" : {更多配置}
@@ -860,7 +998,8 @@
...
]
# 数据流向
终端=>信令服务->终端
终端=>信令服务
终端=[进入房间]>信令服务->终端
```
### 房间终端ID信令room::client::list::id
@@ -874,10 +1013,17 @@
"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
@@ -901,12 +1047,14 @@
"mediaClientId": "媒体服务ID"
}
{
"roomId" : "房间ID",
"name" : "房间名称",
"clientSize" : "终端数量",
"mediaClientId": "媒体服务ID"
}
# 数据流向
终端->信令服务->媒体服务->信令服务+)终端
终端=>信令服务->媒体服务
终端->信令服务->媒体服务->信令服务-)终端
```
### 进入房间信令room::enter
@@ -922,11 +1070,14 @@
"clientId": "终端标识"
}
# 数据流向
终端=>信令服务
终端->信令服务-)终端
```
### 踢出房间信令room::expel
终端收到信令以后调用离开房间信令离开房间,没有实现强制在服务端提出。
```
# 消息主体
{
@@ -939,6 +1090,8 @@
### 邀请终端信令room::invite
终端收到信令以后调用进入房间信令进入房间
```
# 消息主体
{
@@ -955,6 +1108,10 @@
```
# 消息主体
{
"roomId": "房间ID"
}
{
"roomId" : "房间ID"
"clientId": "离开终端ID"
}
# 数据流向
@@ -966,6 +1123,9 @@
```
# 消息主体
{
"roomId": "房间ID"
}
[
{
"name" : "房间名称",
@@ -976,13 +1136,16 @@
...
]
# 数据流向
终端->信令服务->终端
终端=>信令服务
```
### 房间状态信令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
@@ -1028,12 +1196,7 @@
# 消息主体
{
"sdp" : "sdp"
"type": "offer",
"sessionId": "会话ID"
}
{
"sdp": "sdp"
"type": "answer",
"type" : "offer|answer",
"sessionId": "会话ID"
}
{
@@ -1041,7 +1204,7 @@
"sessionId": "会话ID",
"candidate": {
"sdpMid" : "sdpMid",
"candidate": "candidate信息",
"candidate" : "candidate",
"sdpMLineIndex": sdpMLineIndex
}
}
@@ -1097,26 +1260,30 @@
"cpuProcessors": CPU核心数量
}
# 数据流向
终端->信令服务->终端
终端=>信令服务
```
### 重启系统信令system::reboot
重启系统
```
# 消息主体
{}
# 数据流向
信令服务+)终端
终端->信令服务+)终端
终端=>信令服务+)终端
```
### 关闭系统信令system::shutdown
关闭系统
```
# 消息主体
{}
# 数据流向
信令服务+)终端
终端->信令服务+)终端
终端=>信令服务+)终端
```

View File

@@ -35,7 +35,5 @@
* 存在TURN服务优先使用
* 安卓关闭视频没有删除预览
* 浏览器WebRTC监控页面关闭`chrome://webrtc-internals/`
* me -> this
* console -> platformError
## 完成任务

View File

@@ -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