Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit e8ccac0

Browse files
taste1981jianjunz
authored andcommitted
Only set marker bit on last slice. (#82)
1 parent 7e26723 commit e8ccac0

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

modules/rtp_rtcp/source/rtp_format.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,14 @@ std::unique_ptr<RtpPacketizer> RtpPacketizer::Create(
4444
const auto& h264 =
4545
absl::get<RTPVideoHeaderH264>(rtp_video_header.video_type_header);
4646
return std::make_unique<RtpPacketizerH264>(payload, limits,
47-
h264.packetization_mode);
47+
h264.packetization_mode,
48+
end_of_frame);
4849
}
4950
case kVideoCodecH265: {
5051
const auto& h265 =
5152
absl::get<RTPVideoHeaderH265>(rtp_video_header.video_type_header);
5253
return absl::make_unique<RtpPacketizerH265>(
53-
payload, limits, h265.packetization_mode);
54+
payload, limits, h265.packetization_mode, end_of_frame);
5455
}
5556
case kVideoCodecVP8: {
5657
const auto& vp8 =

modules/rtp_rtcp/source/rtp_format_h265.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,11 @@ enum HevcFuDefs { kHevcSBit = 0x80, kHevcEBit = 0x40, kHevcFuTypeBit = 0x3F };
7979
RtpPacketizerH265::RtpPacketizerH265(
8080
rtc::ArrayView<const uint8_t> payload,
8181
PayloadSizeLimits limits,
82-
H265PacketizationMode packetization_mode)
82+
H265PacketizationMode packetization_mode,
83+
bool end_of_frame)
8384
: limits_(limits),
84-
num_packets_left_(0) {
85+
num_packets_left_(0),
86+
end_of_frame_(end_of_frame) {
8587
// Guard against uninitialized memory in packetization_mode.
8688
RTC_CHECK(packetization_mode == H265PacketizationMode::NonInterleaved ||
8789
packetization_mode == H265PacketizationMode::SingleNalUnit);
@@ -286,7 +288,7 @@ bool RtpPacketizerH265::NextPacket(RtpPacketToSend* rtp_packet) {
286288
} else {
287289
NextFragmentPacket(rtp_packet);
288290
}
289-
rtp_packet->SetMarker(packets_.empty());
291+
rtp_packet->SetMarker(packets_.empty() && end_of_frame_);
290292
--num_packets_left_;
291293
return true;
292294
}

modules/rtp_rtcp/source/rtp_format_h265.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class RtpPacketizerH265 : public RtpPacketizer {
3030
// The payload_data must be exactly one encoded H.265 frame.
3131
RtpPacketizerH265(rtc::ArrayView<const uint8_t> payload,
3232
PayloadSizeLimits limits,
33-
H265PacketizationMode packetization_mode);
33+
H265PacketizationMode packetization_mode,
34+
bool end_of_frame = true);
3435

3536
~RtpPacketizerH265() override;
3637

@@ -102,6 +103,7 @@ class RtpPacketizerH265 : public RtpPacketizer {
102103

103104
const PayloadSizeLimits limits_;
104105
size_t num_packets_left_;
106+
bool end_of_frame_ = true;
105107
};
106108
} // namespace webrtc
107109
#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_FORMAT_H265_H_

0 commit comments

Comments
 (0)