Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Side by Side Diff: webrtc/video/rtp_stream_receiver.cc

Issue 2693123002: Make Call::OnRecoveredPacket parse RTP header and call OnRtpPacket. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 RTC_DCHECK(video_receiver_); 284 RTC_DCHECK(video_receiver_);
285 if (video_receiver_->IncomingPacket(payload_data, payload_size, 285 if (video_receiver_->IncomingPacket(payload_data, payload_size,
286 rtp_header_with_ntp) != 0) { 286 rtp_header_with_ntp) != 0) {
287 // Check this... 287 // Check this...
288 return -1; 288 return -1;
289 } 289 }
290 } 290 }
291 return 0; 291 return 0;
292 } 292 }
293 293
294 // TODO(nisse): Try to delete this method. Obstacles: It is used by
295 // ParseAndHandleEncapsulatingHeader, for handling Rtx packets. And
296 // it's part of the RtpData interface which we implement.
294 bool RtpStreamReceiver::OnRecoveredPacket(const uint8_t* rtp_packet, 297 bool RtpStreamReceiver::OnRecoveredPacket(const uint8_t* rtp_packet,
nisse-webrtc 2017/02/14 10:24:33 Is there any easy way to get rid of this method an
brandtr 2017/02/15 12:20:50 No, RTX, RED, and ULPFEC should not go back to Cal
nisse-webrtc 2017/02/15 13:59:15 This is tricky. Parsing extensions logically belon
295 size_t rtp_packet_length) { 298 size_t rtp_packet_length) {
296 RTPHeader header; 299 RTPHeader header;
297 if (!rtp_header_parser_->Parse(rtp_packet, rtp_packet_length, &header)) { 300 if (!rtp_header_parser_->Parse(rtp_packet, rtp_packet_length, &header)) {
298 return false; 301 return false;
299 } 302 }
300 header.payload_type_frequency = kVideoPayloadTypeFrequency; 303 header.payload_type_frequency = kVideoPayloadTypeFrequency;
301 bool in_order = IsPacketInOrder(header); 304 bool in_order = IsPacketInOrder(header);
302 return ReceivePacket(rtp_packet, rtp_packet_length, header, in_order); 305 return ReceivePacket(rtp_packet, rtp_packet_length, header, in_order);
303 } 306 }
304 307
305 // TODO(pbos): Remove as soon as audio can handle a changing payload type 308 // TODO(pbos): Remove as soon as audio can handle a changing payload type
306 // without this callback. 309 // without this callback.
307 int32_t RtpStreamReceiver::OnInitializeDecoder( 310 int32_t RtpStreamReceiver::OnInitializeDecoder(
308 const int8_t payload_type, 311 const int8_t payload_type,
309 const char payload_name[RTP_PAYLOAD_NAME_SIZE], 312 const char payload_name[RTP_PAYLOAD_NAME_SIZE],
310 const int frequency, 313 const int frequency,
311 const size_t channels, 314 const size_t channels,
312 const uint32_t rate) { 315 const uint32_t rate) {
313 RTC_NOTREACHED(); 316 RTC_NOTREACHED();
314 return 0; 317 return 0;
315 } 318 }
316 319
317 void RtpStreamReceiver::OnIncomingSSRCChanged(const uint32_t ssrc) { 320 void RtpStreamReceiver::OnIncomingSSRCChanged(const uint32_t ssrc) {
318 rtp_rtcp_->SetRemoteSSRC(ssrc); 321 rtp_rtcp_->SetRemoteSSRC(ssrc);
319 } 322 }
320 323
324 // This method handles both regular Rtp packets and packets recovered
brandtr 2017/02/15 12:20:50 Nits: "RTP packets". "FlexFEC".
nisse-webrtc 2017/02/15 13:59:15 Done.
325 // via Flexfec.
321 void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { 326 void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
322 { 327 {
323 rtc::CritScope lock(&receive_cs_); 328 rtc::CritScope lock(&receive_cs_);
324 if (!receiving_) { 329 if (!receiving_) {
325 return; 330 return;
326 } 331 }
327 } 332 }
333 if (!packet.recovered()) {
334 int64_t now_ms = clock_->TimeInMilliseconds();
328 335
329 int64_t now_ms = clock_->TimeInMilliseconds(); 336 {
330 337 // Periodically log the RTP header of incoming packets.
331 { 338 rtc::CritScope lock(&receive_cs_);
332 // Periodically log the RTP header of incoming packets. 339 if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) {
333 rtc::CritScope lock(&receive_cs_); 340 std::stringstream ss;
334 if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) { 341 ss << "Packet received on SSRC: " << packet.Ssrc()
335 std::stringstream ss; 342 << " with payload type: " << static_cast<int>(packet.PayloadType())
336 ss << "Packet received on SSRC: " << packet.Ssrc() 343 << ", timestamp: " << packet.Timestamp()
337 << " with payload type: " << static_cast<int>(packet.PayloadType()) 344 << ", sequence number: " << packet.SequenceNumber()
338 << ", timestamp: " << packet.Timestamp() 345 << ", arrival time: " << packet.arrival_time_ms();
339 << ", sequence number: " << packet.SequenceNumber() 346 int32_t time_offset;
340 << ", arrival time: " << packet.arrival_time_ms(); 347 if (packet.GetExtension<TransmissionOffset>(&time_offset)) {
341 int32_t time_offset; 348 ss << ", toffset: " << time_offset;
342 if (packet.GetExtension<TransmissionOffset>(&time_offset)) { 349 }
343 ss << ", toffset: " << time_offset; 350 uint32_t send_time;
351 if (packet.GetExtension<AbsoluteSendTime>(&send_time)) {
352 ss << ", abs send time: " << send_time;
353 }
354 LOG(LS_INFO) << ss.str();
355 last_packet_log_ms_ = now_ms;
344 } 356 }
345 uint32_t send_time;
346 if (packet.GetExtension<AbsoluteSendTime>(&send_time)) {
347 ss << ", abs send time: " << send_time;
348 }
349 LOG(LS_INFO) << ss.str();
350 last_packet_log_ms_ = now_ms;
351 } 357 }
352 } 358 }
353 359
354 // TODO(nisse): Delete use of GetHeader, but needs refactoring of 360 // TODO(nisse): Delete use of GetHeader, but needs refactoring of
355 // ReceivePacket and IncomingPacket methods below. 361 // ReceivePacket and IncomingPacket methods below.
356 RTPHeader header; 362 RTPHeader header;
357 packet.GetHeader(&header); 363 packet.GetHeader(&header);
358 364
359 header.payload_type_frequency = kVideoPayloadTypeFrequency; 365 header.payload_type_frequency = kVideoPayloadTypeFrequency;
360 366
361 bool in_order = IsPacketInOrder(header); 367 bool in_order = IsPacketInOrder(header);
362 rtp_payload_registry_.SetIncomingPayloadType(header); 368 if (!packet.recovered()) {
brandtr 2017/02/15 12:20:50 Could you reorder the lines in this method, so tha
nisse-webrtc 2017/02/15 13:59:15 I'm not sure how order matters. And I'd prefer to
369 // TODO(nisse): Why isn't this done for recovered packets?
370 rtp_payload_registry_.SetIncomingPayloadType(header);
371 }
363 ReceivePacket(packet.data(), packet.size(), header, in_order); 372 ReceivePacket(packet.data(), packet.size(), header, in_order);
364 // Update receive statistics after ReceivePacket. 373 // Update receive statistics after ReceivePacket.
365 // Receive statistics will be reset if the payload type changes (make sure 374 // Receive statistics will be reset if the payload type changes (make sure
366 // that the first packet is included in the stats). 375 // that the first packet is included in the stats).
367 rtp_receive_statistics_->IncomingPacket( 376 if (!packet.recovered()) {
368 header, packet.size(), IsPacketRetransmitted(header, in_order)); 377 // TODO(nisse): Should we pass a recovered flag to stats?
brandtr 2017/02/15 12:20:50 That would be one way of implementing bugs.webrtc.
nisse-webrtc 2017/02/15 13:59:15 I'm adding a TODO and bug reference.
378 rtp_receive_statistics_->IncomingPacket(
379 header, packet.size(), IsPacketRetransmitted(header, in_order));
380 }
369 } 381 }
370 382
371 int32_t RtpStreamReceiver::RequestKeyFrame() { 383 int32_t RtpStreamReceiver::RequestKeyFrame() {
372 return rtp_rtcp_->RequestKeyFrame(); 384 return rtp_rtcp_->RequestKeyFrame();
373 } 385 }
374 386
375 int32_t RtpStreamReceiver::SliceLossIndicationRequest( 387 int32_t RtpStreamReceiver::SliceLossIndicationRequest(
376 const uint64_t picture_id) { 388 const uint64_t picture_id) {
377 return rtp_rtcp_->SendRTCPSliceLossIndication( 389 return rtp_rtcp_->SendRTCPSliceLossIndication(
378 static_cast<uint8_t>(picture_id)); 390 static_cast<uint8_t>(picture_id));
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 return; 680 return;
669 681
670 if (!sprop_decoder.DecodeSprop(sprop_base64_it->second.c_str())) 682 if (!sprop_decoder.DecodeSprop(sprop_base64_it->second.c_str()))
671 return; 683 return;
672 684
673 tracker_.InsertSpsPpsNalus(sprop_decoder.sps_nalu(), 685 tracker_.InsertSpsPpsNalus(sprop_decoder.sps_nalu(),
674 sprop_decoder.pps_nalu()); 686 sprop_decoder.pps_nalu());
675 } 687 }
676 688
677 } // namespace webrtc 689 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698