上一篇worker简单的介绍了基础原理,今天聊下mediasoup Router,单纯从字面上理解就是地址路径,其实大家可以理解成房间的意思。
这里主要有一个参数,mediaCodecs 媒体编解码器,包括音视频解码的参数设置。
源代码中 https://github.com/versatica/mediasoup/blob/v3/lib/supportedRtpCapabilities.js 有支持的编解码的参数设置。
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 appData = {
} //自定义的字段 房间,名字等等,这个
const router = await worker.createRouter({
mediaCodecs, appData });
这里可以简单的理解成设置了一下服务端支持的媒体编解码的参数, 如果对音视频的编解码了解的朋友,应该能更进一步的认识,我现在只是简单的了解。
router 相关的属性
- id
- closed 是否是关闭
- appData 自定义数据
- observer 观察者,用户侦听房间的一些事件、状态等, 所有类下面都有观察者 集成于EventEmitter()
router 相关方法
- close() 关闭房间,会出发routerclose事件
- createWebRtcTransport(options) 创建webRTC通道
- createPlainTransport(options) 创建普通通道
- createPipeTransport(options) 管道通道
后续会研究介绍每个通道的区别;
options = {
listenIp: '', //必填
enableSctp: sctp 协议的启用 默认是 false //我也仅仅知道 sctp的话 服务端能够获取到transport的数据
...
}
可以看下文档PipeTransportOptions
- pipeToRouter({ producerId, dataProducerId, router, listenIp }) // 对跨房间消费数据很方便,下面是官网给的例子
// Have two workers.
const worker1 = await mediasoup.createWorker();
const worker2 = await mediasoup.createWorker();
// Create a router in each worker.
const router1 = await worker1.createRouter({
mediaCodecs });
const router2 = await worker2.createRouter({
mediaCodecs });
// Produce in router1.
const transport1 = await router1.createWebRtcTransport({
... });
const producer1 = await transport1.produce({
... });
// Pipe producer1 into router2.
await router1.pipeToRouter({
producerId: producer1.id, router: router2 });
// 从router2消费producer1;
const transport2 = await router2.createWebRtcTransport({
... });
const consumer2 = await transport2.consume({
producerId: producer1.id, ... });
- createAudioLevelObserver(options) //创建音频观察者
- canConsume(options = { producerId, rtpCapabilities }) //是否可以消费生产者的数据
router 相关事件
- workerclose 侦听进程关闭