#include "BinaryReader.h" #include "ByteStream.h" #include "MpegDashTypes.h" #include namespace bell::mpeg { class MpegDashDemuxer { std::shared_ptr reader; std::unique_ptr lastBox; std::unique_ptr lastMoof; std::vector tracks; bool chunkZero = false; public: MpegDashDemuxer(std::shared_ptr stream); ~MpegDashDemuxer() { reader->close(); } void parse(); std::unique_ptr readBox(); // std::vector getTracks(); std::vector readFullBox(std::unique_ptr &); void ensureBox(std::unique_ptr &); size_t position(); void close(); std::unique_ptr parseMvhd(); std::unique_ptr getNextChunk(bool infoOnly); std::unique_ptr getTrunEntry(std::unique_ptr &, int); std::unique_ptr getAbsoluteTrunEntry(std::unique_ptr &, int, std::unique_ptr &); std::vector parseMvex(std::unique_ptr &, int possibleTrackCount); std::unique_ptr getNextSample(std::unique_ptr &); bool hasFlag(int flags, int mask); std::unique_ptr parseHdlr(std::unique_ptr &); std::unique_ptr parseMoov(std::unique_ptr &); int parseMfhd(); std::unique_ptr parseTraf(std::unique_ptr &, int); std::unique_ptr parseMoof(std::unique_ptr &, int); std::unique_ptr parseTfhd(int); long parseTfdt(); std::unique_ptr parseTrun(); std::unique_ptr parseTkhd(); std::unique_ptr parseTrak(std::unique_ptr &); bell::mpeg::Trex parseTrex(); std::unique_ptr parseMdia(std::unique_ptr &); std::unique_ptr parseMinf(std::unique_ptr &); std::unique_ptr parseEdts(std::unique_ptr &); std::vector parseStbl(std::unique_ptr &); std::unique_ptr untilBox(std::unique_ptr &, int, int, int); std::unique_ptr untilBox(std::unique_ptr &, int, int); std::unique_ptr untilBox(std::unique_ptr &, int); std::unique_ptr untilAnyBox(std::unique_ptr &); }; }