优化播放器相关代码

This commit is contained in:
xiongziliang 2019-03-28 12:02:59 +08:00
parent 6045b1b8f8
commit fed8a7b81f
3 changed files with 37 additions and 37 deletions

View File

@ -106,14 +106,45 @@ void RtmpPlayer::play(const string &strUrl) {
return false; return false;
} }
strongSelf->onPlayResult_l(SockException(Err_timeout,"play rtmp timeout")); strongSelf->onPlayResult_l(SockException(Err_timeout,"play rtmp timeout"));
strongSelf->teardown();
return false; return false;
},getPoller())); },getPoller()));
startConnect(strHost, iPort , playTimeOutSec); startConnect(strHost, iPort , playTimeOutSec);
} }
void RtmpPlayer::onErr(const SockException &ex){ 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<RtmpPlayer> weakSelf = dynamic_pointer_cast<RtmpPlayer>(shared_from_this());
int timeoutMS = (*this)[kMediaTimeoutMS].as<int>();
_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){ void RtmpPlayer::onConnect(const SockException &err){
if(err.getErrCode()!=Err_success) { if(err.getErrCode()!=Err_success) {
@ -135,8 +166,6 @@ void RtmpPlayer::onRecv(const Buffer::Ptr &pBuf){
} catch (exception &e) { } catch (exception &e) {
SockException ex(Err_other, e.what()); SockException ex(Err_other, e.what());
onPlayResult_l(ex); onPlayResult_l(ex);
onShutdown_l(ex);
teardown();
} }
} }
@ -288,7 +317,7 @@ void RtmpPlayer::onCmd_onMetaData(AMFDecoder &dec) {
void RtmpPlayer::onStreamDry(uint32_t ui32StreamId) { void RtmpPlayer::onStreamDry(uint32_t ui32StreamId) {
//TraceL << ui32StreamId; //TraceL << ui32StreamId;
onShutdown_l(SockException(Err_other,"rtmp stream dry")); onPlayResult_l(SockException(Err_other,"rtmp stream dry"));
} }

View File

@ -60,41 +60,12 @@ protected:
uint32_t getProgressMilliSecond() const; uint32_t getProgressMilliSecond() const;
void seekToMilliSecond(uint32_t ms); void seekToMilliSecond(uint32_t ms);
protected: 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) { void onMediaData_l(const RtmpPacket::Ptr &chunkData) {
_mediaTicker.resetTime(); _mediaTicker.resetTime();
onMediaData(chunkData); onMediaData(chunkData);
} }
void onPlayResult_l(const SockException &ex) {
WarnL << ex.getErrCode() << " " << ex.what(); void onPlayResult_l(const SockException &ex);
_pPlayTimer.reset();
_pMediaTimer.reset();
if (!ex) {
_mediaTicker.resetTime();
weak_ptr<RtmpPlayer> weakSelf = dynamic_pointer_cast<RtmpPlayer>(shared_from_this());
int timeoutMS = (*this)[kMediaTimeoutMS].as<int>();
_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);
}
//for Tcpclient //for Tcpclient
void onRecv(const Buffer::Ptr &pBuf) override; void onRecv(const Buffer::Ptr &pBuf) override;

View File

@ -600,7 +600,7 @@ void RtspPlayer::onPlayResult_l(const SockException &ex) {
return true; return true;
},getPoller())); },getPoller()));
} }
} else { } else if(ex){
//播放成功后异常断开回调 //播放成功后异常断开回调
onShutdown(ex); onShutdown(ex);
} }