diff --git a/api/video/video_frame_metadata.cc b/api/video/video_frame_metadata.cc index 6efb6ad875..df33cf5566 100644 --- a/api/video/video_frame_metadata.cc +++ b/api/video/video_frame_metadata.cc @@ -136,6 +136,14 @@ void VideoFrameMetadata::SetRTPVideoHeaderCodecSpecifics( codec_specifics_ = std::move(codec_specifics); } +uint32_t VideoFrameMetadata::GetSsrc() const { + return ssrc_; +} + +void VideoFrameMetadata::SetSsrc(uint32_t ssrc) { + ssrc_ = ssrc; +} + std::vector VideoFrameMetadata::GetCsrcs() const { return csrcs_; } diff --git a/api/video/video_frame_metadata.h b/api/video/video_frame_metadata.h index f8f144e9b9..5a1c0edde7 100644 --- a/api/video/video_frame_metadata.h +++ b/api/video/video_frame_metadata.h @@ -89,6 +89,8 @@ class RTC_EXPORT VideoFrameMetadata { void SetRTPVideoHeaderCodecSpecifics( RTPVideoHeaderCodecSpecifics codec_specifics); + uint32_t GetSsrc() const; + void SetSsrc(uint32_t ssrc); std::vector GetCsrcs() const; void SetCsrcs(std::vector csrcs); @@ -111,6 +113,8 @@ class RTC_EXPORT VideoFrameMetadata { VideoCodecType codec_ = VideoCodecType::kVideoCodecGeneric; RTPVideoHeaderCodecSpecifics codec_specifics_; + // RTP info. + uint32_t ssrc_; std::vector csrcs_; }; } // namespace webrtc diff --git a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc index ecf8aedf83..bcdfc1f829 100644 --- a/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc +++ b/modules/rtp_rtcp/source/rtp_sender_video_frame_transformer_delegate.cc @@ -41,10 +41,10 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface { codec_type_(codec_type), timestamp_(rtp_timestamp), capture_time_ms_(encoded_image.capture_time_ms_), - expected_retransmission_time_ms_(expected_retransmission_time_ms), - ssrc_(ssrc) { + expected_retransmission_time_ms_(expected_retransmission_time_ms) { RTC_DCHECK_GE(payload_type_, 0); RTC_DCHECK_LE(payload_type_, 127); + metadata_.SetSsrc(ssrc); metadata_.SetCsrcs(std::move(csrcs)); } @@ -60,7 +60,7 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface { } uint32_t GetTimestamp() const override { return timestamp_; } - uint32_t GetSsrc() const override { return ssrc_; } + uint32_t GetSsrc() const override { return metadata_.GetSsrc(); } bool IsKeyFrame() const override { return frame_type_ == VideoFrameType::kVideoFrameKey; @@ -73,11 +73,13 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface { const VideoFrameMetadata& GetMetadata() const override { return metadata_; } void SetMetadata(const VideoFrameMetadata& metadata) override { header_.SetFromMetadata(metadata); + uint32_t ssrc = metadata.GetSsrc(); std::vector csrcs = metadata.GetCsrcs(); // We have to keep a local copy because GetMetadata() has to return a // reference. metadata_ = header_.GetAsMetadata(); + metadata_.SetSsrc(ssrc); metadata_.SetCsrcs(std::move(csrcs)); } @@ -106,7 +108,6 @@ class TransformableVideoSenderFrame : public TransformableVideoFrameInterface { const uint32_t timestamp_; const int64_t capture_time_ms_; const absl::optional expected_retransmission_time_ms_; - const uint32_t ssrc_; }; } // namespace diff --git a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc index 501337a0d2..1554625baa 100644 --- a/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc +++ b/modules/rtp_rtcp/source/rtp_video_stream_receiver_frame_transformer_delegate.cc @@ -27,8 +27,8 @@ class TransformableVideoReceiverFrame TransformableVideoReceiverFrame(std::unique_ptr frame, uint32_t ssrc) : frame_(std::move(frame)), - metadata_(frame_->GetRtpVideoHeader().GetAsMetadata()), - ssrc_(ssrc) { + metadata_(frame_->GetRtpVideoHeader().GetAsMetadata()) { + metadata_.SetSsrc(ssrc); metadata_.SetCsrcs(frame_->Csrcs()); } ~TransformableVideoReceiverFrame() override = default; @@ -44,7 +44,7 @@ class TransformableVideoReceiverFrame } uint8_t GetPayloadType() const override { return frame_->PayloadType(); } - uint32_t GetSsrc() const override { return ssrc_; } + uint32_t GetSsrc() const override { return metadata_.GetSsrc(); } uint32_t GetTimestamp() const override { return frame_->Timestamp(); } bool IsKeyFrame() const override { @@ -70,7 +70,6 @@ class TransformableVideoReceiverFrame private: std::unique_ptr frame_; VideoFrameMetadata metadata_; - const uint32_t ssrc_; }; } // namespace