[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