| 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(
|
|
|