Index: webrtc/video/rtp_stream_receiver.cc |
diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc |
index 90dd0da0e1cda44c4e130aa6ef55fef9303f7b9b..f3ec6e5c2112e60f8bae6e15ba745dd16f9a2b8e 100644 |
--- a/webrtc/video/rtp_stream_receiver.cc |
+++ b/webrtc/video/rtp_stream_receiver.cc |
@@ -97,7 +97,7 @@ RtpStreamReceiver::RtpStreamReceiver( |
remb_(remb), |
process_thread_(process_thread), |
ntp_estimator_(clock_), |
- rtp_header_parser_(RtpHeaderParser::Create()), |
+ rtp_header_extensions_(config_.rtp.extensions), |
rtp_receiver_(RtpReceiver::CreateVideoReceiver(clock_, |
this, |
this, |
@@ -135,11 +135,6 @@ RtpStreamReceiver::RtpStreamReceiver( |
remb_->AddReceiveChannel(rtp_rtcp_.get()); |
} |
- for (size_t i = 0; i < config_.rtp.extensions.size(); ++i) { |
- EnableReceiveRtpHeaderExtension(config_.rtp.extensions[i].uri, |
- config_.rtp.extensions[i].id); |
- } |
- |
static const int kMaxPacketAgeToNack = 450; |
const int max_reordering_threshold = (config_.rtp.nack.rtp_history_ms > 0) |
? kMaxPacketAgeToNack |
@@ -288,11 +283,14 @@ int32_t RtpStreamReceiver::OnReceivedPayloadData( |
bool RtpStreamReceiver::OnRecoveredPacket(const uint8_t* rtp_packet, |
size_t rtp_packet_length) { |
- RTPHeader header; |
- if (!rtp_header_parser_->Parse(rtp_packet, rtp_packet_length, &header)) { |
+ RtpPacketReceived packet; |
+ if (!packet.Parse(rtp_packet, rtp_packet_length)) |
return false; |
- } |
- header.payload_type_frequency = kVideoPayloadTypeFrequency; |
+ packet.IdentifyExtensions(rtp_header_extensions_); |
+ packet.set_payload_type_frequency(kVideoPayloadTypeFrequency); |
+ |
+ RTPHeader header; |
+ packet.GetHeader(&header); |
bool in_order = IsPacketInOrder(header); |
return ReceivePacket(rtp_packet, rtp_packet_length, header, in_order); |
} |
@@ -313,32 +311,34 @@ void RtpStreamReceiver::OnIncomingSSRCChanged(const uint32_t ssrc) { |
rtp_rtcp_->SetRemoteSSRC(ssrc); |
} |
-void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
+bool RtpStreamReceiver::OnRtpPacketReceive(RtpPacketReceived* packet) { |
{ |
rtc::CritScope lock(&receive_cs_); |
if (!receiving_) { |
- return; |
+ return false; |
} |
} |
int64_t now_ms = clock_->TimeInMilliseconds(); |
+ packet->IdentifyExtensions(rtp_header_extensions_); |
+ packet->set_payload_type_frequency(kVideoPayloadTypeFrequency); |
{ |
// Periodically log the RTP header of incoming packets. |
rtc::CritScope lock(&receive_cs_); |
if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) { |
std::stringstream ss; |
- ss << "Packet received on SSRC: " << packet.Ssrc() |
- << " with payload type: " << static_cast<int>(packet.PayloadType()) |
- << ", timestamp: " << packet.Timestamp() |
- << ", sequence number: " << packet.SequenceNumber() |
- << ", arrival time: " << packet.arrival_time_ms(); |
+ ss << "Packet received on SSRC: " << packet->Ssrc() |
+ << " with payload type: " << static_cast<int>(packet->PayloadType()) |
+ << ", timestamp: " << packet->Timestamp() |
+ << ", sequence number: " << packet->SequenceNumber() |
+ << ", arrival time: " << packet->arrival_time_ms(); |
int32_t time_offset; |
- if (packet.GetExtension<TransmissionOffset>(&time_offset)) { |
+ if (packet->GetExtension<TransmissionOffset>(&time_offset)) { |
ss << ", toffset: " << time_offset; |
} |
uint32_t send_time; |
- if (packet.GetExtension<AbsoluteSendTime>(&send_time)) { |
+ if (packet->GetExtension<AbsoluteSendTime>(&send_time)) { |
ss << ", abs send time: " << send_time; |
} |
LOG(LS_INFO) << ss.str(); |
@@ -349,18 +349,18 @@ void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) { |
// TODO(nisse): Delete use of GetHeader, but needs refactoring of |
// ReceivePacket and IncomingPacket methods below. |
RTPHeader header; |
- packet.GetHeader(&header); |
- |
- header.payload_type_frequency = kVideoPayloadTypeFrequency; |
+ packet->GetHeader(&header); |
bool in_order = IsPacketInOrder(header); |
rtp_payload_registry_.SetIncomingPayloadType(header); |
- ReceivePacket(packet.data(), packet.size(), header, in_order); |
+ ReceivePacket(packet->data(), packet->size(), header, in_order); |
// Update receive statistics after ReceivePacket. |
// Receive statistics will be reset if the payload type changes (make sure |
// that the first packet is included in the stats). |
rtp_receive_statistics_->IncomingPacket( |
- header, packet.size(), IsPacketRetransmitted(header, in_order)); |
+ header, packet->size(), IsPacketRetransmitted(header, in_order)); |
+ |
+ return true; |
} |
int32_t RtpStreamReceiver::RequestKeyFrame() { |
@@ -630,16 +630,6 @@ void RtpStreamReceiver::UpdateHistograms() { |
} |
} |
-void RtpStreamReceiver::EnableReceiveRtpHeaderExtension( |
- const std::string& extension, int id) { |
- // One-byte-extension local identifiers are in the range 1-14 inclusive. |
- RTC_DCHECK_GE(id, 1); |
- RTC_DCHECK_LE(id, 14); |
- RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension)); |
- RTC_CHECK(rtp_header_parser_->RegisterRtpHeaderExtension( |
- StringToRtpExtensionType(extension), id)); |
-} |
- |
void RtpStreamReceiver::InsertSpsPpsIntoTracker(uint8_t payload_type) { |
auto codec_params_it = pt_codec_params_.find(payload_type); |
if (codec_params_it == pt_codec_params_.end()) |