Add RTCP and simulcast support for RTCRtpReceiver::getParameters()
Bug: webrtc:9989 Change-Id: I1235789cd485750937a427199f9d32ed6180145e Reviewed-on: https://webrtc-review.googlesource.com/c/110616 Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Steve Anton <steveanton@webrtc.org> Commit-Queue: Florent Castelli <orphis@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25714}
This commit is contained in:
parent
4bc60452f7
commit
38332cdcb1
@ -124,7 +124,7 @@ class RtpHelper : public Base {
|
||||
}
|
||||
receive_streams_.push_back(sp);
|
||||
rtp_receive_parameters_[sp.first_ssrc()] =
|
||||
CreateRtpParametersWithOneEncoding();
|
||||
CreateRtpParametersWithEncodings(sp);
|
||||
return true;
|
||||
}
|
||||
virtual bool RemoveRecvStream(uint32_t ssrc) {
|
||||
|
||||
@ -2252,26 +2252,20 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::GetSources() {
|
||||
return stream_->GetSources();
|
||||
}
|
||||
|
||||
absl::optional<uint32_t>
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetFirstPrimarySsrc() const {
|
||||
std::vector<uint32_t> primary_ssrcs;
|
||||
stream_params_.GetPrimarySsrcs(&primary_ssrcs);
|
||||
|
||||
if (primary_ssrcs.empty()) {
|
||||
RTC_LOG(LS_WARNING)
|
||||
<< "Empty primary ssrcs vector, returning empty optional";
|
||||
return absl::nullopt;
|
||||
} else {
|
||||
return primary_ssrcs[0];
|
||||
}
|
||||
}
|
||||
|
||||
webrtc::RtpParameters
|
||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetRtpParameters() const {
|
||||
webrtc::RtpParameters rtp_parameters;
|
||||
|
||||
std::vector<uint32_t> primary_ssrcs;
|
||||
stream_params_.GetPrimarySsrcs(&primary_ssrcs);
|
||||
for (uint32_t ssrc : primary_ssrcs) {
|
||||
rtp_parameters.encodings.emplace_back();
|
||||
rtp_parameters.encodings[0].ssrc = GetFirstPrimarySsrc();
|
||||
rtp_parameters.encodings.back().ssrc = ssrc;
|
||||
}
|
||||
|
||||
rtp_parameters.header_extensions = config_.rtp.extensions;
|
||||
rtp_parameters.rtcp.reduced_size =
|
||||
config_.rtp.rtcp_mode == webrtc::RtcpMode::kReducedSize;
|
||||
|
||||
return rtp_parameters;
|
||||
}
|
||||
|
||||
@ -420,8 +420,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
|
||||
|
||||
std::string GetCodecNameFromPayloadType(int payload_type);
|
||||
|
||||
absl::optional<uint32_t> GetFirstPrimarySsrc() const;
|
||||
|
||||
webrtc::Call* const call_;
|
||||
const StreamParams stream_params_;
|
||||
|
||||
|
||||
@ -230,6 +230,24 @@ class RtpSenderReceiverTest : public testing::Test,
|
||||
VerifyVideoChannelOutput();
|
||||
}
|
||||
|
||||
void CreateVideoRtpReceiverWithSimulcast(
|
||||
std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams = {},
|
||||
int num_layers = kVideoSimulcastLayerCount) {
|
||||
std::vector<uint32_t> ssrcs;
|
||||
for (int i = 0; i < num_layers; ++i)
|
||||
ssrcs.push_back(kVideoSsrcSimulcast + i);
|
||||
cricket::StreamParams stream_params =
|
||||
cricket::CreateSimStreamParams("cname", ssrcs);
|
||||
video_media_channel_->AddRecvStream(stream_params);
|
||||
uint32_t primary_ssrc = stream_params.first_ssrc();
|
||||
|
||||
video_rtp_receiver_ = new VideoRtpReceiver(
|
||||
rtc::Thread::Current(), kVideoTrackId, std::move(streams));
|
||||
video_rtp_receiver_->SetMediaChannel(video_media_channel_);
|
||||
video_rtp_receiver_->SetupMediaChannel(primary_ssrc);
|
||||
video_track_ = video_rtp_receiver_->video_track();
|
||||
}
|
||||
|
||||
void DestroyAudioRtpReceiver() {
|
||||
audio_rtp_receiver_ = nullptr;
|
||||
VerifyVoiceChannelNoOutput();
|
||||
@ -1263,6 +1281,15 @@ TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
|
||||
DestroyVideoRtpReceiver();
|
||||
}
|
||||
|
||||
TEST_F(RtpSenderReceiverTest, VideoReceiverCanGetParametersWithSimulcast) {
|
||||
CreateVideoRtpReceiverWithSimulcast({}, 2);
|
||||
|
||||
RtpParameters params = video_rtp_receiver_->GetParameters();
|
||||
EXPECT_EQ(2u, params.encodings.size());
|
||||
|
||||
DestroyVideoRtpReceiver();
|
||||
}
|
||||
|
||||
// Test that makes sure that a video track content hint translates to the proper
|
||||
// value for sources that are not screencast.
|
||||
TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user