OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 // Test application that simulates a cast sender - Data can be either generated | 5 // Test application that simulates a cast sender - Data can be either generated |
6 // or read from a file. | 6 // or read from a file. |
7 | 7 |
8 #include <queue> | 8 #include <queue> |
9 | 9 |
10 #include "base/at_exit.h" | 10 #include "base/at_exit.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "media/base/video_frame.h" | 23 #include "media/base/video_frame.h" |
24 #include "media/cast/cast_config.h" | 24 #include "media/cast/cast_config.h" |
25 #include "media/cast/cast_environment.h" | 25 #include "media/cast/cast_environment.h" |
26 #include "media/cast/cast_sender.h" | 26 #include "media/cast/cast_sender.h" |
27 #include "media/cast/logging/encoding_event_subscriber.h" | 27 #include "media/cast/logging/encoding_event_subscriber.h" |
28 #include "media/cast/logging/log_serializer.h" | 28 #include "media/cast/logging/log_serializer.h" |
29 #include "media/cast/logging/logging_defines.h" | 29 #include "media/cast/logging/logging_defines.h" |
30 #include "media/cast/logging/proto/raw_events.pb.h" | 30 #include "media/cast/logging/proto/raw_events.pb.h" |
31 #include "media/cast/logging/receiver_time_offset_estimator_impl.h" | 31 #include "media/cast/logging/receiver_time_offset_estimator_impl.h" |
32 #include "media/cast/logging/stats_event_subscriber.h" | 32 #include "media/cast/logging/stats_event_subscriber.h" |
| 33 #include "media/cast/net/cast_transport_defines.h" |
| 34 #include "media/cast/net/cast_transport_sender.h" |
| 35 #include "media/cast/net/udp_transport.h" |
33 #include "media/cast/test/fake_media_source.h" | 36 #include "media/cast/test/fake_media_source.h" |
34 #include "media/cast/test/utility/default_config.h" | 37 #include "media/cast/test/utility/default_config.h" |
35 #include "media/cast/test/utility/input_builder.h" | 38 #include "media/cast/test/utility/input_builder.h" |
36 #include "media/cast/transport/cast_transport_defines.h" | |
37 #include "media/cast/transport/cast_transport_sender.h" | |
38 #include "media/cast/transport/transport/udp_transport.h" | |
39 | 39 |
40 namespace { | 40 namespace { |
41 static const int kAudioChannels = 2; | 41 static const int kAudioChannels = 2; |
42 static const int kAudioSamplingFrequency = 48000; | 42 static const int kAudioSamplingFrequency = 48000; |
43 | 43 |
44 // The max allowed size of serialized log. | 44 // The max allowed size of serialized log. |
45 const int kMaxSerializedLogBytes = 10 * 1000 * 1000; | 45 const int kMaxSerializedLogBytes = 10 * 1000 * 1000; |
46 | 46 |
47 // Flags for this program: | 47 // Flags for this program: |
48 // | 48 // |
(...skipping 15 matching lines...) Expand all Loading... |
64 | 64 |
65 media::cast::AudioSenderConfig GetAudioSenderConfig() { | 65 media::cast::AudioSenderConfig GetAudioSenderConfig() { |
66 media::cast::AudioSenderConfig audio_config; | 66 media::cast::AudioSenderConfig audio_config; |
67 | 67 |
68 audio_config.rtcp_c_name = "audio_sender@a.b.c.d"; | 68 audio_config.rtcp_c_name = "audio_sender@a.b.c.d"; |
69 | 69 |
70 audio_config.use_external_encoder = false; | 70 audio_config.use_external_encoder = false; |
71 audio_config.frequency = kAudioSamplingFrequency; | 71 audio_config.frequency = kAudioSamplingFrequency; |
72 audio_config.channels = kAudioChannels; | 72 audio_config.channels = kAudioChannels; |
73 audio_config.bitrate = 0; // Use Opus auto-VBR mode. | 73 audio_config.bitrate = 0; // Use Opus auto-VBR mode. |
74 audio_config.codec = media::cast::transport::CODEC_AUDIO_OPUS; | 74 audio_config.codec = media::cast::CODEC_AUDIO_OPUS; |
75 audio_config.ssrc = 1; | 75 audio_config.ssrc = 1; |
76 audio_config.incoming_feedback_ssrc = 2; | 76 audio_config.incoming_feedback_ssrc = 2; |
77 audio_config.rtp_payload_type = 127; | 77 audio_config.rtp_payload_type = 127; |
78 // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and | 78 // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and |
79 // should receiver.cc's config also be 100? | 79 // should receiver.cc's config also be 100? |
80 audio_config.target_playout_delay = base::TimeDelta::FromMilliseconds(300); | 80 audio_config.target_playout_delay = base::TimeDelta::FromMilliseconds(300); |
81 return audio_config; | 81 return audio_config; |
82 } | 82 } |
83 | 83 |
84 media::cast::VideoSenderConfig GetVideoSenderConfig() { | 84 media::cast::VideoSenderConfig GetVideoSenderConfig() { |
85 media::cast::VideoSenderConfig video_config; | 85 media::cast::VideoSenderConfig video_config; |
86 | 86 |
87 video_config.rtcp_c_name = "video_sender@a.b.c.d"; | 87 video_config.rtcp_c_name = "video_sender@a.b.c.d"; |
88 video_config.use_external_encoder = false; | 88 video_config.use_external_encoder = false; |
89 | 89 |
90 // Resolution. | 90 // Resolution. |
91 video_config.width = 1280; | 91 video_config.width = 1280; |
92 video_config.height = 720; | 92 video_config.height = 720; |
93 video_config.max_frame_rate = 30; | 93 video_config.max_frame_rate = 30; |
94 | 94 |
95 // Bitrates. | 95 // Bitrates. |
96 video_config.max_bitrate = 2500000; | 96 video_config.max_bitrate = 2500000; |
97 video_config.min_bitrate = 100000; | 97 video_config.min_bitrate = 100000; |
98 video_config.start_bitrate = video_config.min_bitrate; | 98 video_config.start_bitrate = video_config.min_bitrate; |
99 | 99 |
100 // Codec. | 100 // Codec. |
101 video_config.codec = media::cast::transport::CODEC_VIDEO_VP8; | 101 video_config.codec = media::cast::CODEC_VIDEO_VP8; |
102 video_config.max_number_of_video_buffers_used = 1; | 102 video_config.max_number_of_video_buffers_used = 1; |
103 video_config.number_of_encode_threads = 2; | 103 video_config.number_of_encode_threads = 2; |
104 | 104 |
105 // Quality options. | 105 // Quality options. |
106 video_config.min_qp = 4; | 106 video_config.min_qp = 4; |
107 video_config.max_qp = 40; | 107 video_config.max_qp = 40; |
108 | 108 |
109 // SSRCs and payload type. Don't change them. | 109 // SSRCs and payload type. Don't change them. |
110 video_config.ssrc = 11; | 110 video_config.ssrc = 11; |
111 video_config.incoming_feedback_ssrc = 12; | 111 video_config.incoming_feedback_ssrc = 12; |
112 video_config.rtp_payload_type = 96; | 112 video_config.rtp_payload_type = 96; |
113 // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and | 113 // TODO(miu): The default in cast_defines.h is 100. Should this be 100, and |
114 // should receiver.cc's config also be 100? | 114 // should receiver.cc's config also be 100? |
115 video_config.target_playout_delay = base::TimeDelta::FromMilliseconds(300); | 115 video_config.target_playout_delay = base::TimeDelta::FromMilliseconds(300); |
116 return video_config; | 116 return video_config; |
117 } | 117 } |
118 | 118 |
119 void UpdateCastTransportStatus( | 119 void UpdateCastTransportStatus( |
120 media::cast::transport::CastTransportStatus status) { | 120 media::cast::CastTransportStatus status) { |
121 VLOG(1) << "Transport status: " << status; | 121 VLOG(1) << "Transport status: " << status; |
122 } | 122 } |
123 | 123 |
124 void LogRawEvents( | 124 void LogRawEvents( |
125 const scoped_refptr<media::cast::CastEnvironment>& cast_environment, | 125 const scoped_refptr<media::cast::CastEnvironment>& cast_environment, |
126 const std::vector<media::cast::PacketEvent>& packet_events) { | 126 const std::vector<media::cast::PacketEvent>& packet_events) { |
127 VLOG(1) << "Got packet events from transport, size: " << packet_events.size(); | 127 VLOG(1) << "Got packet events from transport, size: " << packet_events.size(); |
128 for (std::vector<media::cast::PacketEvent>::const_iterator it = | 128 for (std::vector<media::cast::PacketEvent>::const_iterator it = |
129 packet_events.begin(); | 129 packet_events.begin(); |
130 it != packet_events.end(); | 130 it != packet_events.end(); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 &override_fps)){ | 301 &override_fps)){ |
302 override_fps = 0; | 302 override_fps = 0; |
303 } | 303 } |
304 base::FilePath source_path = cmd->GetSwitchValuePath(kSwitchSourceFile); | 304 base::FilePath source_path = cmd->GetSwitchValuePath(kSwitchSourceFile); |
305 if (!source_path.empty()) { | 305 if (!source_path.empty()) { |
306 LOG(INFO) << "Source: " << source_path.value(); | 306 LOG(INFO) << "Source: " << source_path.value(); |
307 fake_media_source->SetSourceFile(source_path, override_fps); | 307 fake_media_source->SetSourceFile(source_path, override_fps); |
308 } | 308 } |
309 | 309 |
310 // CastTransportSender initialization. | 310 // CastTransportSender initialization. |
311 scoped_ptr<media::cast::transport::CastTransportSender> transport_sender = | 311 scoped_ptr<media::cast::CastTransportSender> transport_sender = |
312 media::cast::transport::CastTransportSender::Create( | 312 media::cast::CastTransportSender::Create( |
313 NULL, // net log. | 313 NULL, // net log. |
314 cast_environment->Clock(), | 314 cast_environment->Clock(), |
315 remote_endpoint, | 315 remote_endpoint, |
316 base::Bind(&UpdateCastTransportStatus), | 316 base::Bind(&UpdateCastTransportStatus), |
317 base::Bind(&LogRawEvents, cast_environment), | 317 base::Bind(&LogRawEvents, cast_environment), |
318 base::TimeDelta::FromSeconds(1), | 318 base::TimeDelta::FromSeconds(1), |
319 io_message_loop.message_loop_proxy()); | 319 io_message_loop.message_loop_proxy()); |
320 | 320 |
321 // CastSender initialization. | 321 // CastSender initialization. |
322 scoped_ptr<media::cast::CastSender> cast_sender = | 322 scoped_ptr<media::cast::CastSender> cast_sender = |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 base::Passed(&audio_stats_subscriber), | 393 base::Passed(&audio_stats_subscriber), |
394 base::Passed(&offset_estimator)), | 394 base::Passed(&offset_estimator)), |
395 base::TimeDelta::FromSeconds(logging_duration_seconds)); | 395 base::TimeDelta::FromSeconds(logging_duration_seconds)); |
396 | 396 |
397 fake_media_source->Start(cast_sender->audio_frame_input(), | 397 fake_media_source->Start(cast_sender->audio_frame_input(), |
398 cast_sender->video_frame_input()); | 398 cast_sender->video_frame_input()); |
399 | 399 |
400 io_message_loop.Run(); | 400 io_message_loop.Run(); |
401 return 0; | 401 return 0; |
402 } | 402 } |
OLD | NEW |