Skip to content

Commit 8116593

Browse files
Merge pull request #1167 from paullouisageneau/fix-h264rtpdepacketizer-multiple-nal-units
Fix multiple NAL units handling in H264RtpDepacketizer
2 parents 9d5c46b + 4fc4e9b commit 8116593

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/h264rtpdepacketizer.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,
4444
message_vector out = {};
4545
auto accessUnit = binary{};
4646
auto frameInfo = std::make_shared<FrameInfo>(payloadType, timestamp);
47-
auto nFrags = 0;
4847

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

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

0 commit comments

Comments
 (0)