Skip to content

Commit

Permalink
Fix multiple NAL units handling in H264RtpDepacketizer
Browse files Browse the repository at this point in the history
  • Loading branch information
paullouisageneau committed May 6, 2024
1 parent 9d5c46b commit d28e56f
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/h264rtpdepacketizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,
message_vector out = {};
auto accessUnit = binary{};
auto frameInfo = std::make_shared<FrameInfo>(payloadType, timestamp);
auto nFrags = 0;

for (auto it = begin; it != end; ++it) {
auto pkt = it->get();
Expand All @@ -67,7 +66,10 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,
auto nalUnitFragmentHeader = NalUnitFragmentHeader{
std::to_integer<uint8_t>(pkt->at(rtpHeaderSize + sizeof(NalUnitHeader)))};

if (nFrags++ == 0) {
// RFC 6184: When set to one, the Start bit indicates the start of a fragmented NAL
// unit. When the following FU payload is not the start of a fragmented NAL unit
// payload, the Start bit is set to zero.
if (nalUnitFragmentHeader.isStart() || accessUnit.empty()) {
addSeparator(accessUnit);
accessUnit.emplace_back(
byte(nalUnitHeader.idc() | nalUnitFragmentHeader.unitType()));
Expand Down

0 comments on commit d28e56f

Please sign in to comment.