mediasoup推拉流分析

简介

本篇文章主要是对mediasoup的推拉流进行简要叙述,刚开始学习,如有错误,欢迎批评,我会及时更正。

准备工作

main以及worker

mian.cpp文件完成了初始化工作,主要包括初始化libuv里面的loop、初始化channel并且将channel传入到worker里面。
大致流程

//mian.cpp
channel = new Channel::UnixStreamSocket(ConsumerChannelFd, ProducerChannelFd);
//**************************
//UnixStreamSocket.cpp(channel文件夹)
UnixStreamSocket::UnixStreamSocket(int consumerFd, int producerFd)
	  : consumerSocket(consumerFd, NsMessageMaxLen, this), producerSocket(producerFd, NsMessageMaxLen)
//**************************
//由于构造函数会调用基类构造,上面类继承了::UnixStreamSocket,所以UnixStreamSocket.cpp构造函数里面定义了onRead回调函数处理可读事件
err = uv_read_start(
		  reinterpret_cast<uv_stream_t*>(this->uvHandle),
		  static_cast<uv_alloc_cb>(onAlloc),
		  static_cast<uv_read_cb>(onRead));
//当有可读事件触发onRead调用OnUvRead函数
socket->OnUvRead(nread, buf);
//OnUvRead函数处理数据
if (nread > 0)
	{
		// Update the buffer data length.
		this->bufferDataLen += static_cast<size_t>(nread);
		// Notify the subclass. 通知子类
		UserOnUnixStreamRead();
	}
//*******************************
//调用UnixStreamSocket.cpp(channel文件夹)中UserOnUnixStreamRead();函数
this->listener->OnConsumerSocketMessage(this, msgStart, msgLen);
//接着调用OnConsumerSocketMessage()函数,作用:JS在传输之前会先把数据做成json的格式,然后以字符串的形式传输过来,C++收到字符串后,会把它转化为json对象
this->listener->OnChannelRequest(this, request);
//*********************************
//进入到worker.cpp了
inline void Worker::OnChannelRequest(Channel::UnixStreamSocket* /*channel*/, Channel::Request* request)
这个函数开始处理methonId方法,

创建Router

在这里插入图片描述

创建WebrtcTransport

在这里插入图片描述

创建Producer

在这里插入图片描述

创建Consumer

在这里插入图片描述

数据推拉流

在这里插入图片描述
暂时把大致流程图放上,可以根据流程图在源码中找到对应函数,再跟踪一下就会很清晰了。mediasoup内容很庞大,以后有机会将继续记录并分享有意思的内容。撒花。2022.8.4,今天是个值得纪念的日子。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值