diff --git a/src/Http/HlsPlayer.cpp b/src/Http/HlsPlayer.cpp index 9bc4dae9..e20607f4 100644 --- a/src/Http/HlsPlayer.cpp +++ b/src/Http/HlsPlayer.cpp @@ -16,7 +16,6 @@ using namespace toolkit; namespace mediakit { HlsPlayer::HlsPlayer(const EventPoller::Ptr &poller) { - _segment.setOnSegment([this](const char *data, size_t len) { onPacket(data, len); }); setPoller(poller ? poller : EventPollerPool::Instance().getPoller()); } @@ -68,7 +67,7 @@ void HlsPlayer::fetchSegment() { } weak_ptr weak_self = dynamic_pointer_cast(shared_from_this()); if (!_http_ts_player) { - _http_ts_player = std::make_shared(getPoller(), false); + _http_ts_player = std::make_shared(getPoller()); _http_ts_player->setOnCreateSocket([weak_self](const EventPoller::Ptr &poller) { auto strong_self = weak_self.lock(); if (strong_self) { @@ -84,7 +83,7 @@ void HlsPlayer::fetchSegment() { return; } //收到ts包 - strong_self->onPacket_l(data, len); + strong_self->onPacket(data, len); }); } @@ -238,16 +237,6 @@ void HlsPlayer::playDelay() { }, getPoller())); } -void HlsPlayer::onPacket_l(const char *data, size_t len) { - try { - _segment.input(data, len); - } catch (...) { - //ts解析失败,清空缓存数据 - _segment.reset(); - throw; - } -} - ////////////////////////////////////////////////////////////////////////// void HlsDemuxer::start(const EventPoller::Ptr &poller, TrackListener *listener) { diff --git a/src/Http/HlsPlayer.h b/src/Http/HlsPlayer.h index 11f66060..a520137f 100644 --- a/src/Http/HlsPlayer.h +++ b/src/Http/HlsPlayer.h @@ -85,7 +85,6 @@ private: void fetchSegment(); void teardown_l(const toolkit::SockException &ex); void fetchIndexFile(); - void onPacket_l(const char *data, size_t len); private: struct UrlComp { @@ -106,7 +105,6 @@ private: std::list _ts_url_sort; std::set _ts_url_cache; HttpTSPlayer::Ptr _http_ts_player; - TSSegment _segment; }; class HlsPlayerImp : public PlayerImp, private TrackListener { diff --git a/src/Http/HttpTSPlayer.cpp b/src/Http/HttpTSPlayer.cpp index dbd82cbb..60b9bf77 100644 --- a/src/Http/HttpTSPlayer.cpp +++ b/src/Http/HttpTSPlayer.cpp @@ -15,9 +15,7 @@ using namespace toolkit; namespace mediakit { -HttpTSPlayer::HttpTSPlayer(const EventPoller::Ptr &poller, bool split_ts) { - _split_ts = split_ts; - _segment.setOnSegment([this](const char *data, size_t len) { onPacket(data, len); }); +HttpTSPlayer::HttpTSPlayer(const EventPoller::Ptr &poller) { setPoller(poller ? poller : EventPollerPool::Instance().getPoller()); } @@ -34,17 +32,8 @@ void HttpTSPlayer::onResponseHeader(const string &status, const HttpClient::Http } void HttpTSPlayer::onResponseBody(const char *buf, size_t size) { - if (_split_ts) { - try { - _segment.input(buf, size); - } catch (std::exception &ex) { - WarnL << ex.what(); - // ts解析失败,清空缓存数据 - _segment.reset(); - throw; - } - } else { - onPacket(buf, size); + if (_on_segment) { + _on_segment(buf, size); } } @@ -59,12 +48,6 @@ void HttpTSPlayer::emitOnComplete(const SockException &ex) { } } -void HttpTSPlayer::onPacket(const char *data, size_t len) { - if (_on_segment) { - _on_segment(data, len); - } -} - void HttpTSPlayer::setOnComplete(onComplete cb) { _on_complete = std::move(cb); } diff --git a/src/Http/HttpTSPlayer.h b/src/Http/HttpTSPlayer.h index 462270b8..d9dfd135 100644 --- a/src/Http/HttpTSPlayer.h +++ b/src/Http/HttpTSPlayer.h @@ -23,7 +23,7 @@ public: using Ptr = std::shared_ptr; using onComplete = std::function; - HttpTSPlayer(const toolkit::EventPoller::Ptr &poller = nullptr, bool split_ts = true); + HttpTSPlayer(const toolkit::EventPoller::Ptr &poller = nullptr); ~HttpTSPlayer() override = default; /** @@ -42,18 +42,10 @@ protected: void onResponseBody(const char *buf, size_t size) override; void onResponseCompleted(const toolkit::SockException &ex) override; -protected: - /** - * 收到ts数据 - */ - virtual void onPacket(const char *data, size_t len); - private: void emitOnComplete(const toolkit::SockException &ex); private: - bool _split_ts; - TSSegment _segment; onComplete _on_complete; TSSegment::onSegment _on_segment; }; diff --git a/src/Http/TsPlayer.cpp b/src/Http/TsPlayer.cpp index 7dbbef69..eefb6e53 100644 --- a/src/Http/TsPlayer.cpp +++ b/src/Http/TsPlayer.cpp @@ -15,7 +15,7 @@ using namespace toolkit; namespace mediakit { -TsPlayer::TsPlayer(const EventPoller::Ptr &poller) : HttpTSPlayer(poller, true) {} +TsPlayer::TsPlayer(const EventPoller::Ptr &poller) : HttpTSPlayer(poller) {} void TsPlayer::play(const string &url) { TraceL << "play http-ts: " << url; diff --git a/src/Http/TsPlayerImp.h b/src/Http/TsPlayerImp.h index 98c65ee4..5dc32ed2 100644 --- a/src/Http/TsPlayerImp.h +++ b/src/Http/TsPlayerImp.h @@ -24,8 +24,8 @@ public: ~TsPlayerImp() override = default; private: - //// HlsPlayer override//// - void onPacket(const char *data, size_t len) override; + //// TsPlayer override//// + void onResponseBody(const char *buf, size_t size) override; private: //// PlayerBase override//// diff --git a/src/Http/TsplayerImp.cpp b/src/Http/TsplayerImp.cpp index 1ef6ef49..c41abb97 100644 --- a/src/Http/TsplayerImp.cpp +++ b/src/Http/TsplayerImp.cpp @@ -18,7 +18,8 @@ namespace mediakit { TsPlayerImp::TsPlayerImp(const EventPoller::Ptr &poller) : PlayerImp(poller) {} -void TsPlayerImp::onPacket(const char *data, size_t len) { +void TsPlayerImp::onResponseBody(const char *data, size_t len) { + TsPlayer::onResponseBody(data, len); if (!_decoder && _demuxer) { _decoder = DecoderImp::createDecoder(DecoderImp::decoder_ts, _demuxer.get()); }