优化推流器代码

This commit is contained in:
xiongziliang 2019-03-28 09:43:47 +08:00
parent f6b963f0f2
commit d208f69730
4 changed files with 23 additions and 29 deletions

View File

@ -63,6 +63,20 @@ void RtmpPusher::teardown() {
} }
} }
void RtmpPusher::onPublishResult(const SockException &ex) {
_pPublishTimer.reset();
if(_onPublished){
_onPublished(ex);
_onPublished = nullptr;
}else if(_onShutdown){
_onShutdown(ex);
}
if(ex){
teardown();
}
}
void RtmpPusher::publish(const string &strUrl) { void RtmpPusher::publish(const string &strUrl) {
teardown(); teardown();
string strHost = FindField(strUrl.data(), "://", "/"); string strHost = FindField(strUrl.data(), "://", "/");
@ -93,7 +107,6 @@ void RtmpPusher::publish(const string &strUrl) {
return false; return false;
} }
strongSelf->onPublishResult(SockException(Err_timeout,"publish rtmp timeout")); strongSelf->onPublishResult(SockException(Err_timeout,"publish rtmp timeout"));
strongSelf->teardown();
return false; return false;
},getPoller())); },getPoller()));
@ -105,7 +118,7 @@ void RtmpPusher::publish(const string &strUrl) {
} }
void RtmpPusher::onErr(const SockException &ex){ void RtmpPusher::onErr(const SockException &ex){
onShutdown(ex); onPublishResult(ex);
} }
void RtmpPusher::onConnect(const SockException &err){ void RtmpPusher::onConnect(const SockException &err){
if(err) { if(err) {
@ -129,8 +142,6 @@ void RtmpPusher::onRecv(const Buffer::Ptr &pBuf){
} catch (exception &e) { } catch (exception &e) {
SockException ex(Err_other, e.what()); SockException ex(Err_other, e.what());
onPublishResult(ex); onPublishResult(ex);
onShutdown(ex);
teardown();
} }
} }
@ -207,8 +218,7 @@ inline void RtmpPusher::send_metaData(){
_pRtmpReader->setDetachCB([weakSelf](){ _pRtmpReader->setDetachCB([weakSelf](){
auto strongSelf = weakSelf.lock(); auto strongSelf = weakSelf.lock();
if(strongSelf){ if(strongSelf){
strongSelf->onShutdown(SockException(Err_other,"媒体源被释放")); strongSelf->onPublishResult(SockException(Err_other,"媒体源被释放"));
strongSelf->teardown();
} }
}); });
onPublishResult(SockException(Err_success,"success")); onPublishResult(SockException(Err_success,"success"));

View File

@ -63,19 +63,7 @@ protected:
send(buffer); send(buffer);
} }
private: private:
void onShutdown(const SockException &ex) { void onPublishResult(const SockException &ex);
_pPublishTimer.reset();
if(_onShutdown){
_onShutdown(ex);
}
_pRtmpReader.reset();
}
void onPublishResult(const SockException &ex) {
_pPublishTimer.reset();
if(_onPublished){
_onPublished(ex);
}
}
template<typename FUN> template<typename FUN>
inline void addOnResultCB(const FUN &fun) { inline void addOnResultCB(const FUN &fun) {

View File

@ -62,17 +62,15 @@ void RtspPusher::publish(const string &strUrl) {
publish(url,user,pwd,eType); publish(url,user,pwd,eType);
} }
void RtspPusher::onShutdown(const SockException &ex) {
if(_onShutdown){
_onShutdown(ex);
}
teardown();
}
void RtspPusher::onPublishResult(const SockException &ex) { void RtspPusher::onPublishResult(const SockException &ex) {
_pPublishTimer.reset(); _pPublishTimer.reset();
if(_onPublished){ if(_onPublished){
_onPublished(ex); _onPublished(ex);
_onPublished = nullptr;
}else if(_onShutdown){
_onShutdown(ex);
} }
if(ex){ if(ex){
teardown(); teardown();
} }
@ -128,7 +126,7 @@ void RtspPusher::publish(const string & strUrl, const string &strUser, const str
} }
void RtspPusher::onErr(const SockException &ex) { void RtspPusher::onErr(const SockException &ex) {
onShutdown(ex); onPublishResult(ex);
} }
void RtspPusher::onConnect(const SockException &err) { void RtspPusher::onConnect(const SockException &err) {
@ -145,7 +143,6 @@ void RtspPusher::onRecv(const Buffer::Ptr &pBuf){
} catch (exception &e) { } catch (exception &e) {
SockException ex(Err_other, e.what()); SockException ex(Err_other, e.what());
onPublishResult(ex); onPublishResult(ex);
onShutdown(ex);
} }
} }
@ -366,7 +363,7 @@ void RtspPusher::sendRecord() {
_pRtspReader->setDetachCB([weakSelf](){ _pRtspReader->setDetachCB([weakSelf](){
auto strongSelf = weakSelf.lock(); auto strongSelf = weakSelf.lock();
if(strongSelf){ if(strongSelf){
strongSelf->onShutdown(SockException(Err_other,"媒体源被释放")); strongSelf->onPublishResult(SockException(Err_other,"媒体源被释放"));
} }
}); });
if(_eType != Rtsp::RTP_TCP){ if(_eType != Rtsp::RTP_TCP){

View File

@ -50,7 +50,6 @@ protected:
void onRtpPacket(const char *data,uint64_t len) override {}; void onRtpPacket(const char *data,uint64_t len) override {};
private: private:
void publish(const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType ); void publish(const string &strUrl, const string &strUser, const string &strPwd, Rtsp::eRtpType eType );
void onShutdown(const SockException &ex);
void onPublishResult(const SockException &ex); void onPublishResult(const SockException &ex);
void sendAnnounce(); void sendAnnounce();