服务端推送数据给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回答
-
等于数据源换成了mediasoup
012022-07-29
相似问题