mediasoup 模块对外 export 出来的所有的 class + TypeScript 语法定义的类型。
var ms = require('mediasoup');
console.log(ms.types);
结果如下:
{
Worker: [Function: Worker],
Router: [Function: Router],
Transport: [Function: Transport],
WebRtcTransport: [Function: WebRtcTransport],
PlainTransport: [Function: PlainTransport],
PlainRtpTransport: [Function: PlainRtpTransport],
PipeTransport: [Function: PipeTransport],
DirectTransport: [Function: DirectTransport],
Producer: [Function: Producer],
Consumer: [Function: Consumer],
DataProducer: [Function: DataProducer],
DataConsumer: [Function: DataConsumer],
RtpObserver: [Function: RtpObserver],
AudioLevelObserver: [Function: AudioLevelObserver],
UnsupportedError: [Function: UnsupportedError],
InvalidStateError: [Function: InvalidStateError]
}
console.log(ms.version);
结果: 3.6.8
最后一位小版本不是很准确,可能未能及时更新。npm install 成功结束时显示 为 3.6.9 。
这是一个 nodejs 中的 event emitter 类型的数据结构。
该 observer 可以监听 mediasoup 的 worker 实例被创建的事件。即 newworker 事件。
ms.observer.on('newworker', (worker) =>
{
console.log("new worker created, pid is: " + worker.pid);
});
var settings = {
logLevel : "error", // 默认 error
logTags : [], // 是个数组,可以多个合并,默认为空
rtcMinPort : 10000, // 默认 10000
rtcMaxPort : 59999, // 默认 59999
dtlsCertificateFile : "", // dtls 加密的 cert
dtlsPrivateKeyFile : "", // dtls 加密的 key
appData : {} // 默认 {} 用户可以使用该字段,
// 传参 worker 中。即 worker 的 appData 字段。
};
var worker = await mediasoup.createWorker(settings);
logTags 取值主要如下
Value | Description |
---|---|
“info” | 用到的软件以及库的一些版本,配置,以及进程信息 |
“ice” | ICE 相关日志 |
“dtls” | DTLS 相关日志 |
“rtp” | RTP |
“srtp” | SRTP 加解密的日志 |
“rtcp” | RTCP |
“rtx” | RTP 重传的相关信息, 包括 NACK/PLI/FIR. |
“bwe” | 网络带宽质量相关信息 |
“score” | Producers & Consumers 的得分log |
“simulcast” | 视频 simulcast log |
“svc” | 视频 SVC log |
“sctp” | SCTP (DataChannel) log |
“message” | message 日志 |
说明:
即 mediasoup 内部支持的音视频编解码的方式
mediasoup.getSupportedRtpCapabilities()
const rtpCapabilities = mediasoup.getSupportedRtpCapabilities();
console.log(rtpCapabilities);
这个能力,是 mediasoup server 端支持的能力,并不需要 client 端也支持。 client 端只需要支持其中之一,即可。
mediasoup.parseScalabilityMode(scalabilityMode)
参数 传入一个符合 webrtc-svc 规范的 模式字符串
返回 ScalabilityMode 对象
Worker 代表一个在单个 CPU 中运行并处理 Router 实例的 mediasoup C++ 语言实现可执行实例。作为 server 的子进程运行。
主要作用就是管理多个 Router 实例。
所以, 可以称 Worker 为 mediasoup 的工作进程。
见文知意,如下:
worker.pid
worker.closed
worker.appData
worker.observer
单独说一下 woker observer 的事件
worker.observer.on("close", function(){})
worker.observer.on("newrouter", function(router){})
// worker 但不是 observer 的事件,这是个 woker 进程异常退出事件
// 比如 pkill -9 mediasoup-worker
worker.on('died', function(error){})
Worker 作为工作进程工作在 mediasoup server中,其主要作用,就是创建 router。
worker.createRouter(options)
参数 options: RouterOptions 类型
codecs 域: 即 RTP Captacity 中 codecs 域,可以选择一种或者多种。
appdata 域
返回一个 Router.
const mediaCodecs =
[
{
kind : "audio",
mimeType : "audio/opus",
clockRate : 48000,
channels : 2
},
{
kind : "video",
mimeType : "video/H264",
clockRate : 90000,
parameters :
{
"packetization-mode" : 1,
"profile-level-id" : "42e01f",
"level-asymmetry-allowed" : 1
}
}
];
const router = await worker.createRouter({ mediaCodecs });
作用:通过内部的 Transport 实例去实现媒体流的 injection, selection, forwarding。
router. id
router. closed
router. rtpCapabilities
router. appData
router. observer
Transport 的作用就是实现并管理 mediasoup server 中的 router 与各类终端的连接。
通过在 Transport 内部创建的 Producer & Consumer 实现媒体数据的双向传输。
Tansport 本身在 mediasoup 内部是一个抽象类,mediasoup 基于 Transport 主要实现了以下4种具体类型:
TransportListenIp
TransportTuple
TransportTraceEventData
enum
transport. id
transport.closed
transport.appData
transport.observer
To be continued…
系统环境变量: