vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Jul 23 17:06:01 2015 +0200| [d63b800e35262312737d33e96202785bd57638fa] | committer: Francois Cartegnie
demux: hls: move probing to manager > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d63b800e35262312737d33e96202785bd57638fa --- modules/demux/hls/HLSManager.cpp | 56 ++++++++++++++++++++++++++++++++++++ modules/demux/hls/HLSManager.hpp | 2 ++ modules/demux/hls/hls.cpp | 58 +------------------------------------- 3 files changed, 59 insertions(+), 57 deletions(-) diff --git a/modules/demux/hls/HLSManager.cpp b/modules/demux/hls/HLSManager.cpp index 507a73b..21b432a 100644 --- a/modules/demux/hls/HLSManager.cpp +++ b/modules/demux/hls/HLSManager.cpp @@ -46,6 +46,62 @@ HLSManager::~HLSManager() { } +bool HLSManager::isHTTPLiveStreaming(stream_t *s) +{ + const uint8_t *peek; + + int size = stream_Peek(s, &peek, 7); + if (size < 7 || memcmp(peek, "#EXTM3U", 7)) + return false; + + size = stream_Peek(s, &peek, 512); + if (size < 7) + return false; + + peek += 7; + size -= 7; + + /* Parse stream and search for + * EXT-X-TARGETDURATION or EXT-X-STREAM-INF tag, see + * http://tools.ietf.org/html/draft-pantos-http-live-streaming-04#page-8 */ + while (size--) + { + static const char *const ext[] = { + "TARGETDURATION", + "MEDIA-SEQUENCE", + "KEY", + "ALLOW-CACHE", + "ENDLIST", + "STREAM-INF", + "DISCONTINUITY", + "VERSION" + }; + + if (*peek++ != '#') + continue; + + if (size < 6) + continue; + + if (memcmp(peek, "EXT-X-", 6)) + continue; + + peek += 6; + size -= 6; + + for (size_t i = 0; i < ARRAY_SIZE(ext); i++) + { + size_t len = strlen(ext[i]); + if (size < 0 || (size_t)size < len) + continue; + if (!memcmp(peek, ext[i], len)) + return true; + } + } + + return false; +} + AbstractAdaptationLogic *HLSManager::createLogic(AbstractAdaptationLogic::LogicType type) { switch(type) diff --git a/modules/demux/hls/HLSManager.hpp b/modules/demux/hls/HLSManager.hpp index 917abc6..de8dfea 100644 --- a/modules/demux/hls/HLSManager.hpp +++ b/modules/demux/hls/HLSManager.hpp @@ -37,6 +37,8 @@ namespace hls virtual ~HLSManager(); virtual AbstractAdaptationLogic *createLogic(AbstractAdaptationLogic::LogicType); virtual bool updatePlaylist(); + + static bool isHTTPLiveStreaming(stream_t *); }; } diff --git a/modules/demux/hls/hls.cpp b/modules/demux/hls/hls.cpp index d134f01..f8d3899 100644 --- a/modules/demux/hls/hls.cpp +++ b/modules/demux/hls/hls.cpp @@ -94,67 +94,11 @@ vlc_module_end () /***************************************************************************** * Open: *****************************************************************************/ -static bool isHTTPLiveStreaming(stream_t *s) -{ - const uint8_t *peek; - - int size = stream_Peek(s, &peek, 7); - if (size < 7 || memcmp(peek, "#EXTM3U", 7)) - return false; - - size = stream_Peek(s, &peek, 512); - if (size < 7) - return false; - - peek += 7; - size -= 7; - - /* Parse stream and search for - * EXT-X-TARGETDURATION or EXT-X-STREAM-INF tag, see - * http://tools.ietf.org/html/draft-pantos-http-live-streaming-04#page-8 */ - while (size--) - { - static const char *const ext[] = { - "TARGETDURATION", - "MEDIA-SEQUENCE", - "KEY", - "ALLOW-CACHE", - "ENDLIST", - "STREAM-INF", - "DISCONTINUITY", - "VERSION" - }; - - if (*peek++ != '#') - continue; - - if (size < 6) - continue; - - if (memcmp(peek, "EXT-X-", 6)) - continue; - - peek += 6; - size -= 6; - - for (size_t i = 0; i < ARRAY_SIZE(ext); i++) - { - size_t len = strlen(ext[i]); - if (size < 0 || (size_t)size < len) - continue; - if (!memcmp(peek, ext[i], len)) - return true; - } - } - - return false; -} - static int Open(vlc_object_t *p_obj) { demux_t *p_demux = (demux_t*) p_obj; - if(!isHTTPLiveStreaming(p_demux->s)) + if(!HLSManager::isHTTPLiveStreaming(p_demux->s)) return VLC_EGENERIC; Parser parser(p_demux->s); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
