[rtmpdump] r38 - rtmp.cpp rtmp.h
hyc
subversion at mplayerhq.hu
Tue Nov 10 03:37:25 CET 2009
Author: hyc
Date: Tue Nov 10 03:37:24 2009
New Revision: 38
Log:
Experimental retry: use pause/unpause when buffer is empty
Modified:
rtmp.cpp
rtmp.h
Modified: rtmp.cpp
==============================================================================
--- rtmp.cpp Tue Nov 10 03:36:55 2009 (r37)
+++ rtmp.cpp Tue Nov 10 03:37:24 2009 (r38)
@@ -103,6 +103,7 @@ CRTMP::CRTMP() : m_socket(0)
m_fAudioCodecs = 3191.0;
m_fVideoCodecs = 252.0;
m_bTimedout = false;
+ m_bPausing = 0;
}
CRTMP::~CRTMP()
@@ -250,6 +251,7 @@ bool CRTMP::Connect() {
Close();
m_bTimedout = false;
+ m_bPausing = 0;
m_fDuration = 0.0;
sockaddr_in service;
@@ -460,6 +462,8 @@ int CRTMP::HandlePacket(RTMPPacket &pack
//Log(LOGDEBUG, "%s, received: audio %lu bytes", __FUNCTION__, packet.m_nBodySize);
HandleAudio(packet);
bHasMediaPacket = 1;
+ if (!m_mediaChannel)
+ m_mediaChannel = packet.m_nChannel;
break;
case 0x09:
@@ -467,6 +471,8 @@ int CRTMP::HandlePacket(RTMPPacket &pack
//Log(LOGDEBUG, "%s, received: video %lu bytes", __FUNCTION__, packet.m_nBodySize);
HandleVideo(packet);
bHasMediaPacket = 1;
+ if (!m_mediaChannel)
+ m_mediaChannel = packet.m_nChannel;
break;
case 0x0F: // flex stream send
@@ -823,7 +829,7 @@ bool CRTMP::SendPause(bool DoPause, doub
*enc = 0x05; // NULL
enc++;
enc += EncodeBoolean(enc, DoPause);
- enc += EncodeNumber(enc, (double)dTime/1000);
+ enc += EncodeNumber(enc, (double)dTime);
packet.m_nBodySize = enc - packet.m_body;
@@ -1303,11 +1309,14 @@ void CRTMP::HandleCtrl(const RTMPPacket
case 0:
tmp = ReadInt32(packet.m_body + 2);
Log(LOGDEBUG, "%s, Stream Begin %d", __FUNCTION__, tmp);
+ m_bPausing = 0;
break;
case 1:
tmp = ReadInt32(packet.m_body + 2);
Log(LOGDEBUG, "%s, Stream EOF %d", __FUNCTION__, tmp);
+ if (m_bPausing == 1)
+ m_bPausing = 2;
break;
case 2:
@@ -1329,6 +1338,13 @@ void CRTMP::HandleCtrl(const RTMPPacket
case 31:
tmp = ReadInt32(packet.m_body + 2);
Log(LOGDEBUG, "%s, Stream BufferEmpty %d", __FUNCTION__, tmp);
+ if (!m_bPausing) {
+ SendPause(true, m_channelTimestamp[m_mediaChannel]);
+ m_bPausing = 1;
+ } else if (m_bPausing == 2) {
+ SendPause(false, m_channelTimestamp[m_mediaChannel]);
+ m_bPausing = 3;
+ }
break;
case 32:
Modified: rtmp.h
==============================================================================
--- rtmp.h Tue Nov 10 03:36:55 2009 (r37)
+++ rtmp.h Tue Nov 10 03:37:24 2009 (r38)
@@ -216,7 +216,9 @@ class CRTMP
bool m_bPlaying;
int m_nBufferMS;
int m_stream_id; // returned in _result from invoking createStream
+ int m_mediaChannel;
bool m_bTimedout;
+ int m_bPausing;
int m_nClientBW;
uint8_t m_nClientBW2;
int m_nServerBW;
More information about the rtmpdump
mailing list