[+] 结构调整

This commit is contained in:
acgist
2023-02-22 07:42:40 +08:00
parent a4696a9b9b
commit 6358255458
103 changed files with 1056 additions and 250 deletions

View File

@@ -0,0 +1,108 @@
# 媒体
只要负责媒体处理,不要添加任何业务逻辑,所有业务逻辑都由[taoyao-signal-server](../taoyao-signal-server)处理。
## 使用
```
sudo npm install
```
## Mediasoup
```
# 编译:默认不用手动编译
make
make -C worker
```
## 事件
```
mediasoup.observer.on("newworker", fn(worker));
worker.on("died", fn(error));
worker.observer.on("close", fn());
worker.observer.on("newrouter", fn(router));
worker.observer.on("newwebrtcserver", fn(router));
router.on(“workerclose”, fn());
router.observer.on(“close”, fn());
router.observer.on(“newtransport”, fn(transport));
router.observer.on(“newrtpobserver”, fn(rtpObserver));
transport.on("trace", fn(trace));
transport.on(“routerclose”, fn());
transport.on(“listenserverclose”, fn());
transport.on(“trace”, fn(trace));
webRtcTransport.on(“icestatechange”, fn(iceState))
webRtcTransport.on(“iceselectedtuplechange”, fn(iceSelectedTuple))
webRtcTransport.on(“dtlsstatechange”, fn(dtlsState))
webRtcTransport.on(“sctpstatechange”, fn(sctpState))
plainTransport.on(“tuple”, fn(tuple))
plainTransport.on(“rtcptuple”, fn(rtcpTuple))
plainTransport.on(“sctpstatechange”, fn(sctpState))
pipeTransport.on(“sctpstatechange”, fn(sctpState))
directTransport.on(“rtcp”, fn(rtcpPacket))
transport.observer.on(“close”, fn())
transport.observer.on(“newproducer”, fn(producer))
transport.observer.on(“newconsumer”, fn(consumer))
transport.observer.on(“newdataproducer”, fn(dataProducer))
transport.observer.on(“newdataconsumer”, fn(dataConsumer))
transport.observer.on(“trace”, fn(trace))
webRtcTransport.observer.on(“icestatechange”, fn(iceState))
webRtcTransport.observer.on(“iceselectedtuplechange”, fn(iceSelectedTuple))
webRtcTransport.observer.on(“dtlsstatechange”, fn(dtlsState))
webRtcTransport.observer.on(“sctpstatechange”, fn(sctpState))
plainTransport.observer.on(“tuple”, fn(tuple))
plainTransport.observer.on(“rtcptuple”, fn(rtcpTuple))
plainTransport.observer.on(“sctpstatechange”, fn(sctpState))
pipeTransport.observer.on(“sctpstatechange”, fn(sctpState))
```
## 安全
默认媒体服务只要暴露媒体`UDP`端口,信令接口不用暴露,所以使用简单鉴权。
## 动态调节码率
```
参考配置`mediaCodecs`
```
## WebRTC协议栈
```
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| HTTPS / WSS | | SCTP | SRTP / SRTCP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ICE / SDP / SIP +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TLS | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ DTLS +-+-+-+-+-+-+-+-+-+
| HTTP / WS | NAT / STUN / TURN | | RTP / RTCP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TCP | UDP |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 / IPv6 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
### 协议简介
* 会话通道ICE/SIP/SDP
* 媒体通道RTP/RTCP/SRTP/SRTCP
* RTP实时传输协议音频视频
* RTCPRTP传输控制协议监控数据传输质量并给予数据发送方反馈
* SCTP流控制传输协议自定义的应用数据传输
* RTMP实时消息传送协议
* RTSP可以控制媒体点播
### ICE/SDP/SIP
ICE信息的描述格式通常采用标准的SDP其全称为Session Description Protocol即会话描述协议。<br />
SDP只是一种信息格式的描述标准不属于传输协议但是可以被其他传输协议用来交换必要的信息例如SIP、RTSP等等。
## 其他常见WebRTC媒体服务
* [Jitsi](https://github.com/jitsi)
* [Janus](https://github.com/meetecho/janus-gateway/)
* [Licode](https://github.com/lynckia/licode)
* [Kurento](https://github.com/Kurento/kurento-media-server)
* [Medooze](https://github.com/medooze/media-server)
* [Mediasoup](https://github.com/versatica/mediasoup)