以前笔记,整理
webrtc中默认开启rtx用于丢包重传,rtx的介绍可以参考rfc4588,https://tools.ietf.org/html/rfc4588#section-4
rtx使用额外的ssrc传输,ssrc在sdp中会标识出来。
↵a=rtpmap: rtx/
↵a=ssrc-group:FID
类似这样。
一个RTX包,在turnserver中是这样的,原始udp数据->turn/stun协议头->RTP header1 ->RTP header2
在RTP header1中根据payload type进行区别RTP、RTX数据,如果是RTX的话,需要srtp解出后面的数据,再解析。
在客户端中,RTX封包的关键函数是:
https://code.google.com/p/webrtc/source/detail?r=4692
Channel::IsPacketRetransmitted
Channel::HandleRtxPacket
rtp_payload_registry_->IsRtx
RTPPayloadRegistry::RestoreOriginalPacket 移除RTX头, 还原原始的RTP
链接是,webrtc加入rtx的issue
目前webrtc的服务器,例如licode,janus是禁止rtx的。以避免复杂的处理。