Allow padding packet in video streams.
BUG=webrtc:5514 Review-Url: https://codereview.webrtc.org/2763813003 Cr-Commit-Position: refs/heads/master@{#17319}
This commit is contained in:
parent
90a115334f
commit
54ca919c32
@ -250,6 +250,14 @@ int32_t RtpStreamReceiver::OnReceivedPayloadData(
|
||||
packet.timesNacked =
|
||||
nack_module_ ? nack_module_->OnReceivedPacket(packet) : -1;
|
||||
|
||||
// In the case of a video stream without picture ids and no rtx the
|
||||
// RtpFrameReferenceFinder will need to know about padding to
|
||||
// correctly calculate frame references.
|
||||
if (packet.sizeBytes == 0) {
|
||||
reference_finder_->PaddingReceived(packet.seqNum);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (packet.codec == kVideoCodecH264) {
|
||||
// Only when we start to receive packets will we know what payload type
|
||||
// that will be used. When we know the payload type insert the correct
|
||||
|
||||
@ -296,4 +296,39 @@ TEST_F(RtpStreamReceiverTest, OutOfBandFmtpSpsPps) {
|
||||
&idr_packet);
|
||||
}
|
||||
|
||||
TEST_F(RtpStreamReceiverTest, PaddingInMediaStream) {
|
||||
WebRtcRTPHeader header = GetDefaultPacket();
|
||||
std::vector<uint8_t> data;
|
||||
data.insert(data.end(), {1, 2, 3});
|
||||
header.header.payloadType = 99;
|
||||
header.type.Video.is_first_packet_in_frame = true;
|
||||
header.header.sequenceNumber = 2;
|
||||
header.header.markerBit = true;
|
||||
header.frameType = kVideoFrameKey;
|
||||
header.type.Video.codec = kRtpVideoGeneric;
|
||||
mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(),
|
||||
data.size());
|
||||
|
||||
EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
|
||||
rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
|
||||
&header);
|
||||
|
||||
header.header.sequenceNumber = 3;
|
||||
rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header);
|
||||
|
||||
header.frameType = kVideoFrameDelta;
|
||||
header.header.sequenceNumber = 4;
|
||||
EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
|
||||
rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
|
||||
&header);
|
||||
|
||||
header.header.sequenceNumber = 6;
|
||||
rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
|
||||
&header);
|
||||
|
||||
EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
|
||||
header.header.sequenceNumber = 5;
|
||||
rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header);
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user