| Index: webrtc/video/rtp_stream_receiver.cc
|
| diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc
|
| index 88d86ef986714df85332333ef5cff9d6849bd1e0..bda4f9f2161552aecddf70ed7bc2feae79954dc2 100644
|
| --- a/webrtc/video/rtp_stream_receiver.cc
|
| +++ b/webrtc/video/rtp_stream_receiver.cc
|
| @@ -94,7 +94,7 @@ RtpStreamReceiver::RtpStreamReceiver(
|
| packet_router_(packet_router),
|
| 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,
|
| @@ -128,11 +128,6 @@ RtpStreamReceiver::RtpStreamReceiver(
|
| rtp_rtcp_->SetSSRC(config_.rtp.local_ssrc);
|
| rtp_rtcp_->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp);
|
|
|
| - 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
|
| @@ -277,11 +272,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);
|
| }
|
| @@ -302,32 +300,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();
|
| @@ -338,18 +338,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() {
|
| @@ -623,16 +623,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())
|
|
|