Browse Source

H265RtpDepacketizer: Handle empty RTP packet payloads

Similar to the fix for the H.264 RTP depacketizer in https://github.com/
paullouisageneau/libdatachannel/pull/1140.
Robert Edmonds 1 year ago
parent
commit
c7348d0721
1 changed files with 11 additions and 0 deletions
  1. 11 0
      src/h265rtpdepacketizer.cpp

+ 11 - 0
src/h265rtpdepacketizer.cpp

@@ -32,6 +32,17 @@ message_vector H265RtpDepacketizer::buildFrames(message_vector::iterator begin,
 		auto pkt = it->get();
 		auto pkt = it->get();
 		auto pktParsed = reinterpret_cast<const rtc::RtpHeader *>(pkt->data());
 		auto pktParsed = reinterpret_cast<const rtc::RtpHeader *>(pkt->data());
 		auto rtpHeaderSize = pktParsed->getSize() + pktParsed->getExtensionHeaderSize();
 		auto rtpHeaderSize = pktParsed->getSize() + pktParsed->getExtensionHeaderSize();
+		auto rtpPaddingSize = 0;
+
+		if (pktParsed->padding()) {
+			rtpPaddingSize = std::to_integer<uint8_t>(pkt->at(pkt->size() - 1));
+		}
+
+		if (pkt->size() == rtpHeaderSize + rtpPaddingSize) {
+			PLOG_VERBOSE << "H.265 RTP packet has empty payload";
+			continue;
+		}
+
 		auto nalUnitHeader =
 		auto nalUnitHeader =
 		    H265NalUnitHeader{std::to_integer<uint8_t>(pkt->at(rtpHeaderSize)),
 		    H265NalUnitHeader{std::to_integer<uint8_t>(pkt->at(rtpHeaderSize)),
 		                      std::to_integer<uint8_t>(pkt->at(rtpHeaderSize + 1))};
 		                      std::to_integer<uint8_t>(pkt->at(rtpHeaderSize + 1))};