From fed8a7b81f53f5534ce532ef88bcf6570f3269e7 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 28 Mar 2019 12:02:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=92=AD=E6=94=BE=E5=99=A8?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtmp/RtmpPlayer.cpp | 39 ++++++++++++++++++++++++++++++++++----- src/Rtmp/RtmpPlayer.h | 33 ++------------------------------- src/Rtsp/RtspPlayer.cpp | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/Rtmp/RtmpPlayer.cpp b/src/Rtmp/RtmpPlayer.cpp index ad2bf468..4d4c60af 100644 --- a/src/Rtmp/RtmpPlayer.cpp +++ b/src/Rtmp/RtmpPlayer.cpp @@ -106,14 +106,45 @@ void RtmpPlayer::play(const string &strUrl) { return false; } strongSelf->onPlayResult_l(SockException(Err_timeout,"play rtmp timeout")); - strongSelf->teardown(); return false; },getPoller())); startConnect(strHost, iPort , playTimeOutSec); } void RtmpPlayer::onErr(const SockException &ex){ - onShutdown_l(ex); + onPlayResult_l(ex); +} + +void RtmpPlayer::onPlayResult_l(const SockException &ex) { + WarnL << ex.getErrCode() << " " << ex.what(); + if (_pPlayTimer) { + _pPlayTimer.reset(); + onPlayResult(ex); + if(!ex){ + _mediaTicker.resetTime(); + weak_ptr weakSelf = dynamic_pointer_cast(shared_from_this()); + int timeoutMS = (*this)[kMediaTimeoutMS].as(); + _pMediaTimer.reset( new Timer(timeoutMS / 2000.0, [weakSelf,timeoutMS]() { + auto strongSelf=weakSelf.lock(); + if(!strongSelf) { + return false; + } + if(strongSelf->_mediaTicker.elapsedTime()> timeoutMS) { + //recv media timeout! + strongSelf->onPlayResult_l(SockException(Err_timeout,"recv rtmp timeout")); + return false; + } + return true; + },getPoller())); + } + }else if(ex){ + //播放成功后异常断开回调 + onShutdown(ex); + } + + if(ex){ + teardown(); + } } void RtmpPlayer::onConnect(const SockException &err){ if(err.getErrCode()!=Err_success) { @@ -135,8 +166,6 @@ void RtmpPlayer::onRecv(const Buffer::Ptr &pBuf){ } catch (exception &e) { SockException ex(Err_other, e.what()); onPlayResult_l(ex); - onShutdown_l(ex); - teardown(); } } @@ -288,7 +317,7 @@ void RtmpPlayer::onCmd_onMetaData(AMFDecoder &dec) { void RtmpPlayer::onStreamDry(uint32_t ui32StreamId) { //TraceL << ui32StreamId; - onShutdown_l(SockException(Err_other,"rtmp stream dry")); + onPlayResult_l(SockException(Err_other,"rtmp stream dry")); } diff --git a/src/Rtmp/RtmpPlayer.h b/src/Rtmp/RtmpPlayer.h index 244dedf6..75d43b63 100644 --- a/src/Rtmp/RtmpPlayer.h +++ b/src/Rtmp/RtmpPlayer.h @@ -60,41 +60,12 @@ protected: uint32_t getProgressMilliSecond() const; void seekToMilliSecond(uint32_t ms); protected: - void onShutdown_l(const SockException &ex) { - WarnL << ex.getErrCode() << " " << ex.what(); - _pPlayTimer.reset(); - _pMediaTimer.reset(); - _pBeatTimer.reset(); - onShutdown(ex); - } void onMediaData_l(const RtmpPacket::Ptr &chunkData) { _mediaTicker.resetTime(); onMediaData(chunkData); } - void onPlayResult_l(const SockException &ex) { - WarnL << ex.getErrCode() << " " << ex.what(); - _pPlayTimer.reset(); - _pMediaTimer.reset(); - if (!ex) { - _mediaTicker.resetTime(); - weak_ptr weakSelf = dynamic_pointer_cast(shared_from_this()); - int timeoutMS = (*this)[kMediaTimeoutMS].as(); - _pMediaTimer.reset( new Timer(timeoutMS / 2000.0, [weakSelf,timeoutMS]() { - auto strongSelf=weakSelf.lock(); - if(!strongSelf) { - return false; - } - if(strongSelf->_mediaTicker.elapsedTime()> timeoutMS) { - //recv media timeout! - strongSelf->onShutdown_l(SockException(Err_timeout,"recv rtmp timeout")); - strongSelf->teardown(); - return false; - } - return true; - },getPoller())); - } - onPlayResult(ex); - } + + void onPlayResult_l(const SockException &ex); //for Tcpclient void onRecv(const Buffer::Ptr &pBuf) override; diff --git a/src/Rtsp/RtspPlayer.cpp b/src/Rtsp/RtspPlayer.cpp index 3399bff1..9286cb3a 100644 --- a/src/Rtsp/RtspPlayer.cpp +++ b/src/Rtsp/RtspPlayer.cpp @@ -600,7 +600,7 @@ void RtspPlayer::onPlayResult_l(const SockException &ex) { return true; },getPoller())); } - } else { + } else if(ex){ //播放成功后异常断开回调 onShutdown(ex); }