Author: hyc Date: Tue Nov 10 11:10:41 2009 New Revision: 39 Log: Discard old frames when doing pause/resume Modified: rtmp.cpp rtmp.h Modified: rtmp.cpp ============================================================================== --- rtmp.cpp Tue Nov 10 03:37:24 2009 (r38) +++ rtmp.cpp Tue Nov 10 11:10:41 2009 (r39) @@ -420,6 +420,13 @@ int CRTMP::GetNextMediaPacket(RTMPPacket if (!bHasMediaPacket) { packet.FreePacket(); } + if (m_bPausing == 3) { + if (packet.m_nTimeStamp <= m_pauseStamp) { + bHasMediaPacket = false; + continue; + } + m_bPausing = 0; + } } if (bHasMediaPacket) @@ -1309,7 +1316,6 @@ 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: @@ -1339,10 +1345,11 @@ void CRTMP::HandleCtrl(const RTMPPacket tmp = ReadInt32(packet.m_body + 2); Log(LOGDEBUG, "%s, Stream BufferEmpty %d", __FUNCTION__, tmp); if (!m_bPausing) { - SendPause(true, m_channelTimestamp[m_mediaChannel]); + m_pauseStamp = m_channelTimestamp[m_mediaChannel]; + SendPause(true, m_pauseStamp); m_bPausing = 1; } else if (m_bPausing == 2) { - SendPause(false, m_channelTimestamp[m_mediaChannel]); + SendPause(false, m_pauseStamp); m_bPausing = 3; } break; Modified: rtmp.h ============================================================================== --- rtmp.h Tue Nov 10 03:37:24 2009 (r38) +++ rtmp.h Tue Nov 10 11:10:41 2009 (r39) @@ -217,6 +217,7 @@ class CRTMP int m_nBufferMS; int m_stream_id; // returned in _result from invoking createStream int m_mediaChannel; + uint32_t m_pauseStamp; bool m_bTimedout; int m_bPausing; int m_nClientBW;
participants (1)
-
hyc