Index: talk/media/webrtc/webrtcvideoengine2.cc |
diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc |
index d68d6192dbe4d818400cca524b246fdf86e80329..f75d36bbec0171ef7cfc5ac9def0276cc871c2ab 100644 |
--- a/talk/media/webrtc/webrtcvideoengine2.cc |
+++ b/talk/media/webrtc/webrtcvideoengine2.cc |
@@ -1376,9 +1376,24 @@ void WebRtcVideoChannel2::OnPacketReceived( |
return; |
} |
- // TODO(pbos): Ignore unsignalled packets that don't use the video payload |
- // (prevent creating default receivers for RTX configured as if it would |
- // receive media payloads on those SSRCs). |
+ int payload_type = 0; |
+ if (!GetRtpPayloadType(packet->data(), packet->size(), &payload_type)) { |
+ return; |
+ } |
+ |
+ // See if this payload_type is registered as one that usually gets its own |
+ // SSRC (RTX) or at least is safe to drop either way (ULPFEC). If it is, and |
+ // it wasn't handled above by DeliverPacket, that means we don't know what |
+ // stream it associates with, and we shouldn't ever create an implicit channel |
+ // for these. |
+ for (auto& codec : recv_codecs_) { |
+ if (payload_type == codec.rtx_payload_type || |
+ payload_type == codec.fec.red_rtx_payload_type || |
+ payload_type == codec.fec.ulpfec_payload_type) { |
+ return; |
+ } |
+ } |
+ |
switch (unsignalled_ssrc_handler_->OnUnsignalledSsrc(this, ssrc)) { |
case UnsignalledSsrcHandler::kDropPacket: |
return; |