diff options
author | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-05 14:16:45 +0000 |
---|---|---|
committer | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-05 14:16:45 +0000 |
commit | ac55ceb444f18dd372352a56d5d14e3e817e9a62 (patch) | |
tree | bf88d356907867a7e945f98d4955712021ad3db4 /media/cast/test/sender.cc | |
parent | 19d9dc0a2a53357f17e835f1461fa0ccfda19728 (diff) | |
download | chromium_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.cc | 20 |
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 = |