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 // Simulate end to end streaming. | 5 // Simulate end to end streaming. |
6 // | 6 // |
7 // Input: | 7 // Input: |
8 // --source= | 8 // --source= |
9 // WebM used as the source of video and audio frames. | 9 // WebM used as the source of video and audio frames. |
10 // --output= | 10 // --output= |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
380 // Video receiver config. | 380 // Video receiver config. |
381 FrameReceiverConfig video_receiver_config = | 381 FrameReceiverConfig video_receiver_config = |
382 GetDefaultVideoReceiverConfig(); | 382 GetDefaultVideoReceiverConfig(); |
383 video_receiver_config.rtp_max_delay_ms = | 383 video_receiver_config.rtp_max_delay_ms = |
384 video_sender_config.max_playout_delay.InMilliseconds(); | 384 video_sender_config.max_playout_delay.InMilliseconds(); |
385 | 385 |
386 // Loopback transport. | 386 // Loopback transport. |
387 LoopBackTransport receiver_to_sender(receiver_env); | 387 LoopBackTransport receiver_to_sender(receiver_env); |
388 LoopBackTransport sender_to_receiver(sender_env); | 388 LoopBackTransport sender_to_receiver(sender_env); |
389 | 389 |
390 struct PacketProxy { | |
391 PacketProxy() : receiver(NULL) {} | |
392 void ReceivePacket(scoped_ptr<Packet> packet) { | |
393 if (receiver) receiver->ReceivePacket(packet.Pass()); | |
miu
2014/12/04 04:18:55
style nit: Need newline before start of then-claus
hubbe
2014/12/05 23:57:20
Done.
| |
394 } | |
395 CastReceiver* receiver; | |
396 }; | |
397 | |
398 PacketProxy packet_proxy; | |
399 | |
390 // Cast receiver. | 400 // Cast receiver. |
401 scoped_ptr<CastTransportSender> transport_receiver( | |
402 new CastTransportSenderImpl( | |
403 NULL, | |
404 &testing_clock, | |
405 net::IPEndPoint(), | |
406 net::IPEndPoint(), | |
407 make_scoped_ptr(new base::DictionaryValue), | |
408 base::Bind(&UpdateCastTransportStatus), | |
409 base::Bind(&LogTransportEvents, receiver_env), | |
410 base::TimeDelta::FromSeconds(1), | |
411 task_runner, | |
412 base::Bind(&PacketProxy::ReceivePacket, | |
413 base::Unretained(&packet_proxy)), | |
414 &receiver_to_sender)); | |
391 scoped_ptr<CastReceiver> cast_receiver( | 415 scoped_ptr<CastReceiver> cast_receiver( |
392 CastReceiver::Create(receiver_env, | 416 CastReceiver::Create(receiver_env, |
393 audio_receiver_config, | 417 audio_receiver_config, |
394 video_receiver_config, | 418 video_receiver_config, |
395 &receiver_to_sender)); | 419 transport_receiver.get())); |
420 | |
421 packet_proxy.receiver = cast_receiver.get(); | |
396 | 422 |
397 // Cast sender and transport sender. | 423 // Cast sender and transport sender. |
398 scoped_ptr<CastTransportSender> transport_sender( | 424 scoped_ptr<CastTransportSender> transport_sender( |
399 new CastTransportSenderImpl( | 425 new CastTransportSenderImpl( |
400 NULL, | 426 NULL, |
401 &testing_clock, | 427 &testing_clock, |
402 net::IPEndPoint(), | 428 net::IPEndPoint(), |
429 net::IPEndPoint(), | |
403 make_scoped_ptr(new base::DictionaryValue), | 430 make_scoped_ptr(new base::DictionaryValue), |
404 base::Bind(&UpdateCastTransportStatus), | 431 base::Bind(&UpdateCastTransportStatus), |
405 base::Bind(&LogTransportEvents, sender_env), | 432 base::Bind(&LogTransportEvents, sender_env), |
406 base::TimeDelta::FromSeconds(1), | 433 base::TimeDelta::FromSeconds(1), |
407 task_runner, | 434 task_runner, |
435 PacketReceiverCallback(), | |
408 &sender_to_receiver)); | 436 &sender_to_receiver)); |
409 scoped_ptr<CastSender> cast_sender( | 437 scoped_ptr<CastSender> cast_sender( |
410 CastSender::Create(sender_env, transport_sender.get())); | 438 CastSender::Create(sender_env, transport_sender.get())); |
411 | 439 |
412 // Initialize network simulation model. | 440 // Initialize network simulation model. |
413 const bool use_network_simulation = | 441 const bool use_network_simulation = |
414 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS; | 442 model.type() == media::cast::proto::INTERRUPTED_POISSON_PROCESS; |
415 scoped_ptr<test::InterruptedPoissonProcess> ipp; | 443 scoped_ptr<test::InterruptedPoissonProcess> ipp; |
416 if (use_network_simulation) { | 444 if (use_network_simulation) { |
417 LOG(INFO) << "Running Poisson based network simulation."; | 445 LOG(INFO) << "Running Poisson based network simulation."; |
418 const IPPModel& ipp_model = model.ipp(); | 446 const IPPModel& ipp_model = model.ipp(); |
419 std::vector<double> average_rates(ipp_model.average_rate_size()); | 447 std::vector<double> average_rates(ipp_model.average_rate_size()); |
420 std::copy(ipp_model.average_rate().begin(), | 448 std::copy(ipp_model.average_rate().begin(), |
421 ipp_model.average_rate().end(), | 449 ipp_model.average_rate().end(), |
422 average_rates.begin()); | 450 average_rates.begin()); |
423 ipp.reset(new test::InterruptedPoissonProcess( | 451 ipp.reset(new test::InterruptedPoissonProcess( |
424 average_rates, | 452 average_rates, |
425 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); | 453 ipp_model.coef_burstiness(), ipp_model.coef_variance(), 0)); |
426 receiver_to_sender.Initialize( | 454 receiver_to_sender.Initialize( |
427 ipp->NewBuffer(128 * 1024).Pass(), | 455 ipp->NewBuffer(128 * 1024).Pass(), |
428 transport_sender->PacketReceiverForTesting(), | 456 transport_sender->PacketReceiverForTesting(), |
429 task_runner, &testing_clock); | 457 task_runner, &testing_clock); |
430 sender_to_receiver.Initialize( | 458 sender_to_receiver.Initialize( |
431 ipp->NewBuffer(128 * 1024).Pass(), | 459 ipp->NewBuffer(128 * 1024).Pass(), |
432 cast_receiver->packet_receiver(), task_runner, | 460 transport_receiver->PacketReceiverForTesting(), task_runner, |
433 &testing_clock); | 461 &testing_clock); |
434 } else { | 462 } else { |
435 LOG(INFO) << "No network simulation."; | 463 LOG(INFO) << "No network simulation."; |
436 receiver_to_sender.Initialize( | 464 receiver_to_sender.Initialize( |
437 scoped_ptr<test::PacketPipe>(), | 465 scoped_ptr<test::PacketPipe>(), |
438 transport_sender->PacketReceiverForTesting(), | 466 transport_sender->PacketReceiverForTesting(), |
439 task_runner, &testing_clock); | 467 task_runner, &testing_clock); |
440 sender_to_receiver.Initialize( | 468 sender_to_receiver.Initialize( |
441 scoped_ptr<test::PacketPipe>(), | 469 scoped_ptr<test::PacketPipe>(), |
442 cast_receiver->packet_receiver(), task_runner, | 470 transport_receiver->PacketReceiverForTesting(), task_runner, |
443 &testing_clock); | 471 &testing_clock); |
444 } | 472 } |
445 | 473 |
446 // Initialize a fake media source and a tracker to encoded video frames. | 474 // Initialize a fake media source and a tracker to encoded video frames. |
447 const bool quality_test = !metrics_output_path.empty(); | 475 const bool quality_test = !metrics_output_path.empty(); |
448 FakeMediaSource media_source(task_runner, | 476 FakeMediaSource media_source(task_runner, |
449 &testing_clock, | 477 &testing_clock, |
450 video_sender_config, | 478 video_sender_config, |
451 quality_test); | 479 quality_test); |
452 scoped_ptr<EncodedVideoFrameTracker> video_frame_tracker; | 480 scoped_ptr<EncodedVideoFrameTracker> video_frame_tracker; |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
736 values.SetString("sim-id", sim_id); | 764 values.SetString("sim-id", sim_id); |
737 | 765 |
738 std::string extra_data; | 766 std::string extra_data; |
739 base::JSONWriter::Write(&values, &extra_data); | 767 base::JSONWriter::Write(&values, &extra_data); |
740 | 768 |
741 // Run. | 769 // Run. |
742 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path, | 770 media::cast::RunSimulation(source_path, log_output_path, metrics_output_path, |
743 yuv_output_path, extra_data, model); | 771 yuv_output_path, extra_data, model); |
744 return 0; | 772 return 0; |
745 } | 773 } |
OLD | NEW |