服务端推送数据给WebRTC客户端时,为什么mediasoup要通过SeqManager产生重新排序的流?

来源:15-3 WebRTC中的C++类关系图

GavinXu89

2022-07-29

void SimpleConsumer::SendRtpPacket(RTC::RtpPacket* packet)
{
	...

	// Update RTP seq number and timestamp.
	uint16_t seq;

	// GetSequenceNumber获得的是发送浏览器发来RTP包的序列号,seq是此处生成的序列号。
	this->rtpSeqManager.Input(packet->GetSequenceNumber(), seq);

	// Save original packet fields.
	auto origSsrc = packet->GetSsrc();
	auto origSeq  = packet->GetSequenceNumber();

	packet->SetSsrc(this->rtpParameters.encodings[0].ssrc);
	// 将生成的序列号设置给RTP包。
	packet->SetSequenceNumber(seq);

	// Process the packet.
	if (this->rtpStream->ReceivePacket(packet))
	{
		// Send the packet.
		// 发送RTP包给接收浏览器,这里RTP包的序列号已被改写,与发送浏览器发来RTP包的原始序列号不再相同。
		this->listener->OnConsumerSendRtpPacket(this, packet);
	}

	// Restore packet fields.
	packet->SetSsrc(origSsrc);
	packet->SetSequenceNumber(origSeq);
}
写回答

1回答

李超

2022-07-29

等于数据源换成了mediasoup

0
1
GavinXu89
非常感谢!
2022-07-29
共1条回复

百万级高并发WebRTC流媒体服务器设计与开发

备战5G音视频时代,抢先掌握服务端高级技能

2067 学习 · 375 问题

查看课程