Index: media/cast/transport/cast_transport_sender_impl.cc |
diff --git a/media/cast/transport/cast_transport_sender_impl.cc b/media/cast/transport/cast_transport_sender_impl.cc |
index 8f07832d1c73851e4e9655397754a9fe82dbccab..06877b08ba5155c2f0d4794add8f4869959b1c32 100644 |
--- a/media/cast/transport/cast_transport_sender_impl.cc |
+++ b/media/cast/transport/cast_transport_sender_impl.cc |
@@ -56,6 +56,7 @@ CastTransportSenderImpl::CastTransportSenderImpl( |
transport_task_runner), |
rtcp_builder_(&pacer_), |
raw_events_callback_(raw_events_callback) { |
+ DCHECK(clock_); |
if (!raw_events_callback_.is_null()) { |
DCHECK(raw_events_callback_interval > base::TimeDelta()); |
event_subscriber_.reset(new SimpleEventSubscriber); |
@@ -74,24 +75,42 @@ CastTransportSenderImpl::~CastTransportSenderImpl() { |
void CastTransportSenderImpl::InitializeAudio( |
const CastTransportAudioConfig& config) { |
- pacer_.RegisterAudioSsrc(config.rtp.config.ssrc); |
- audio_sender_.reset(new TransportAudioSender( |
- config, clock_, transport_task_runner_, &pacer_)); |
- if (audio_sender_->initialized()) |
+ LOG_IF(WARNING, config.rtp.config.aes_key.empty() || |
+ config.rtp.config.aes_iv_mask.empty()) |
+ << "Unsafe to send audio with encryption DISABLED."; |
+ if (!audio_encryptor_.Initialize(config.rtp.config.aes_key, |
+ config.rtp.config.aes_iv_mask)) { |
+ status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED); |
+ return; |
+ } |
+ audio_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_)); |
+ if (audio_sender_->InitializeAudio(config)) { |
+ pacer_.RegisterAudioSsrc(config.rtp.config.ssrc); |
status_callback_.Run(TRANSPORT_AUDIO_INITIALIZED); |
- else |
+ } else { |
+ audio_sender_.reset(); |
status_callback_.Run(TRANSPORT_AUDIO_UNINITIALIZED); |
+ } |
} |
void CastTransportSenderImpl::InitializeVideo( |
const CastTransportVideoConfig& config) { |
- pacer_.RegisterVideoSsrc(config.rtp.config.ssrc); |
- video_sender_.reset(new TransportVideoSender( |
- config, clock_, transport_task_runner_, &pacer_)); |
- if (video_sender_->initialized()) |
+ LOG_IF(WARNING, config.rtp.config.aes_key.empty() || |
+ config.rtp.config.aes_iv_mask.empty()) |
+ << "Unsafe to send video with encryption DISABLED."; |
+ if (!video_encryptor_.Initialize(config.rtp.config.aes_key, |
+ config.rtp.config.aes_iv_mask)) { |
+ status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED); |
+ return; |
+ } |
+ video_sender_.reset(new RtpSender(clock_, transport_task_runner_, &pacer_)); |
+ if (video_sender_->InitializeVideo(config)) { |
+ pacer_.RegisterVideoSsrc(config.rtp.config.ssrc); |
status_callback_.Run(TRANSPORT_VIDEO_INITIALIZED); |
- else |
+ } else { |
+ video_sender_.reset(); |
status_callback_.Run(TRANSPORT_VIDEO_UNINITIALIZED); |
+ } |
} |
void CastTransportSenderImpl::SetPacketReceiver( |
@@ -99,16 +118,35 @@ void CastTransportSenderImpl::SetPacketReceiver( |
transport_->StartReceiving(packet_receiver); |
} |
+namespace { |
+void EncryptAndSendFrame(const EncodedFrame& frame, |
+ TransportEncryptionHandler* encryptor, |
+ RtpSender* sender) { |
+ if (encryptor->initialized()) { |
+ EncodedFrame encrypted_frame; |
+ frame.CopyMetadataTo(&encrypted_frame); |
+ if (encryptor->Encrypt(frame.frame_id, frame.data, &encrypted_frame.data)) { |
+ sender->SendFrame(encrypted_frame); |
+ } else { |
+ LOG(ERROR) << "Encryption failed. Not sending frame with ID " |
+ << frame.frame_id; |
+ } |
+ } else { |
+ sender->SendFrame(frame); |
+ } |
+} |
+} // namespace |
+ |
void CastTransportSenderImpl::InsertCodedAudioFrame( |
const EncodedFrame& audio_frame) { |
DCHECK(audio_sender_) << "Audio sender uninitialized"; |
- audio_sender_->SendFrame(audio_frame); |
+ EncryptAndSendFrame(audio_frame, &audio_encryptor_, audio_sender_.get()); |
} |
void CastTransportSenderImpl::InsertCodedVideoFrame( |
const EncodedFrame& video_frame) { |
DCHECK(video_sender_) << "Video sender uninitialized"; |
- video_sender_->SendFrame(video_frame); |
+ EncryptAndSendFrame(video_frame, &video_encryptor_, video_sender_.get()); |
} |
void CastTransportSenderImpl::SendRtcpFromRtpSender( |