diff --git a/src/modules/rtp_rtcp/source/producer_fec.cc b/src/modules/rtp_rtcp/source/producer_fec.cc index e1d789483..f3ecea0da 100644 --- a/src/modules/rtp_rtcp/source/producer_fec.cc +++ b/src/modules/rtp_rtcp/source/producer_fec.cc @@ -15,8 +15,6 @@ namespace webrtc { -// Minimum RTP header size in bytes. -enum { kRtpHeaderSize = 12 }; enum { kREDForFECHeaderLength = 1 }; // This controls the maximum amount of excess overhead (actual - target) // allowed in order to trigger GenerateFEC(), before |params_.max_fec_frames| @@ -209,8 +207,10 @@ bool ProducerFec::FecAvailable() const { return (fec_packets_.size() > 0); } -RedPacket* ProducerFec::GetFecPacket(int red_pl_type, int fec_pl_type, - uint16_t seq_num) { +RedPacket* ProducerFec::GetFecPacket(int red_pl_type, + int fec_pl_type, + uint16_t seq_num, + int rtp_header_length) { if (fec_packets_.empty()) return NULL; // Build FEC packet. The FEC packets in |fec_packets_| doesn't @@ -220,9 +220,9 @@ RedPacket* ProducerFec::GetFecPacket(int red_pl_type, int fec_pl_type, ForwardErrorCorrection::Packet* last_media_packet = media_packets_fec_.back(); RedPacket* return_packet = new RedPacket(packet_to_send->length + kREDForFECHeaderLength + - kRtpHeaderSize); + rtp_header_length); return_packet->CreateHeader(last_media_packet->data, - kRtpHeaderSize, + rtp_header_length, red_pl_type, fec_pl_type); return_packet->SetSeqNum(seq_num); diff --git a/src/modules/rtp_rtcp/source/producer_fec.h b/src/modules/rtp_rtcp/source/producer_fec.h index 663ec3446..180bd8388 100644 --- a/src/modules/rtp_rtcp/source/producer_fec.h +++ b/src/modules/rtp_rtcp/source/producer_fec.h @@ -60,8 +60,10 @@ class ProducerFec { bool FecAvailable() const; - RedPacket* GetFecPacket(int red_pl_type, int fec_pl_type, - uint16_t seq_num); + RedPacket* GetFecPacket(int red_pl_type, + int fec_pl_type, + uint16_t seq_num, + int rtp_header_length); private: void DeletePackets(); diff --git a/src/modules/rtp_rtcp/source/producer_fec_unittest.cc b/src/modules/rtp_rtcp/source/producer_fec_unittest.cc index a8c2b004f..7639a8180 100644 --- a/src/modules/rtp_rtcp/source/producer_fec_unittest.cc +++ b/src/modules/rtp_rtcp/source/producer_fec_unittest.cc @@ -79,7 +79,8 @@ TEST_F(ProducerFecTest, OneFrameFec) { uint16_t seq_num = generator_->NextSeqNum(); RedPacket* packet = producer_->GetFecPacket(kRedPayloadType, kFecPayloadType, - seq_num); + seq_num, + kRtpHeaderSize); EXPECT_FALSE(producer_->FecAvailable()); ASSERT_TRUE(packet != NULL); VerifyHeader(seq_num, last_timestamp, @@ -121,7 +122,8 @@ TEST_F(ProducerFecTest, TwoFrameFec) { uint16_t seq_num = generator_->NextSeqNum(); RedPacket* packet = producer_->GetFecPacket(kRedPayloadType, kFecPayloadType, - seq_num); + seq_num, + kRtpHeaderSize); EXPECT_FALSE(producer_->FecAvailable()); EXPECT_TRUE(packet != NULL); VerifyHeader(seq_num, last_timestamp, diff --git a/src/modules/rtp_rtcp/source/rtp_sender_video.cc b/src/modules/rtp_rtcp/source/rtp_sender_video.cc index f48691352..e56aef98a 100644 --- a/src/modules/rtp_rtcp/source/rtp_sender_video.cc +++ b/src/modules/rtp_rtcp/source/rtp_sender_video.cc @@ -150,7 +150,8 @@ RTPSenderVideo::SendVideoPacket(WebRtc_UWord8* data_buffer, red_packet = producer_fec_.GetFecPacket( _payloadTypeRED, _payloadTypeFEC, - _rtpSender.IncrementSequenceNumber()); + _rtpSender.IncrementSequenceNumber(), + rtp_header_length); StorageType storage = kDontRetransmit; if (_retransmissionSettings & kRetransmitFECPackets) { storage = kAllowRetransmission;