| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 2427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2438 | 2438 |
| 2439 void WebRtcVoiceMediaChannel::OnPacketReceived( | 2439 void WebRtcVoiceMediaChannel::OnPacketReceived( |
| 2440 rtc::Buffer* packet, const rtc::PacketTime& packet_time) { | 2440 rtc::Buffer* packet, const rtc::PacketTime& packet_time) { |
| 2441 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 2441 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 2442 | 2442 |
| 2443 uint32_t ssrc = 0; | 2443 uint32_t ssrc = 0; |
| 2444 if (!GetRtpSsrc(packet->data(), packet->size(), &ssrc)) { | 2444 if (!GetRtpSsrc(packet->data(), packet->size(), &ssrc)) { |
| 2445 return; | 2445 return; |
| 2446 } | 2446 } |
| 2447 | 2447 |
| 2448 if (receive_channels_.empty()) { | 2448 // If we don't have a default channel, and the SSRC is unknown, create a |
| 2449 // Create new channel, which will be the default receive channel. | 2449 // default channel. |
| 2450 if (default_recv_ssrc_ == -1 && GetReceiveChannelId(ssrc) == -1) { |
| 2450 StreamParams sp; | 2451 StreamParams sp; |
| 2451 sp.ssrcs.push_back(ssrc); | 2452 sp.ssrcs.push_back(ssrc); |
| 2452 LOG(LS_INFO) << "Creating default receive stream for SSRC=" << ssrc << "."; | 2453 LOG(LS_INFO) << "Creating default receive stream for SSRC=" << ssrc << "."; |
| 2453 if (!AddRecvStream(sp)) { | 2454 if (!AddRecvStream(sp)) { |
| 2454 LOG(LS_WARNING) << "Could not create default receive stream."; | 2455 LOG(LS_WARNING) << "Could not create default receive stream."; |
| 2455 return; | 2456 return; |
| 2456 } | 2457 } |
| 2457 default_recv_ssrc_ = ssrc; | 2458 default_recv_ssrc_ = ssrc; |
| 2458 SetOutputVolume(default_recv_ssrc_, default_recv_volume_); | 2459 SetOutputVolume(default_recv_ssrc_, default_recv_volume_); |
| 2459 } | 2460 } |
| 2460 | 2461 |
| 2461 // Forward packet to Call. If the SSRC is unknown we'll return after this. | 2462 // Forward packet to Call. If the SSRC is unknown we'll return after this. |
| 2462 const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp, | 2463 const webrtc::PacketTime webrtc_packet_time(packet_time.timestamp, |
| 2463 packet_time.not_before); | 2464 packet_time.not_before); |
| 2464 webrtc::PacketReceiver::DeliveryStatus delivery_result = | 2465 webrtc::PacketReceiver::DeliveryStatus delivery_result = |
| 2465 call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, | 2466 call_->Receiver()->DeliverPacket(webrtc::MediaType::AUDIO, |
| 2466 reinterpret_cast<const uint8_t*>(packet->data()), packet->size(), | 2467 reinterpret_cast<const uint8_t*>(packet->data()), packet->size(), |
| 2467 webrtc_packet_time); | 2468 webrtc_packet_time); |
| 2468 if (webrtc::PacketReceiver::DELIVERY_OK != delivery_result) { | 2469 if (webrtc::PacketReceiver::DELIVERY_OK != delivery_result) { |
| 2469 return; | 2470 // If the SSRC is unknown here, route it to the default channel, if we have |
| 2471 // one. See: https://bugs.chromium.org/p/webrtc/issues/detail?id=5208 |
| 2472 if (default_recv_ssrc_ == -1) { |
| 2473 return; |
| 2474 } else { |
| 2475 ssrc = default_recv_ssrc_; |
| 2476 } |
| 2470 } | 2477 } |
| 2471 | 2478 |
| 2472 // Find the channel to send this packet to. It must exist since webrtc::Call | 2479 // Find the channel to send this packet to. It must exist since webrtc::Call |
| 2473 // was able to demux the packet. | 2480 // was able to demux the packet. |
| 2474 int channel = GetReceiveChannelId(ssrc); | 2481 int channel = GetReceiveChannelId(ssrc); |
| 2475 RTC_DCHECK(channel != -1); | 2482 RTC_DCHECK(channel != -1); |
| 2476 | 2483 |
| 2477 // Pass it off to the decoder. | 2484 // Pass it off to the decoder. |
| 2478 engine()->voe()->network()->ReceivedRTPPacket( | 2485 engine()->voe()->network()->ReceivedRTPPacket( |
| 2479 channel, packet->data(), packet->size(), webrtc_packet_time); | 2486 channel, packet->data(), packet->size(), webrtc_packet_time); |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2829 LOG(LS_WARNING) << "Unknown codec " << ToString(codec); | 2836 LOG(LS_WARNING) << "Unknown codec " << ToString(codec); |
| 2830 return false; | 2837 return false; |
| 2831 } | 2838 } |
| 2832 } | 2839 } |
| 2833 return true; | 2840 return true; |
| 2834 } | 2841 } |
| 2835 | 2842 |
| 2836 } // namespace cricket | 2843 } // namespace cricket |
| 2837 | 2844 |
| 2838 #endif // HAVE_WEBRTC_VOICE | 2845 #endif // HAVE_WEBRTC_VOICE |
| OLD | NEW |