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);
|
receive_streams_.push_back(sp);
|
||||||
rtp_receive_parameters_[sp.first_ssrc()] =
|
rtp_receive_parameters_[sp.first_ssrc()] =
|
||||||
CreateRtpParametersWithOneEncoding();
|
CreateRtpParametersWithEncodings(sp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
virtual bool RemoveRecvStream(uint32_t ssrc) {
|
virtual bool RemoveRecvStream(uint32_t ssrc) {
|
||||||
|
|||||||
@ -2252,26 +2252,20 @@ WebRtcVideoChannel::WebRtcVideoReceiveStream::GetSources() {
|
|||||||
return stream_->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
|
webrtc::RtpParameters
|
||||||
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetRtpParameters() const {
|
WebRtcVideoChannel::WebRtcVideoReceiveStream::GetRtpParameters() const {
|
||||||
webrtc::RtpParameters rtp_parameters;
|
webrtc::RtpParameters rtp_parameters;
|
||||||
rtp_parameters.encodings.emplace_back();
|
|
||||||
rtp_parameters.encodings[0].ssrc = GetFirstPrimarySsrc();
|
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.back().ssrc = ssrc;
|
||||||
|
}
|
||||||
|
|
||||||
rtp_parameters.header_extensions = config_.rtp.extensions;
|
rtp_parameters.header_extensions = config_.rtp.extensions;
|
||||||
|
rtp_parameters.rtcp.reduced_size =
|
||||||
|
config_.rtp.rtcp_mode == webrtc::RtcpMode::kReducedSize;
|
||||||
|
|
||||||
return rtp_parameters;
|
return rtp_parameters;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -420,8 +420,6 @@ class WebRtcVideoChannel : public VideoMediaChannel, public webrtc::Transport {
|
|||||||
|
|
||||||
std::string GetCodecNameFromPayloadType(int payload_type);
|
std::string GetCodecNameFromPayloadType(int payload_type);
|
||||||
|
|
||||||
absl::optional<uint32_t> GetFirstPrimarySsrc() const;
|
|
||||||
|
|
||||||
webrtc::Call* const call_;
|
webrtc::Call* const call_;
|
||||||
const StreamParams stream_params_;
|
const StreamParams stream_params_;
|
||||||
|
|
||||||
|
|||||||
@ -230,6 +230,24 @@ class RtpSenderReceiverTest : public testing::Test,
|
|||||||
VerifyVideoChannelOutput();
|
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() {
|
void DestroyAudioRtpReceiver() {
|
||||||
audio_rtp_receiver_ = nullptr;
|
audio_rtp_receiver_ = nullptr;
|
||||||
VerifyVoiceChannelNoOutput();
|
VerifyVoiceChannelNoOutput();
|
||||||
@ -1263,6 +1281,15 @@ TEST_F(RtpSenderReceiverTest, VideoReceiverCanSetParameters) {
|
|||||||
DestroyVideoRtpReceiver();
|
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
|
// Test that makes sure that a video track content hint translates to the proper
|
||||||
// value for sources that are not screencast.
|
// value for sources that are not screencast.
|
||||||
TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) {
|
TEST_F(RtpSenderReceiverTest, PropagatesVideoTrackContentHint) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user