diff --git a/src/Http/HlsPlayer.cpp b/src/Http/HlsPlayer.cpp index a38e28fe..9bc4dae9 100644 --- a/src/Http/HlsPlayer.cpp +++ b/src/Http/HlsPlayer.cpp @@ -76,15 +76,17 @@ void HlsPlayer::fetchSegment() { } return Socket::createSocket(poller, true); }); - - _http_ts_player->setOnPacket([weak_self](const char *data, size_t len) { - auto strong_self = weak_self.lock(); - if (!strong_self) { - return; - } - //收到ts包 - strong_self->onPacket_l(data, len); - }); + auto benchmark_mode = (*this)[Client::kBenchmarkMode].as(); + if (!benchmark_mode) { + _http_ts_player->setOnPacket([weak_self](const char *data, size_t len) { + auto strong_self = weak_self.lock(); + if (!strong_self) { + return; + } + //收到ts包 + strong_self->onPacket_l(data, len); + }); + } if (!(*this)[Client::kNetAdapter].empty()) { _http_ts_player->setNetAdapter((*this)[Client::kNetAdapter]); @@ -349,7 +351,8 @@ void HlsPlayerImp::addTrackCompleted() { } void HlsPlayerImp::onPlayResult(const SockException &ex) { - if (ex) { + auto benchmark_mode = (*this)[Client::kBenchmarkMode].as(); + if (ex || benchmark_mode) { PlayerImp::onPlayResult(ex); } else { auto demuxer = std::make_shared(); @@ -364,6 +367,9 @@ void HlsPlayerImp::onShutdown(const SockException &ex) { } vector HlsPlayerImp::getTracks(bool ready) const { + if (!_demuxer) { + return vector(); + } return static_pointer_cast(_demuxer)->getTracks(ready); } diff --git a/src/Http/TsPlayer.cpp b/src/Http/TsPlayer.cpp index 21b81da4..7dbbef69 100644 --- a/src/Http/TsPlayer.cpp +++ b/src/Http/TsPlayer.cpp @@ -20,6 +20,7 @@ TsPlayer::TsPlayer(const EventPoller::Ptr &poller) : HttpTSPlayer(poller, true) void TsPlayer::play(const string &url) { TraceL << "play http-ts: " << url; _play_result = false; + _benchmark_mode = (*this)[Client::kBenchmarkMode].as(); setHeaderTimeout((*this)[Client::kTimeoutMS].as()); setBodyTimeout((*this)[Client::kMediaTimeoutMS].as()); setMethod("GET"); @@ -45,7 +46,9 @@ void TsPlayer::onResponseBody(const char *buf, size_t size) { _play_result = true; onPlayResult(SockException(Err_success, "play http-ts success")); } - HttpTSPlayer::onResponseBody(buf, size); + if (!_benchmark_mode) { + HttpTSPlayer::onResponseBody(buf, size); + } } } // namespace mediakit \ No newline at end of file diff --git a/src/Http/TsPlayer.h b/src/Http/TsPlayer.h index 4b0656f8..dfe69996 100644 --- a/src/Http/TsPlayer.h +++ b/src/Http/TsPlayer.h @@ -16,7 +16,7 @@ namespace mediakit { -class TsPlayer : public HttpTSPlayer , public PlayerBase { +class TsPlayer : public HttpTSPlayer, public PlayerBase { public: TsPlayer(const toolkit::EventPoller::Ptr &poller); ~TsPlayer() override = default; @@ -37,6 +37,7 @@ protected: private: bool _play_result = true; + bool _benchmark_mode = false; }; } // namespace mediakit diff --git a/src/Http/TsplayerImp.cpp b/src/Http/TsplayerImp.cpp index b12584bb..1ef6ef49 100644 --- a/src/Http/TsplayerImp.cpp +++ b/src/Http/TsplayerImp.cpp @@ -33,7 +33,8 @@ void TsPlayerImp::addTrackCompleted() { } void TsPlayerImp::onPlayResult(const SockException &ex) { - if (ex) { + auto benchmark_mode = (*this)[Client::kBenchmarkMode].as(); + if (ex || benchmark_mode) { PlayerImp::onPlayResult(ex); } else { auto demuxer = std::make_shared(); @@ -47,7 +48,10 @@ void TsPlayerImp::onShutdown(const SockException &ex) { _demuxer = nullptr; } -vector TsPlayerImp::getTracks(bool ready) const { +vector TsPlayerImp::getTracks(bool ready) const { + if (!_demuxer) { + return vector(); + } return static_pointer_cast(_demuxer)->getTracks(ready); }