作文网下载,seo网站建站,华企网络,如何进行app推广一、Mediasoup 整体结构 整个Mediasoup库通过Nodejs管理#xff0c;比如整体逻辑、worker、router、producer、consumer...都是通过JS进行管理的。
其底层的数据传输是通过C部分进行控制的#xff0c;通过NodeJs来控制C部分#xff0c;以实现整体的数据传输效 二、Mediasou…一、Mediasoup 整体结构 整个Mediasoup库通过Nodejs管理比如整体逻辑、worker、router、producer、consumer...都是通过JS进行管理的。
其底层的数据传输是通过C部分进行控制的通过NodeJs来控制C部分以实现整体的数据传输效 二、Mediasoup js类关系 1.几乎所有类都继承自EnhancedEventEmitter每个对象都可以发送事件 2.每个worker代表一个节点内部有多个Router组成Routers结构。每个Worker中都有一个channel与C进行通讯 3.对于每一个Router房间来说是包含Tranports和Produces 4.Transport包含Produces与Consumes其包括多个子类如WebRtcTransport浏览器数据传输、PlainRtpTransport非音视频、PipeTransport不同router之间数据流转 二、Mediasoup c类关系 1.最核心是Router类房间概念包含Consumer、ProducerTransport子模块关系对应1n
2.Consumer中含有多种子类如SimpleConsumer音视频流、PipeConsumerRouter之间数据流转、SvcConsumer分层、增量、SimulcastConsumer分层
3.Producer接收共享者传输的流
4.Transport分为3种同前面JS介绍一致TransportTuple元组存放本地socket、远端socket、IP、端口 三、Mediasoup 核心类介绍 对于4种消费者都包含RtpStreamSend对象消费者发送数据给客户端通过RtpStreamSend方法。RtpStreamSend继承自RtpStream这个类处理Rtp数据流的收发。RtpStream使用到了RtpPacket这个包是用于对Rtp数据包的分析Rtp数据有数据包头对于包头每一个字段的定义都是在这个Packet里面操作的 因为要对整个数据进行处理所以使用SeqManager序列管理器。服务端推送给客户端的数据流是会重新排序的排序的时候便会依靠这个SeqManager它会记录某个SSRC所对应的Sequence以此为起始位置然后后面的每个包都向下递增一个数 Producer作为服务端的生产者它是用来接收共享者发送的数据流所以它里面包含多个RtpStreamRecv是一对多的关系为什么是多个RtpStreamRecv呢因为数据的接收有可能会丢包丢包重传的也算作一路流对应的音频的丢包也是需要重传 作为数据的接收端RtpStreamRecv使用到了NackGenerator丢包产生器。接收端能够知道有没有丢包因为数据包有Sequence比如发送了100个数据前50个数据是连续的但假设当50之后是55Recv端就知道丢了 51、52、53、54 这4个包了。丢包之后如何解决呢有两种方式 Fec在每个包增加一些冗余它能计算 出丢失的音频包或视频包 Nack它会告诉发送端丢了哪些包发送端会根据策略若时间比较短的话会把丢失的包补上来具体补哪些包就是根据NackGenerator产生的 Transport分为3种WebRtcTransport浏览器数据传输、PlainRtpTransport非音视频、PipeTransport不同router之间数据流转。TransportTuple元组存放本地socket、远端socket、IP、端口 最核心的是WebRtcTransport与浏览器进行数据传输。首先其包含UdpScoket与TcpServer对应两个链接可以与客户端连接通信 对于UdpSocket与TcpServere其继承自PortManager端口管理器对于Mediasoup来说默认是从40000到49999共一万个端口号。UdpSocket和TcpServer通过PortManager进行对端口号的管理首先确定端口号有没有被占用没有被占用就使用该端口号对数据传输若被占用就根据PortManager的策略往后跳。注意Udp和Tcp的使用是互斥的 DtlsTransport使用dtls对Rtp包进行数据加密的协议同时在这里面还使用到了Srtp协议Srtp协议分为数据的收与发所以在WebRTCTransport中有Srtp send和recv这两个Session RembClient/RembServer这两个主要用于对带宽的评估既可用于client端也可用于server端。对于共享者来说Mediasoup的WebRTCTransport就是RembClient端对于消费者来说就是RembServer端 IceCandidate候选者包括Host、Server reflexive、Relay reflexive三种对于WebRTC一般设置成Host最高优先级