diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc index 97bbe7db24..b9e74f5781 100644 --- a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc +++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264.cc @@ -101,8 +101,8 @@ std::optional ProcessStapAOrSingleNalu( nal_unit.subview(H264::kNaluTypeSize); if (nalu_data.empty()) { - RTC_LOG(LS_ERROR) << "Empty NAL unit found."; - return std::nullopt; + RTC_LOG(LS_WARNING) << "Skipping empty NAL unit."; + continue; } switch (nalu.type) { diff --git a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc index 8f1d272b77..8330bf2d6b 100644 --- a/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc +++ b/modules/rtp_rtcp/source/video_rtp_depacketizer_h264_unittest.cc @@ -542,5 +542,15 @@ TEST(VideoRtpDepacketizerH264Test, SeiSetsFirstPacketInFrame) { EXPECT_TRUE(parsed->video_header.is_first_packet_in_frame); } +TEST(VideoRtpDepacketizerH264Test, EmptyNaluPayload) { + const uint8_t kPayload[] = { + 0x10, // End of sequence. + }; + VideoRtpDepacketizerH264 depacketizer; + std::optional parsed = + depacketizer.Parse(rtc::CopyOnWriteBuffer(kPayload)); + ASSERT_TRUE(parsed); +} + } // namespace } // namespace webrtc