Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: media/cast/transport/transport_video_sender.cc

Issue 138843011: Cast: Adding helper crypto classes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/transport/transport_video_sender.h" 5 #include "media/cast/transport/transport_video_sender.h"
6 6
7 #include <list> 7 #include <list>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "crypto/encryptor.h"
13 #include "crypto/symmetric_key.h"
14 #include "media/base/video_frame.h" 12 #include "media/base/video_frame.h"
15 #include "media/cast/transport/pacing/paced_sender.h" 13 #include "media/cast/transport/pacing/paced_sender.h"
16 14
17 namespace media { 15 namespace media {
18 namespace cast { 16 namespace cast {
19 namespace transport { 17 namespace transport {
20 18
21 TransportVideoSender::TransportVideoSender( 19 TransportVideoSender::TransportVideoSender(
22 const CastTransportConfig& config, 20 const CastTransportConfig& config,
23 base::TickClock* clock, 21 base::TickClock* clock,
24 PacedSender* const paced_packet_sender) 22 PacedSender* const paced_packet_sender)
25 : rtp_max_delay_( 23 : rtp_max_delay_(
26 base::TimeDelta::FromMilliseconds(config.video_rtp_max_delay_ms)), 24 base::TimeDelta::FromMilliseconds(config.video_rtp_max_delay_ms)),
27 rtp_sender_(clock, config, false, paced_packet_sender), 25 encryptor_(),
28 initialized_(true) { 26 rtp_sender_(clock, config, false, paced_packet_sender) {
29 if (config.aes_iv_mask.size() == kAesKeySize && 27 initialized_ = encryptor_.Initialize(config.aes_key, config.aes_iv_mask);
30 config.aes_key.size() == kAesKeySize) {
31 iv_mask_ = config.aes_iv_mask;
32 key_.reset(crypto::SymmetricKey::Import(
33 crypto::SymmetricKey::AES, config.aes_key));
34 encryptor_.reset(new crypto::Encryptor());
35 encryptor_->Init(key_.get(), crypto::Encryptor::CTR, std::string());
36 } else if (config.aes_iv_mask.size() != 0 ||
37 config.aes_key.size() != 0) {
38 initialized_ = false;
39 DCHECK_EQ(config.aes_iv_mask.size(), 0u)
40 << "Invalid Crypto configuration: aes_iv_mask.size" ;
41 DCHECK_EQ(config.aes_key.size(), 0u)
42 << "Invalid Crypto configuration: aes_key.size";
43 }
44 } 28 }
45 29
46 TransportVideoSender::~TransportVideoSender() {} 30 TransportVideoSender::~TransportVideoSender() {}
47 31
48 void TransportVideoSender::InsertCodedVideoFrame( 32 void TransportVideoSender::InsertCodedVideoFrame(
49 const EncodedVideoFrame* coded_frame, 33 const EncodedVideoFrame* coded_frame,
50 const base::TimeTicks& capture_time) { 34 const base::TimeTicks& capture_time) {
51 if (encryptor_) { 35 if (encryptor_.initialized()) {
52 EncodedVideoFrame encrypted_video_frame; 36 EncodedVideoFrame encrypted_video_frame;
53 37
54 if (!EncryptVideoFrame(*coded_frame, &encrypted_video_frame)) 38 if (!EncryptVideoFrame(*coded_frame, &encrypted_video_frame))
55 return; 39 return;
56 40
57 rtp_sender_.IncomingEncodedVideoFrame(&encrypted_video_frame, capture_time); 41 rtp_sender_.IncomingEncodedVideoFrame(&encrypted_video_frame, capture_time);
58 } else { 42 } else {
59 rtp_sender_.IncomingEncodedVideoFrame(coded_frame, capture_time); 43 rtp_sender_.IncomingEncodedVideoFrame(coded_frame, capture_time);
60 } 44 }
61 if (coded_frame->key_frame) { 45 if (coded_frame->key_frame) {
62 VLOG(1) << "Send encoded key frame; frame_id:" 46 VLOG(1) << "Send encoded key frame; frame_id:"
63 << static_cast<int>(coded_frame->frame_id); 47 << static_cast<int>(coded_frame->frame_id);
64 } 48 }
65 } 49 }
66 50
67
68 bool TransportVideoSender::EncryptVideoFrame( 51 bool TransportVideoSender::EncryptVideoFrame(
69 const EncodedVideoFrame& video_frame, 52 const EncodedVideoFrame& video_frame,
70 EncodedVideoFrame* encrypted_frame) { 53 EncodedVideoFrame* encrypted_frame) {
71 if (!encryptor_->SetCounter(GetAesNonce(video_frame.frame_id, iv_mask_))) { 54 if (!encryptor_.Encrypt(
72 NOTREACHED() << "Failed to set counter"; 55 video_frame.frame_id, video_frame.data, &(encrypted_frame->data)))
73 return false; 56 return false;
74 }
75 57
76 if (!encryptor_->Encrypt(video_frame.data, &encrypted_frame->data)) {
77 NOTREACHED() << "Encrypt error";
78 return false;
79 }
80 encrypted_frame->codec = video_frame.codec; 58 encrypted_frame->codec = video_frame.codec;
81 encrypted_frame->key_frame = video_frame.key_frame; 59 encrypted_frame->key_frame = video_frame.key_frame;
82 encrypted_frame->frame_id = video_frame.frame_id; 60 encrypted_frame->frame_id = video_frame.frame_id;
83 encrypted_frame->last_referenced_frame_id = 61 encrypted_frame->last_referenced_frame_id =
84 video_frame.last_referenced_frame_id; 62 video_frame.last_referenced_frame_id;
85 return true; 63 return true;
86 } 64 }
87 65
88 void TransportVideoSender::GetStatistics(const base::TimeTicks& now, 66 void TransportVideoSender::GetStatistics(const base::TimeTicks& now,
89 RtcpSenderInfo* sender_info) { 67 RtcpSenderInfo* sender_info) {
90 rtp_sender_.RtpStatistics(now, sender_info); 68 rtp_sender_.RtpStatistics(now, sender_info);
91 } 69 }
92 70
93 void TransportVideoSender::ResendPackets( 71 void TransportVideoSender::ResendPackets(
94 const MissingFramesAndPacketsMap& missing_frames_and_packets) { 72 const MissingFramesAndPacketsMap& missing_frames_and_packets) {
95 rtp_sender_.ResendPackets(missing_frames_and_packets); 73 rtp_sender_.ResendPackets(missing_frames_and_packets);
96 } 74 }
97 75
98 } // namespace transport 76 } // namespace transport
99 } // namespace cast 77 } // namespace cast
100 } // namespace media 78 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698