vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Aug 28 14:12:48 2019 +0200| [7ff304b2a1c701403e18c17852808aeed4c10905] | committer: Francois Cartegnie
adaptive: probing: packed audio starts with ID3 regression by a047b31b978e4a3bd86b3c1a8f7dec9281d1a056 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7ff304b2a1c701403e18c17852808aeed4c10905 --- modules/demux/Makefile.am | 8 +++++--- modules/demux/adaptive/StreamFormat.cpp | 32 +++++++++++++++++++++++++++++--- modules/demux/adaptive/StreamFormat.hpp | 2 +- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/modules/demux/Makefile.am b/modules/demux/Makefile.am index 0251da6879..78985041ef 100644 --- a/modules/demux/Makefile.am +++ b/modules/demux/Makefile.am @@ -401,6 +401,10 @@ libadaptive_plugin_la_SOURCES = \ demux/adaptive/xml/DOMParser.h \ demux/adaptive/xml/Node.cpp \ demux/adaptive/xml/Node.h +libadaptive_plugin_la_SOURCES += \ + demux/mp4/libmp4.c \ + demux/mp4/libmp4.h \ + meta_engine/ID3Tag.h libadaptive_dash_SOURCES = \ demux/dash/mpd/AdaptationSet.cpp \ @@ -448,8 +452,7 @@ libadaptive_hls_SOURCES = \ demux/hls/HLSStreams.hpp \ demux/hls/HLSStreams.cpp \ demux/mpeg/timestamps.h -libadaptive_hls_SOURCES += meta_engine/ID3Tag.h \ - meta_engine/ID3Meta.h +libadaptive_hls_SOURCES += meta_engine/ID3Meta.h libadaptive_smooth_SOURCES = \ demux/smooth/mp4/IndexReader.cpp \ @@ -477,7 +480,6 @@ libadaptive_plugin_la_SOURCES += $(libadaptive_hls_SOURCES) libadaptive_plugin_la_SOURCES += $(libadaptive_dash_SOURCES) libadaptive_plugin_la_SOURCES += $(libadaptive_smooth_SOURCES) libadaptive_plugin_la_SOURCES += demux/adaptive/adaptive.cpp -libadaptive_plugin_la_SOURCES += demux/mp4/libmp4.c demux/mp4/libmp4.h libadaptive_plugin_la_CXXFLAGS = $(AM_CXXFLAGS) -I$(srcdir)/demux/adaptive libadaptive_plugin_la_LIBADD = $(SOCKET_LIBS) $(LIBM) if HAVE_ZLIB diff --git a/modules/demux/adaptive/StreamFormat.cpp b/modules/demux/adaptive/StreamFormat.cpp index b8cc33da26..927a8a71a9 100644 --- a/modules/demux/adaptive/StreamFormat.cpp +++ b/modules/demux/adaptive/StreamFormat.cpp @@ -25,6 +25,12 @@ #include "StreamFormat.hpp" #include <vlc_common.h> + +extern "C" +{ + #include "../../meta_engine/ID3Tag.h" +} + #include <algorithm> using namespace adaptive; @@ -87,6 +93,11 @@ StreamFormat::StreamFormat( const std::string &mimetype ) } } +static int ID3Callback(uint32_t, const uint8_t *, size_t, void *) +{ + return VLC_EGENERIC; +} + StreamFormat::StreamFormat(const void *data_, size_t sz) { const uint8_t *data = reinterpret_cast<const uint8_t *>(data_); @@ -104,9 +115,24 @@ StreamFormat::StreamFormat(const void *data_, size_t sz) formatid = StreamFormat::WEBVTT; else if(sz > 4 && !memcmp("\x1A\x45\xDF\xA3", data, 4)) formatid = StreamFormat::WEBM; - else if(sz > 3 && (!memcmp("\xFF\xF1", data, 2)|| - !memcmp("\xFF\xF9", data, 2))) - formatid = StreamFormat::PACKEDAAC; + else /* Check Packet Audio formats */ + { + /* It MUST have ID3 header, but HLS spec is an oxymoron */ + if(sz > 10 && ID3TAG_IsTag(data, false)) + { + size_t tagsize = ID3TAG_Parse(data, sz, ID3Callback, this); + if(tagsize >= sz) + return; /* not enough peek */ + data += tagsize; + sz -= tagsize; + } + /* Skipped ID3 if any */ + if(sz > 3 && (!memcmp("\xFF\xF1", data, 2) || + !memcmp("\xFF\xF9", data, 2))) + { + formatid = StreamFormat::PACKEDAAC; + } + } } StreamFormat::~StreamFormat() diff --git a/modules/demux/adaptive/StreamFormat.hpp b/modules/demux/adaptive/StreamFormat.hpp index db70a53753..10d7fba92a 100644 --- a/modules/demux/adaptive/StreamFormat.hpp +++ b/modules/demux/adaptive/StreamFormat.hpp @@ -36,7 +36,7 @@ namespace adaptive static const unsigned PACKEDAAC = 5; static const unsigned WEBM = 6; static const unsigned UNKNOWN = 0xFF; /* will probe */ - static const unsigned PEEK_SIZE = 189; + static const unsigned PEEK_SIZE = 4096; StreamFormat( unsigned = UNSUPPORTED ); explicit StreamFormat( const std::string &mime ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
