| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/cast/net/cast_transport_sender_impl.h" | 5 #include "media/cast/net/cast_transport_sender_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 &CastTransportSenderImpl::OnReceivedPacket, base::Unretained(this))); | 91 &CastTransportSenderImpl::OnReceivedPacket, base::Unretained(this))); |
| 92 } | 92 } |
| 93 | 93 |
| 94 CastTransportSenderImpl::~CastTransportSenderImpl() { | 94 CastTransportSenderImpl::~CastTransportSenderImpl() { |
| 95 transport_->StopReceiving(); | 95 transport_->StopReceiving(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void CastTransportSenderImpl::InitializeAudio( | 98 void CastTransportSenderImpl::InitializeAudio( |
| 99 const CastTransportRtpConfig& config, | 99 const CastTransportRtpConfig& config, |
| 100 const RtcpCastMessageCallback& cast_message_cb, | 100 const RtcpCastMessageCallback& cast_message_cb, |
| 101 const RtcpRttCallback& rtt_cb) { | 101 const RtcpRttCallback& rtt_cb, |
| 102 const RtcpPliCallback& pli_cb) { |
| 102 LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) | 103 LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
| 103 << "Unsafe to send audio with encryption DISABLED."; | 104 << "Unsafe to send audio with encryption DISABLED."; |
| 104 if (!audio_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { | 105 if (!audio_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
| 105 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED); | 106 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED); |
| 106 return; | 107 return; |
| 107 } | 108 } |
| 108 | 109 |
| 109 audio_sender_.reset(new RtpSender(transport_task_runner_, &pacer_)); | 110 audio_sender_.reset(new RtpSender(transport_task_runner_, &pacer_)); |
| 110 if (audio_sender_->Initialize(config)) { | 111 if (audio_sender_->Initialize(config)) { |
| 111 // Audio packets have a higher priority. | 112 // Audio packets have a higher priority. |
| 112 pacer_.RegisterAudioSsrc(config.ssrc); | 113 pacer_.RegisterAudioSsrc(config.ssrc); |
| 113 pacer_.RegisterPrioritySsrc(config.ssrc); | 114 pacer_.RegisterPrioritySsrc(config.ssrc); |
| 114 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED); | 115 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED); |
| 115 } else { | 116 } else { |
| 116 audio_sender_.reset(); | 117 audio_sender_.reset(); |
| 117 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED); | 118 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_UNINITIALIZED); |
| 118 return; | 119 return; |
| 119 } | 120 } |
| 120 | 121 |
| 121 audio_rtcp_session_.reset(new SenderRtcpSession( | 122 audio_rtcp_session_.reset(new SenderRtcpSession( |
| 122 base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage, | 123 base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage, |
| 123 weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), | 124 weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), |
| 124 rtt_cb, base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage, | 125 rtt_cb, base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage, |
| 125 weak_factory_.GetWeakPtr(), AUDIO_EVENT), | 126 weak_factory_.GetWeakPtr(), AUDIO_EVENT), |
| 126 clock_, &pacer_, config.ssrc, config.feedback_ssrc)); | 127 pli_cb, clock_, &pacer_, config.ssrc, config.feedback_ssrc)); |
| 127 pacer_.RegisterAudioSsrc(config.ssrc); | 128 pacer_.RegisterAudioSsrc(config.ssrc); |
| 128 AddValidSsrc(config.feedback_ssrc); | 129 AddValidSsrc(config.feedback_ssrc); |
| 129 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED); | 130 transport_client_->OnStatusChanged(TRANSPORT_AUDIO_INITIALIZED); |
| 130 } | 131 } |
| 131 | 132 |
| 132 void CastTransportSenderImpl::InitializeVideo( | 133 void CastTransportSenderImpl::InitializeVideo( |
| 133 const CastTransportRtpConfig& config, | 134 const CastTransportRtpConfig& config, |
| 134 const RtcpCastMessageCallback& cast_message_cb, | 135 const RtcpCastMessageCallback& cast_message_cb, |
| 135 const RtcpRttCallback& rtt_cb) { | 136 const RtcpRttCallback& rtt_cb, |
| 137 const RtcpPliCallback& pli_cb) { |
| 136 LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) | 138 LOG_IF(WARNING, config.aes_key.empty() || config.aes_iv_mask.empty()) |
| 137 << "Unsafe to send video with encryption DISABLED."; | 139 << "Unsafe to send video with encryption DISABLED."; |
| 138 if (!video_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { | 140 if (!video_encryptor_.Initialize(config.aes_key, config.aes_iv_mask)) { |
| 139 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED); | 141 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED); |
| 140 return; | 142 return; |
| 141 } | 143 } |
| 142 | 144 |
| 143 video_sender_.reset(new RtpSender(transport_task_runner_, &pacer_)); | 145 video_sender_.reset(new RtpSender(transport_task_runner_, &pacer_)); |
| 144 if (!video_sender_->Initialize(config)) { | 146 if (!video_sender_->Initialize(config)) { |
| 145 video_sender_.reset(); | 147 video_sender_.reset(); |
| 146 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED); | 148 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_UNINITIALIZED); |
| 147 return; | 149 return; |
| 148 } | 150 } |
| 149 | 151 |
| 150 video_rtcp_session_.reset(new SenderRtcpSession( | 152 video_rtcp_session_.reset(new SenderRtcpSession( |
| 151 base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage, | 153 base::Bind(&CastTransportSenderImpl::OnReceivedCastMessage, |
| 152 weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), | 154 weak_factory_.GetWeakPtr(), config.ssrc, cast_message_cb), |
| 153 rtt_cb, base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage, | 155 rtt_cb, base::Bind(&CastTransportSenderImpl::OnReceivedLogMessage, |
| 154 weak_factory_.GetWeakPtr(), VIDEO_EVENT), | 156 weak_factory_.GetWeakPtr(), VIDEO_EVENT), |
| 155 clock_, &pacer_, config.ssrc, config.feedback_ssrc)); | 157 pli_cb, clock_, &pacer_, config.ssrc, config.feedback_ssrc)); |
| 156 pacer_.RegisterVideoSsrc(config.ssrc); | 158 pacer_.RegisterVideoSsrc(config.ssrc); |
| 157 AddValidSsrc(config.feedback_ssrc); | 159 AddValidSsrc(config.feedback_ssrc); |
| 158 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_INITIALIZED); | 160 transport_client_->OnStatusChanged(TRANSPORT_VIDEO_INITIALIZED); |
| 159 } | 161 } |
| 160 | 162 |
| 161 namespace { | 163 namespace { |
| 162 void EncryptAndSendFrame(const EncodedFrame& frame, | 164 void EncryptAndSendFrame(const EncodedFrame& frame, |
| 163 TransportEncryptionHandler* encryptor, | 165 TransportEncryptionHandler* encryptor, |
| 164 RtpSender* sender) { | 166 RtpSender* sender) { |
| 165 // TODO(miu): We probably shouldn't attempt to send an empty frame, but this | 167 // TODO(miu): We probably shouldn't attempt to send an empty frame, but this |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 wifi_options_autoreset_ = net::SetWifiOptions(wifi_options); | 415 wifi_options_autoreset_ = net::SetWifiOptions(wifi_options); |
| 414 } | 416 } |
| 415 | 417 |
| 416 // TODO(isheriff): This interface needs clean up. | 418 // TODO(isheriff): This interface needs clean up. |
| 417 // https://crbug.com/569259 | 419 // https://crbug.com/569259 |
| 418 void CastTransportSenderImpl::SendRtcpFromRtpReceiver( | 420 void CastTransportSenderImpl::SendRtcpFromRtpReceiver( |
| 419 uint32_t ssrc, | 421 uint32_t ssrc, |
| 420 uint32_t sender_ssrc, | 422 uint32_t sender_ssrc, |
| 421 const RtcpTimeData& time_data, | 423 const RtcpTimeData& time_data, |
| 422 const RtcpCastMessage* cast_message, | 424 const RtcpCastMessage* cast_message, |
| 425 const RtcpPliMessage* pli_message, |
| 423 base::TimeDelta target_delay, | 426 base::TimeDelta target_delay, |
| 424 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events, | 427 const ReceiverRtcpEventSubscriber::RtcpEvents* rtcp_events, |
| 425 const RtpReceiverStatistics* rtp_receiver_statistics) { | 428 const RtpReceiverStatistics* rtp_receiver_statistics) { |
| 426 const ReceiverRtcpSession rtcp(clock_, &pacer_, ssrc, sender_ssrc); | 429 const ReceiverRtcpSession rtcp(clock_, &pacer_, ssrc, sender_ssrc); |
| 427 rtcp.SendRtcpReport(time_data, cast_message, target_delay, rtcp_events, | 430 rtcp.SendRtcpReport(time_data, cast_message, pli_message, target_delay, |
| 428 rtp_receiver_statistics); | 431 rtcp_events, rtp_receiver_statistics); |
| 429 } | 432 } |
| 430 | 433 |
| 431 } // namespace cast | 434 } // namespace cast |
| 432 } // namespace media | 435 } // namespace media |
| OLD | NEW |