前面已经介绍过Producer,今天来聊下Consumer, 正式进入之前要说下,
Producer和Consumer这里并不是指的用户,同一个用户即可以是创建消费者,又可以创建生产者,
举个例子就那微信语音聊天,两个人都可以说话同时也可以听到对方说的话。
这里是需要转换下思路。
值得注意的另外一点,信令服务在整个官方demo中,只承担了数据的传输,跟transport也不要混淆,
整体流程、过程 (过程只列举重要的环节)
- (生产者方)客户端初始化
- (生产者方)创建transport; createSendTransport 创建完并侦听相关事件,其中 connect 和 produce 两个事件 需要通过websocket 发送相关数据
- 上一篇 讲的 produce()的时候会触发 transport 的 produce事件,然后通过信令服务发送相关数据
- (消费者方)同样上面步骤 createRecvTransport 事件侦听 connect
- (信令服务)收到这connect 和 produce 创建通道以及服务端的mediasoup一些操作,同时也会把生产的数据转发给消费方(这块后面的文章再讲)
- (消费者方)接收信令服务的数据,进行消费
完整过程,这里写的比较简略,想要技术细节就需要分析代码,
回归本篇正题
其实就是上面第六步的操作,客户端
信令服务器收到生产者数据后需要找到对应的消费者,进行转发数据
官网给出的代码,不难看出其实很简短明了,这里我指出下
mySignaling.on('newConsumer', async (data) =>
{
const consumer = await transport.consume(
{
id : data.id,
producerId : data.producerId,
kind : data.kind,
rtpParameters : data.rtpParameters
});
// Render the remote video track into a HTML video element.
const {
track } = consumer;
videoElem.srcObject = new MediaStream([ track ]);
});
- transport 其实就是 消费者通道 createRecvTransport()
- track 获取到转换程媒体数据消费
消费这块其实没有太多的难点,上一篇和这一篇都属于客户端的一些相关知识点,后面我有时间会陆续更新 服务端的相关处理流程。
码字不易,感谢支持