aboutsummaryrefslogtreecommitdiff
path: root/cast/streaming/sender_session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cast/streaming/sender_session.cc')
-rw-r--r--cast/streaming/sender_session.cc60
1 files changed, 36 insertions, 24 deletions
diff --git a/cast/streaming/sender_session.cc b/cast/streaming/sender_session.cc
index c153d076..897e7560 100644
--- a/cast/streaming/sender_session.cc
+++ b/cast/streaming/sender_session.cc
@@ -34,19 +34,22 @@ namespace cast {
namespace {
AudioStream CreateStream(int index, const AudioCaptureConfig& config) {
- return AudioStream{Stream{index,
- Stream::Type::kAudioSource,
- config.channels,
- CodecToString(config.codec),
- GetPayloadType(config.codec),
- GenerateSsrc(true /*high_priority*/),
- config.target_playout_delay,
- crypto::GenerateRandomBytes16(),
- crypto::GenerateRandomBytes16(),
- false /* receiver_rtcp_event_log */,
- {} /* receiver_rtcp_dscp */,
- config.sample_rate},
- config.bit_rate};
+ return AudioStream{
+ Stream{index,
+ Stream::Type::kAudioSource,
+ config.channels,
+ CodecToString(config.codec),
+ GetPayloadType(config.codec),
+ GenerateSsrc(true /*high_priority*/),
+ config.target_playout_delay,
+ GenerateRandomBytes16(),
+ GenerateRandomBytes16(),
+ false /* receiver_rtcp_event_log */,
+ {} /* receiver_rtcp_dscp */,
+ config.sample_rate},
+ (config.bit_rate >= capture_recommendations::kDefaultAudioMinBitRate)
+ ? config.bit_rate
+ : capture_recommendations::kDefaultAudioMaxBitRate};
}
Resolution ToResolution(const DisplayResolution& display_resolution) {
@@ -67,17 +70,20 @@ VideoStream CreateStream(int index, const VideoCaptureConfig& config) {
GetPayloadType(config.codec),
GenerateSsrc(false /*high_priority*/),
config.target_playout_delay,
- crypto::GenerateRandomBytes16(),
- crypto::GenerateRandomBytes16(),
+ GenerateRandomBytes16(),
+ GenerateRandomBytes16(),
false /* receiver_rtcp_event_log */,
{} /* receiver_rtcp_dscp */,
kRtpVideoTimebase},
SimpleFraction{config.max_frame_rate.numerator,
config.max_frame_rate.denominator},
- config.max_bit_rate,
- {},
- {},
- {}, // protection, profile, level
+ (config.max_bit_rate >
+ capture_recommendations::kDefaultVideoBitRateLimits.minimum)
+ ? config.max_bit_rate
+ : capture_recommendations::kDefaultVideoBitRateLimits.maximum,
+ {}, // protection
+ {}, // profile
+ {}, // protection
std::move(resolutions),
{} /* error_recovery mode, always "castv2" */
};
@@ -111,7 +117,7 @@ Offer CreateOffer(const std::vector<AudioCaptureConfig>& audio_configs,
}
bool IsValidAudioCaptureConfig(const AudioCaptureConfig& config) {
- return config.channels >= 1 && config.bit_rate > 0;
+ return config.channels >= 1 && config.bit_rate >= 0;
}
bool IsValidResolution(const DisplayResolution& resolution) {
@@ -121,7 +127,10 @@ bool IsValidResolution(const DisplayResolution& resolution) {
bool IsValidVideoCaptureConfig(const VideoCaptureConfig& config) {
return config.max_frame_rate.numerator > 0 &&
- config.max_frame_rate.denominator > 0 && config.max_bit_rate > 0 &&
+ config.max_frame_rate.denominator > 0 &&
+ ((config.max_bit_rate == 0) ||
+ (config.max_bit_rate >=
+ capture_recommendations::kDefaultVideoBitRateLimits.minimum)) &&
!config.resolutions.empty() &&
std::all_of(config.resolutions.begin(), config.resolutions.end(),
IsValidResolution);
@@ -162,11 +171,11 @@ SenderSession::SenderSession(IPAddress remote_address,
OSP_DCHECK(message_port_);
OSP_DCHECK(environment_);
- message_port_->SetClient(this);
+ message_port_->SetClient(this, "sender-" + std::to_string(session_id_));
}
SenderSession::~SenderSession() {
- message_port_->SetClient(nullptr);
+ message_port_->ResetClient();
}
Error SenderSession::Negotiate(std::vector<AudioCaptureConfig> audio_configs,
@@ -194,7 +203,10 @@ Error SenderSession::Negotiate(std::vector<AudioCaptureConfig> audio_configs,
message_body[kOfferMessageBody] = std::move(json_offer.value());
Message message;
- message.sender_id = std::to_string(session_id_);
+ // Currently we don't have a way to discover the ID of the receiver we
+ // are connected to, since we have to send the first message.
+ // TODO(jophba): migrate to discovered receiver ID when available.
+ message.sender_id = kDefaultStreamingReceiverSenderId;
message.message_namespace = kCastWebrtcNamespace;
message.body = std::move(message_body);
SendMessage(&message);