diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc index 4c840372f5..1f5bf55141 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc @@ -885,26 +885,15 @@ RTCPSender::BuildResult RTCPSender::BuildNACK(RtcpContext* ctx) { } RTCPSender::BuildResult RTCPSender::BuildBYE(RtcpContext* ctx) { - // sanity - if (ctx->position + 8 >= IP_PACKET_SIZE) + rtcp::Bye bye; + bye.From(ssrc_); + for (uint32_t csrc : csrcs_) + bye.WithCsrc(csrc); + + PacketBuiltCallback callback(ctx); + if (!callback.BuildPacket(bye)) return BuildResult::kTruncated; - // Add a bye packet - // Number of SSRC + CSRCs. - *ctx->AllocateData(1) = static_cast(0x80 + 1 + csrcs_.size()); - *ctx->AllocateData(1) = 203; - - // length - *ctx->AllocateData(1) = 0; - *ctx->AllocateData(1) = static_cast(1 + csrcs_.size()); - - // Add our own SSRC - ByteWriter::WriteBigEndian(ctx->AllocateData(4), ssrc_); - - // add CSRCs - for (size_t i = 0; i < csrcs_.size(); i++) - ByteWriter::WriteBigEndian(ctx->AllocateData(4), csrcs_[i]); - return BuildResult::kSuccess; }