vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Apr 18 13:39:24 2019 +0200| [ae68beaea58ef384223dcdcc9452f5292ccce464] | committer: Francois Cartegnie
demux: adaptive: create shared resources > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ae68beaea58ef384223dcdcc9452f5292ccce464 --- modules/demux/Makefile.am | 2 + modules/demux/adaptive/PlaylistManager.cpp | 13 +++--- modules/demux/adaptive/PlaylistManager.h | 6 +-- modules/demux/adaptive/SegmentTracker.cpp | 10 +++-- modules/demux/adaptive/SegmentTracker.hpp | 5 ++- modules/demux/adaptive/SharedResources.cpp | 44 +++++++++++++++++++++ modules/demux/adaptive/SharedResources.hpp | 46 ++++++++++++++++++++++ modules/demux/adaptive/adaptive.cpp | 38 ++++++++++-------- .../demux/adaptive/playlist/BaseRepresentation.cpp | 3 +- .../demux/adaptive/playlist/BaseRepresentation.h | 5 ++- modules/demux/dash/DASHManager.cpp | 8 ++-- modules/demux/dash/DASHManager.h | 2 +- modules/demux/hls/HLSManager.cpp | 4 +- modules/demux/hls/HLSManager.hpp | 2 +- modules/demux/hls/playlist/M3U8.cpp | 10 +---- modules/demux/hls/playlist/M3U8.hpp | 8 ++-- modules/demux/hls/playlist/Parser.cpp | 13 +++--- modules/demux/hls/playlist/Parser.hpp | 11 ++---- modules/demux/hls/playlist/Representation.cpp | 8 ++-- modules/demux/hls/playlist/Representation.hpp | 3 +- modules/demux/smooth/SmoothManager.cpp | 8 ++-- modules/demux/smooth/SmoothManager.hpp | 2 +- 22 files changed, 177 insertions(+), 74 deletions(-) diff --git a/modules/demux/Makefile.am b/modules/demux/Makefile.am index a3e1bd6fee..891c6171b9 100644 --- a/modules/demux/Makefile.am +++ b/modules/demux/Makefile.am @@ -371,6 +371,8 @@ libadaptive_plugin_la_SOURCES = \ demux/adaptive/PlaylistManager.h \ demux/adaptive/SegmentTracker.cpp \ demux/adaptive/SegmentTracker.hpp \ + demux/adaptive/SharedResources.cpp \ + demux/adaptive/SharedResources.hpp \ demux/adaptive/StreamFormat.cpp \ demux/adaptive/StreamFormat.hpp \ demux/adaptive/Streams.cpp \ diff --git a/modules/demux/adaptive/PlaylistManager.cpp b/modules/demux/adaptive/PlaylistManager.cpp index da234d052a..b8cc7f23f1 100644 --- a/modules/demux/adaptive/PlaylistManager.cpp +++ b/modules/demux/adaptive/PlaylistManager.cpp @@ -25,12 +25,12 @@ #include "PlaylistManager.h" #include "SegmentTracker.hpp" +#include "SharedResources.hpp" #include "playlist/AbstractPlaylist.hpp" #include "playlist/BasePeriod.h" #include "playlist/BaseAdaptationSet.h" #include "playlist/BaseRepresentation.h" #include "http/HTTPConnectionManager.h" -#include "http/AuthStorage.hpp" #include "logic/AlwaysBestAdaptationLogic.h" #include "logic/RateBasedAdaptationLogic.h" #include "logic/AlwaysLowestAdaptationLogic.hpp" @@ -49,7 +49,7 @@ using namespace adaptive::logic; using namespace adaptive; PlaylistManager::PlaylistManager( demux_t *p_demux_, - AuthStorage *auth, + SharedResources *res, AbstractPlaylist *pl, AbstractStreamFactory *factory, AbstractAdaptationLogic::LogicType type ) : @@ -61,7 +61,7 @@ PlaylistManager::PlaylistManager( demux_t *p_demux_, p_demux ( p_demux_ ) { currentPeriod = playlist->getFirstPeriod(); - authStorage = auth; + resources = res; failedupdates = 0; b_thread = false; b_buffering = false; @@ -86,7 +86,7 @@ PlaylistManager::~PlaylistManager () delete playlist; delete conManager; delete logic; - delete authStorage; + delete resources; vlc_cond_destroy(&waitcond); vlc_mutex_destroy(&lock); vlc_mutex_destroy(&demux.lock); @@ -117,7 +117,7 @@ bool PlaylistManager::setupPeriod() BaseAdaptationSet *set = *it; if(set && streamFactory) { - SegmentTracker *tracker = new (std::nothrow) SegmentTracker(logic, set); + SegmentTracker *tracker = new SegmentTracker(resources, logic, set); if(!tracker) continue; @@ -156,7 +156,8 @@ bool PlaylistManager::start() { if(!conManager && !(conManager = - new (std::nothrow) HTTPConnectionManager(VLC_OBJECT(p_demux->s), authStorage)) + new (std::nothrow) HTTPConnectionManager(VLC_OBJECT(p_demux->s), + resources->getAuthStorage())) ) return false; diff --git a/modules/demux/adaptive/PlaylistManager.h b/modules/demux/adaptive/PlaylistManager.h index 56b1ad5d1f..e0e3c899ed 100644 --- a/modules/demux/adaptive/PlaylistManager.h +++ b/modules/demux/adaptive/PlaylistManager.h @@ -37,18 +37,16 @@ namespace adaptive namespace http { class AbstractConnectionManager; - class AuthStorage; } using namespace playlist; using namespace logic; - using namespace http; class PlaylistManager { public: PlaylistManager( demux_t *, - AuthStorage *, + SharedResources *, AbstractPlaylist *, AbstractStreamFactory *, AbstractAdaptationLogic::LogicType type ); @@ -94,7 +92,7 @@ namespace adaptive virtual AbstractAdaptationLogic *createLogic(AbstractAdaptationLogic::LogicType, AbstractConnectionManager *); - AuthStorage *authStorage; + SharedResources *resources; AbstractConnectionManager *conManager; AbstractAdaptationLogic::LogicType logicType; AbstractAdaptationLogic *logic; diff --git a/modules/demux/adaptive/SegmentTracker.cpp b/modules/demux/adaptive/SegmentTracker.cpp index 2d4fcf332f..8a08d39b82 100644 --- a/modules/demux/adaptive/SegmentTracker.cpp +++ b/modules/demux/adaptive/SegmentTracker.cpp @@ -76,8 +76,10 @@ SegmentTrackerEvent::SegmentTrackerEvent(const ID &id, vlc_tick_t duration) u.segment.id = &id; } -SegmentTracker::SegmentTracker(AbstractAdaptationLogic *logic_, BaseAdaptationSet *adaptSet) +SegmentTracker::SegmentTracker(SharedResources *res, + AbstractAdaptationLogic *logic_, BaseAdaptationSet *adaptSet) { + resources = res; first = true; curNumber = next = 0; initializing = true; @@ -109,7 +111,7 @@ StreamFormat SegmentTracker::getCurrentFormat() const { /* Ensure ephemere content is updated/loaded */ if(rep->needsUpdate()) - (void) rep->runLocalUpdates(0, curNumber, false); + (void) rep->runLocalUpdates(resources, 0, curNumber, false); return rep->getStreamFormat(); } return StreamFormat(); @@ -176,7 +178,7 @@ SegmentChunk * SegmentTracker::getNextChunk(bool switch_allowed, bool b_updated = false; /* Ensure ephemere content is updated/loaded */ if(rep->needsUpdate()) - b_updated = rep->runLocalUpdates(getPlaybackTime(), curNumber, false); + b_updated = rep->runLocalUpdates(resources, getPlaybackTime(), curNumber, false); if(prevRep && !rep->consistentSegmentNumber()) { @@ -351,7 +353,7 @@ void SegmentTracker::updateSelected() { if(curRepresentation && curRepresentation->needsUpdate()) { - curRepresentation->runLocalUpdates(getPlaybackTime(), curNumber, true); + curRepresentation->runLocalUpdates(resources, getPlaybackTime(), curNumber, true); curRepresentation->scheduleNextUpdate(curNumber); } } diff --git a/modules/demux/adaptive/SegmentTracker.hpp b/modules/demux/adaptive/SegmentTracker.hpp index cb95227d64..03dafa2e53 100644 --- a/modules/demux/adaptive/SegmentTracker.hpp +++ b/modules/demux/adaptive/SegmentTracker.hpp @@ -28,6 +28,7 @@ namespace adaptive { class ID; + class SharedResources; namespace http { @@ -112,7 +113,8 @@ namespace adaptive class SegmentTracker { public: - SegmentTracker(AbstractAdaptationLogic *, BaseAdaptationSet *); + SegmentTracker(SharedResources *, + AbstractAdaptationLogic *, BaseAdaptationSet *); ~SegmentTracker(); StreamFormat getCurrentFormat() const; @@ -138,6 +140,7 @@ namespace adaptive uint64_t next; uint64_t curNumber; StreamFormat format; + SharedResources *resources; AbstractAdaptationLogic *logic; BaseAdaptationSet *adaptationSet; BaseRepresentation *curRepresentation; diff --git a/modules/demux/adaptive/SharedResources.cpp b/modules/demux/adaptive/SharedResources.cpp new file mode 100644 index 0000000000..65016a6843 --- /dev/null +++ b/modules/demux/adaptive/SharedResources.cpp @@ -0,0 +1,44 @@ +/* + * SharedResources.cpp + ***************************************************************************** + * Copyright © 2019 VideoLabs, VideoLAN and VLC Authors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "SharedResources.hpp" +#include "http/AuthStorage.hpp" + +#include <vlc_common.h> + +using namespace adaptive; + +SharedResources::SharedResources(vlc_object_t *obj) +{ + authStorage = new AuthStorage(obj); +} + +SharedResources::~SharedResources() +{ + delete authStorage; +} + +AuthStorage * SharedResources::getAuthStorage() +{ + return authStorage; +} diff --git a/modules/demux/adaptive/SharedResources.hpp b/modules/demux/adaptive/SharedResources.hpp new file mode 100644 index 0000000000..b2fb9316cf --- /dev/null +++ b/modules/demux/adaptive/SharedResources.hpp @@ -0,0 +1,46 @@ +/* + * SharedResources.h + ***************************************************************************** + * Copyright © 2019 VideoLabs, VideoLAN and VLC Authors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ +#ifndef SHAREDRESOURCES_H_ +#define SHAREDRESOURCES_H_ + +#include <vlc_common.h> + +namespace adaptive +{ + namespace http + { + class AuthStorage; + } + + using namespace http; + + class SharedResources + { + public: + SharedResources(vlc_object_t *); + ~SharedResources(); + AuthStorage *getAuthStorage(); + + private: + AuthStorage *authStorage; + }; +} + +#endif diff --git a/modules/demux/adaptive/adaptive.cpp b/modules/demux/adaptive/adaptive.cpp index 0c40d55b28..0812e33113 100644 --- a/modules/demux/adaptive/adaptive.cpp +++ b/modules/demux/adaptive/adaptive.cpp @@ -32,7 +32,7 @@ #include <vlc_plugin.h> #include <vlc_demux.h> -#include "http/AuthStorage.hpp" +#include "SharedResources.hpp" #include "playlist/BasePeriod.h" #include "xml/DOMParser.h" @@ -128,9 +128,11 @@ vlc_module_end () /***************************************************************************** * Local prototypes *****************************************************************************/ -static PlaylistManager * HandleDash(demux_t *, AuthStorage *auth, DOMParser &, +static PlaylistManager * HandleDash(demux_t *, + SharedResources *, DOMParser &, const std::string &, AbstractAdaptationLogic::LogicType); -static PlaylistManager * HandleSmooth(demux_t *, AuthStorage *auth, DOMParser &, +static PlaylistManager * HandleSmooth(demux_t *, + SharedResources *, DOMParser &, const std::string &, AbstractAdaptationLogic::LogicType); /***************************************************************************** @@ -153,7 +155,7 @@ static int Open(vlc_object_t *p_obj) } PlaylistManager *p_manager = NULL; - AuthStorage *authStorage = new AuthStorage(p_obj); + SharedResources *resources = new SharedResources(p_obj); char *psz_logic = var_InheritString(p_obj, "adaptive-logic"); AbstractAdaptationLogic::LogicType logic = AbstractAdaptationLogic::Default; @@ -177,16 +179,16 @@ static int Open(vlc_object_t *p_obj) if(!dashmime && !smoothmime && HLSManager::isHTTPLiveStreaming(p_demux->s)) { - M3U8Parser parser(authStorage); + M3U8Parser parser(resources); M3U8 *p_playlist = parser.parse(VLC_OBJECT(p_demux),p_demux->s, playlisturl); if(!p_playlist) { msg_Err( p_demux, "Could not parse playlist" ); - delete authStorage; + delete resources; return VLC_EGENERIC; } - p_manager = new (std::nothrow) HLSManager(p_demux, authStorage, p_playlist, + p_manager = new (std::nothrow) HLSManager(p_demux, resources, p_playlist, new (std::nothrow) HLSStreamFactory, logic); } else @@ -195,11 +197,13 @@ static int Open(vlc_object_t *p_obj) DOMParser xmlParser; /* Share that xml reader */ if(dashmime) { - p_manager = HandleDash(p_demux, authStorage, xmlParser, playlisturl, logic); + p_manager = HandleDash(p_demux, resources, + xmlParser, playlisturl, logic); } else if(smoothmime) { - p_manager = HandleSmooth(p_demux, authStorage, xmlParser, playlisturl, logic); + p_manager = HandleSmooth(p_demux, resources, + xmlParser, playlisturl, logic); } else { @@ -215,11 +219,13 @@ static int Open(vlc_object_t *p_obj) { if(DASHManager::isDASH(xmlParser.getRootNode())) { - p_manager = HandleDash(p_demux, authStorage, xmlParser, playlisturl, logic); + p_manager = HandleDash(p_demux, resources, + xmlParser, playlisturl, logic); } else if(SmoothManager::isSmoothStreaming(xmlParser.getRootNode())) { - p_manager = HandleSmooth(p_demux, authStorage, xmlParser, playlisturl, logic); + p_manager = HandleSmooth(p_demux, resources, + xmlParser, playlisturl, logic); } } vlc_stream_Delete(peekstream); @@ -230,7 +236,7 @@ static int Open(vlc_object_t *p_obj) if(!p_manager) { - delete authStorage; + delete resources; return VLC_EGENERIC; } else if(!p_manager->start()) @@ -264,7 +270,7 @@ static void Close(vlc_object_t *p_obj) * *****************************************************************************/ static PlaylistManager * HandleDash(demux_t *p_demux, - AuthStorage *auth, DOMParser &xmlParser, + SharedResources *res, DOMParser &xmlParser, const std::string & playlisturl, AbstractAdaptationLogic::LogicType logic) { @@ -282,13 +288,13 @@ static PlaylistManager * HandleDash(demux_t *p_demux, return NULL; } - return new (std::nothrow) DASHManager( p_demux, auth, p_playlist, + return new (std::nothrow) DASHManager( p_demux, res, p_playlist, new (std::nothrow) DASHStreamFactory, logic ); } static PlaylistManager * HandleSmooth(demux_t *p_demux, - AuthStorage *auth, DOMParser &xmlParser, + SharedResources *res, DOMParser &xmlParser, const std::string & playlisturl, AbstractAdaptationLogic::LogicType logic) { @@ -306,7 +312,7 @@ static PlaylistManager * HandleSmooth(demux_t *p_demux, return NULL; } - return new (std::nothrow) SmoothManager( p_demux, auth, p_playlist, + return new (std::nothrow) SmoothManager( p_demux, res, p_playlist, new (std::nothrow) SmoothStreamFactory, logic ); } diff --git a/modules/demux/adaptive/playlist/BaseRepresentation.cpp b/modules/demux/adaptive/playlist/BaseRepresentation.cpp index d51923e001..c632ea7f77 100644 --- a/modules/demux/adaptive/playlist/BaseRepresentation.cpp +++ b/modules/demux/adaptive/playlist/BaseRepresentation.cpp @@ -83,7 +83,8 @@ bool BaseRepresentation::needsUpdate() const return false; } -bool BaseRepresentation::runLocalUpdates(vlc_tick_t, uint64_t, bool) +bool BaseRepresentation::runLocalUpdates(SharedResources *, + vlc_tick_t, uint64_t, bool) { return false; } diff --git a/modules/demux/adaptive/playlist/BaseRepresentation.h b/modules/demux/adaptive/playlist/BaseRepresentation.h index cbbd8bd831..7d61a91472 100644 --- a/modules/demux/adaptive/playlist/BaseRepresentation.h +++ b/modules/demux/adaptive/playlist/BaseRepresentation.h @@ -34,6 +34,8 @@ namespace adaptive { + class SharedResources; + namespace playlist { class BaseAdaptationSet; @@ -64,7 +66,8 @@ namespace adaptive virtual vlc_tick_t getMinAheadTime (uint64_t) const; virtual bool needsUpdate () const; - virtual bool runLocalUpdates (vlc_tick_t, uint64_t, bool); + virtual bool runLocalUpdates (SharedResources *, + vlc_tick_t, uint64_t, bool); virtual void scheduleNextUpdate (uint64_t); virtual void debug (vlc_object_t *,int = 0) const; diff --git a/modules/demux/dash/DASHManager.cpp b/modules/demux/dash/DASHManager.cpp index 3dcf786af8..dad8ae9c28 100644 --- a/modules/demux/dash/DASHManager.cpp +++ b/modules/demux/dash/DASHManager.cpp @@ -34,6 +34,7 @@ #include "mpd/IsoffMainParser.h" #include "xml/DOMParser.h" #include "xml/Node.h" +#include "../adaptive/SharedResources.hpp" #include "../adaptive/tools/Helper.h" #include "../adaptive/http/HTTPConnectionManager.h" #include <vlc_stream.h> @@ -50,11 +51,11 @@ using namespace dash::mpd; using namespace adaptive::logic; DASHManager::DASHManager(demux_t *demux_, - AuthStorage *auth, + SharedResources *res, MPD *mpd, AbstractStreamFactory *factory, AbstractAdaptationLogic::LogicType type) : - PlaylistManager(demux_, auth, mpd, factory, type) + PlaylistManager(demux_, res, mpd, factory, type) { } @@ -102,7 +103,8 @@ bool DASHManager::updatePlaylist() { std::string url(p_demux->psz_url); - block_t *p_block = Retrieve::HTTP(VLC_OBJECT(p_demux), authStorage, url); + block_t *p_block = Retrieve::HTTP(VLC_OBJECT(p_demux), + resources->getAuthStorage(), url); if(!p_block) return false; diff --git a/modules/demux/dash/DASHManager.h b/modules/demux/dash/DASHManager.h index 992f2fae0e..50e31329d9 100644 --- a/modules/demux/dash/DASHManager.h +++ b/modules/demux/dash/DASHManager.h @@ -45,7 +45,7 @@ namespace dash { public: DASHManager( demux_t *, - AuthStorage *, + SharedResources *, mpd::MPD *mpd, AbstractStreamFactory *, logic::AbstractAdaptationLogic::LogicType type); diff --git a/modules/demux/hls/HLSManager.cpp b/modules/demux/hls/HLSManager.cpp index 16deeae5cb..b6be5ca059 100644 --- a/modules/demux/hls/HLSManager.cpp +++ b/modules/demux/hls/HLSManager.cpp @@ -36,11 +36,11 @@ using namespace hls; using namespace hls::playlist; HLSManager::HLSManager(demux_t *demux_, - AuthStorage *auth, + SharedResources *res, M3U8 *playlist, AbstractStreamFactory *factory, AbstractAdaptationLogic::LogicType type) : - PlaylistManager(demux_, auth, playlist, factory, type) + PlaylistManager(demux_, res, playlist, factory, type) { } diff --git a/modules/demux/hls/HLSManager.hpp b/modules/demux/hls/HLSManager.hpp index eacfece84c..0ec9be7c35 100644 --- a/modules/demux/hls/HLSManager.hpp +++ b/modules/demux/hls/HLSManager.hpp @@ -32,7 +32,7 @@ namespace hls { public: HLSManager( demux_t *, - AuthStorage *, + SharedResources *, playlist::M3U8 *, AbstractStreamFactory *, logic::AbstractAdaptationLogic::LogicType type ); diff --git a/modules/demux/hls/playlist/M3U8.cpp b/modules/demux/hls/playlist/M3U8.cpp index 622783bfee..db61ba2495 100644 --- a/modules/demux/hls/playlist/M3U8.cpp +++ b/modules/demux/hls/playlist/M3U8.cpp @@ -33,10 +33,9 @@ using namespace hls::playlist; -M3U8::M3U8 (vlc_object_t *p_object, AuthStorage *auth_) : +M3U8::M3U8 (vlc_object_t *p_object) : AbstractPlaylist(p_object) { - auth = auth_; minUpdatePeriod.Set( VLC_TICK_FROM_SEC(5) ); vlc_mutex_init(&keystore_lock); } @@ -46,7 +45,7 @@ M3U8::~M3U8() vlc_mutex_destroy(&keystore_lock); } -std::vector<uint8_t> M3U8::getEncryptionKey(const std::string &uri) +std::vector<uint8_t> M3U8::getEncryptionKey(AuthStorage *auth, const std::string &uri) { std::vector<uint8_t> key; @@ -105,11 +104,6 @@ bool M3U8::isLive() const return b_live; } -AuthStorage * M3U8::getAuth() -{ - return auth; -} - void M3U8::debug() { std::vector<BasePeriod *>::const_iterator i; diff --git a/modules/demux/hls/playlist/M3U8.hpp b/modules/demux/hls/playlist/M3U8.hpp index 5fdcc4a70c..f019044fbc 100644 --- a/modules/demux/hls/playlist/M3U8.hpp +++ b/modules/demux/hls/playlist/M3U8.hpp @@ -38,20 +38,20 @@ namespace hls namespace playlist { using namespace adaptive::playlist; + using namespace adaptive::http; class M3U8 : public AbstractPlaylist { public: - M3U8(vlc_object_t *, adaptive::http::AuthStorage * /* ugly data ref, tobefixed */ ); + M3U8(vlc_object_t *); virtual ~M3U8(); - std::vector<uint8_t> getEncryptionKey(const std::string &); + std::vector<uint8_t> getEncryptionKey(AuthStorage *auth, + const std::string &); virtual bool isLive() const; virtual void debug(); - adaptive::http::AuthStorage * getAuth(); /* ugly data ref, tobefixed */ private: - adaptive::http::AuthStorage *auth; /* ugly data ref, tobefixed */ std::string data; vlc_mutex_t keystore_lock; std::map<std::string, std::vector<uint8_t> > keystore; diff --git a/modules/demux/hls/playlist/Parser.cpp b/modules/demux/hls/playlist/Parser.cpp index d722a0792c..a5c62220a0 100644 --- a/modules/demux/hls/playlist/Parser.cpp +++ b/modules/demux/hls/playlist/Parser.cpp @@ -24,6 +24,7 @@ #include "Parser.hpp" #include "HLSSegment.hpp" #include "Representation.hpp" +#include "../adaptive/SharedResources.hpp" #include "../adaptive/playlist/BasePeriod.h" #include "../adaptive/playlist/BaseAdaptationSet.h" #include "../adaptive/playlist/SegmentList.h" @@ -45,9 +46,9 @@ using namespace adaptive; using namespace adaptive::playlist; using namespace hls::playlist; -M3U8Parser::M3U8Parser( AuthStorage *auth_ ) +M3U8Parser::M3U8Parser(SharedResources *res) { - auth = auth_; + resources = res; } M3U8Parser::~M3U8Parser () @@ -171,7 +172,8 @@ void M3U8Parser::createAndFillRepresentation(vlc_object_t *p_obj, BaseAdaptation bool M3U8Parser::appendSegmentsFromPlaylistURI(vlc_object_t *p_obj, Representation *rep) { - block_t *p_block = Retrieve::HTTP(p_obj, auth, rep->getPlaylistUrl().toString()); + block_t *p_block = Retrieve::HTTP(p_obj, resources->getAuthStorage(), + rep->getPlaylistUrl().toString()); if(p_block) { stream_t *substream = vlc_stream_MemoryNew(p_obj, p_block->p_buffer, p_block->i_buffer, true); @@ -323,7 +325,8 @@ void M3U8Parser::parseSegments(vlc_object_t *, Representation *rep, const std::l M3U8 *m3u8 = dynamic_cast<M3U8 *>(rep->getPlaylist()); if(likely(m3u8)) - encryption.key = m3u8->getEncryptionKey(keyurl.toString()); + encryption.key = m3u8->getEncryptionKey(resources->getAuthStorage(), + keyurl.toString()); if(keytag->getAttributeByName("IV")) { encryption.iv.clear(); @@ -395,7 +398,7 @@ M3U8 * M3U8Parser::parse(vlc_object_t *p_object, stream_t *p_stream, const std:: } free(psz_line); - M3U8 *playlist = new (std::nothrow) M3U8(p_object, auth); + M3U8 *playlist = new (std::nothrow) M3U8(p_object); if(!playlist) return NULL; diff --git a/modules/demux/hls/playlist/Parser.hpp b/modules/demux/hls/playlist/Parser.hpp index e46ae15b30..8582184969 100644 --- a/modules/demux/hls/playlist/Parser.hpp +++ b/modules/demux/hls/playlist/Parser.hpp @@ -29,6 +29,8 @@ namespace adaptive { + class SharedResources; + namespace playlist { class SegmentInformation; @@ -36,11 +38,6 @@ namespace adaptive class BasePeriod; class BaseAdaptationSet; } - - namespace http - { - class AuthStorage; - } } namespace hls @@ -57,7 +54,7 @@ namespace hls class M3U8Parser { public: - M3U8Parser (AuthStorage *auth); + M3U8Parser (adaptive::SharedResources *); virtual ~M3U8Parser (); M3U8 * parse (vlc_object_t *p_obj, stream_t *p_stream, const std::string &); @@ -70,7 +67,7 @@ namespace hls void parseSegments(vlc_object_t *, Representation *, const std::list<Tag *>&); void setFormatFromExtension(Representation *rep, const std::string &); std::list<Tag *> parseEntries(stream_t *); - AuthStorage *auth; + adaptive::SharedResources *resources; }; } } diff --git a/modules/demux/hls/playlist/Representation.cpp b/modules/demux/hls/playlist/Representation.cpp index 10ada80508..8257bfdf56 100644 --- a/modules/demux/hls/playlist/Representation.cpp +++ b/modules/demux/hls/playlist/Representation.cpp @@ -136,16 +136,14 @@ bool Representation::needsUpdate() const return !b_loaded || (isLive() && nextUpdateTime < time(NULL)); } -bool Representation::runLocalUpdates(vlc_tick_t, uint64_t number, bool prune) +bool Representation::runLocalUpdates(SharedResources *res, + vlc_tick_t, uint64_t number, bool prune) { const time_t now = time(NULL); AbstractPlaylist *playlist = getPlaylist(); if(!b_loaded || (isLive() && nextUpdateTime < now)) { - /* ugly hack */ - M3U8 *m3u = dynamic_cast<M3U8 *>(playlist); - M3U8Parser parser((m3u) ? m3u->getAuth() : NULL); - /* !ugly hack */ + M3U8Parser parser(res); parser.appendSegmentsFromPlaylistURI(playlist->getVLCObject(), this); b_loaded = true; diff --git a/modules/demux/hls/playlist/Representation.hpp b/modules/demux/hls/playlist/Representation.hpp index ed2da0da8e..7f59cf9bf8 100644 --- a/modules/demux/hls/playlist/Representation.hpp +++ b/modules/demux/hls/playlist/Representation.hpp @@ -50,7 +50,8 @@ namespace hls virtual void scheduleNextUpdate(uint64_t); /* reimpl */ virtual bool needsUpdate() const; /* reimpl */ virtual void debug(vlc_object_t *, int) const; /* reimpl */ - virtual bool runLocalUpdates(vlc_tick_t, uint64_t, bool); /* reimpl */ + virtual bool runLocalUpdates(SharedResources *, + vlc_tick_t, uint64_t, bool); /* reimpl */ virtual uint64_t translateSegmentNumber(uint64_t, const SegmentInformation *) const; /* reimpl */ private: diff --git a/modules/demux/smooth/SmoothManager.cpp b/modules/demux/smooth/SmoothManager.cpp index abb13d493d..ebd71ee448 100644 --- a/modules/demux/smooth/SmoothManager.cpp +++ b/modules/demux/smooth/SmoothManager.cpp @@ -26,6 +26,7 @@ #include "SmoothManager.hpp" +#include "../adaptive/SharedResources.hpp" #include "../adaptive/tools/Retrieve.hpp" #include "playlist/Parser.hpp" #include "../adaptive/xml/DOMParser.h" @@ -40,11 +41,11 @@ using namespace smooth; using namespace smooth::playlist; SmoothManager::SmoothManager(demux_t *demux_, - AuthStorage *auth, + SharedResources *res, Manifest *playlist, AbstractStreamFactory *factory, AbstractAdaptationLogic::LogicType type) : - PlaylistManager(demux_, auth, playlist, factory, type) + PlaylistManager(demux_, res, playlist, factory, type) { } @@ -56,7 +57,8 @@ Manifest * SmoothManager::fetchManifest() { std::string playlisturl(p_demux->psz_url); - block_t *p_block = Retrieve::HTTP(VLC_OBJECT(p_demux), authStorage, playlisturl); + block_t *p_block = Retrieve::HTTP(VLC_OBJECT(p_demux), + resources->getAuthStorage(), playlisturl); if(!p_block) return NULL; diff --git a/modules/demux/smooth/SmoothManager.hpp b/modules/demux/smooth/SmoothManager.hpp index 02fa49feb4..1e32603948 100644 --- a/modules/demux/smooth/SmoothManager.hpp +++ b/modules/demux/smooth/SmoothManager.hpp @@ -39,7 +39,7 @@ namespace smooth class SmoothManager : public PlaylistManager { public: - SmoothManager( demux_t *, AuthStorage *, playlist::Manifest *, + SmoothManager( demux_t *, SharedResources *, playlist::Manifest *, AbstractStreamFactory *, logic::AbstractAdaptationLogic::LogicType type ); virtual ~SmoothManager(); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
