diff options
Diffstat (limited to 'cast/streaming/receiver_session.cc')
-rw-r--r-- | cast/streaming/receiver_session.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/cast/streaming/receiver_session.cc b/cast/streaming/receiver_session.cc index 8082af8e..b55784b2 100644 --- a/cast/streaming/receiver_session.cc +++ b/cast/streaming/receiver_session.cc @@ -29,10 +29,14 @@ namespace { template <typename Stream, typename Codec> std::unique_ptr<Stream> SelectStream( const std::vector<Codec>& preferred_codecs, + ReceiverSession::Client* client, const std::vector<Stream>& offered_streams) { for (auto codec : preferred_codecs) { for (const Stream& offered_stream : offered_streams) { - if (offered_stream.codec == codec) { + if (offered_stream.codec == codec && + (offered_stream.stream.codec_parameter.empty() || + client->SupportsCodecParameter( + offered_stream.stream.codec_parameter))) { OSP_VLOG << "Selected " << CodecToString(codec) << " as codec for streaming"; return std::make_unique<Stream>(offered_stream); @@ -378,11 +382,11 @@ void ReceiverSession::SelectStreams(const Offer& offer, if (offer.cast_mode == CastMode::kMirroring) { if (!offer.audio_streams.empty() && !preferences_.audio_codecs.empty()) { properties->selected_audio = - SelectStream(preferences_.audio_codecs, offer.audio_streams); + SelectStream(preferences_.audio_codecs, client_, offer.audio_streams); } if (!offer.video_streams.empty() && !preferences_.video_codecs.empty()) { properties->selected_video = - SelectStream(preferences_.video_codecs, offer.video_streams); + SelectStream(preferences_.video_codecs, client_, offer.video_streams); } } else { OSP_DCHECK(offer.cast_mode == CastMode::kRemoting); @@ -459,7 +463,8 @@ ReceiverSession::ConfiguredReceivers ReceiverSession::SpawnReceivers( properties.selected_audio->stream.channels, properties.selected_audio->bit_rate, properties.selected_audio->stream.rtp_timebase, - properties.selected_audio->stream.target_delay}; + properties.selected_audio->stream.target_delay, + properties.selected_audio->stream.codec_parameter}; } VideoCaptureConfig video_config; @@ -471,7 +476,8 @@ ReceiverSession::ConfiguredReceivers ReceiverSession::SpawnReceivers( properties.selected_video->max_frame_rate, properties.selected_video->max_bit_rate, properties.selected_video->resolutions, - properties.selected_video->stream.target_delay}; + properties.selected_video->stream.target_delay, + properties.selected_video->stream.codec_parameter}; } return ConfiguredReceivers{ |