mediasoup 学习笔记 【二】Router 房间

上一篇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 侦听进程关闭

猜你喜欢

转载自blog.csdn.net/uk_51/article/details/104648265