summaryrefslogtreecommitdiffstats
path: root/media/cast/test/sender.cc
diff options
context:
space:
mode:
authorhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-05 14:16:45 +0000
committerhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-05 14:16:45 +0000
commitac55ceb444f18dd372352a56d5d14e3e817e9a62 (patch)
treebf88d356907867a7e945f98d4955712021ad3db4 /media/cast/test/sender.cc
parent19d9dc0a2a53357f17e835f1461fa0ccfda19728 (diff)
downloadchromium_src-ac55ceb444f18dd372352a56d5d14e3e817e9a62.zip
chromium_src-ac55ceb444f18dd372352a56d5d14e3e817e9a62.tar.gz
chromium_src-ac55ceb444f18dd372352a56d5d14e3e817e9a62.tar.bz2
Cast: Fix two video freezing problems
1) The first one only happens when running UDP over localhost: The connect() call call fails and the sender stops listening to incoming packets. I fixed this by re-starting the packet listening if needed after each successfully sent packet. 2) The second problem is that the packet storage times out packets based on time, with the assumption that no packet should have to be re-sent if it's older than the max history time. However, if packets are not ACKed in a timely fashion, the video_sender may need to re-send arbitrarily old packets. To fix this, I change the packet storage to remember "max outanding frames" regardless of timing. BUG=366911 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=268142 Review URL: https://codereview.chromium.org/252923007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268176 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/cast/test/sender.cc')
-rw-r--r--media/cast/test/sender.cc20
1 files changed, 6 insertions, 14 deletions
diff --git a/media/cast/test/sender.cc b/media/cast/test/sender.cc
index 4a30ea9..50074b0 100644
--- a/media/cast/test/sender.cc
+++ b/media/cast/test/sender.cc
@@ -100,7 +100,7 @@ AudioSenderConfig GetAudioSenderConfig() {
audio_config.channels = kAudioChannels;
audio_config.bitrate = 64000;
audio_config.codec = transport::kOpus;
- audio_config.sender_ssrc = 1;
+ audio_config.rtp_config.ssrc = 1;
audio_config.incoming_feedback_ssrc = 2;
audio_config.rtp_config.payload_type = 127;
audio_config.rtp_config.max_delay_ms = 300;
@@ -133,7 +133,7 @@ VideoSenderConfig GetVideoSenderConfig() {
video_config.max_qp = 40;
// SSRCs and payload type. Don't change them.
- video_config.sender_ssrc = 11;
+ video_config.rtp_config.ssrc = 11;
video_config.incoming_feedback_ssrc = 12;
video_config.rtp_config.payload_type = 96;
video_config.rtp_config.max_delay_ms = 300;
@@ -575,9 +575,7 @@ class SendProcess {
frames_read,
&avframe->data[0],
// Note: Not all files have correct values for pkt_pts.
- base::TimeDelta::FromMilliseconds(avframe->pkt_pts),
- // TODO(hclam): Give accurate duration based on samples.
- base::TimeDelta());
+ base::TimeDelta::FromMilliseconds(avframe->pkt_pts));
audio_algo_.EnqueueBuffer(buffer);
} while (packet_temp.size > 0);
avcodec_free_frame(&avframe);
@@ -746,7 +744,9 @@ class SendProcess {
namespace {
void UpdateCastTransportStatus(
- media::cast::transport::CastTransportStatus status) {}
+ media::cast::transport::CastTransportStatus status) {
+ VLOG(21) << "Transport status: " << status;
+}
void LogRawEvents(
const scoped_refptr<media::cast::CastEnvironment>& cast_environment,
@@ -906,14 +906,8 @@ int main(int argc, char** argv) {
// Running transport on the main thread.
// Setting up transport config.
- media::cast::transport::CastTransportAudioConfig transport_audio_config;
- media::cast::transport::CastTransportVideoConfig transport_video_config;
net::IPEndPoint remote_endpoint =
CreateUDPAddress(remote_ip_address, remote_port);
- transport_audio_config.base.ssrc = audio_config.sender_ssrc;
- transport_audio_config.base.rtp_config = audio_config.rtp_config;
- transport_video_config.base.ssrc = video_config.sender_ssrc;
- transport_video_config.base.rtp_config = video_config.rtp_config;
// Enable raw event and stats logging.
// Running transport on the main thread.
@@ -940,8 +934,6 @@ int main(int argc, char** argv) {
base::Bind(&LogRawEvents, cast_environment),
base::TimeDelta::FromSeconds(1),
io_message_loop.message_loop_proxy());
- transport_sender->InitializeAudio(transport_audio_config);
- transport_sender->InitializeVideo(transport_video_config);
// CastSender initialization.
scoped_ptr<media::cast::CastSender> cast_sender =