MpegDashDemuxer.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "BinaryReader.h"
  2. #include "ByteStream.h"
  3. #include "MpegDashTypes.h"
  4. #include <memory>
  5. namespace bell::mpeg
  6. {
  7. class MpegDashDemuxer
  8. {
  9. std::shared_ptr<bell::BinaryReader> reader;
  10. std::unique_ptr<bell::mpeg::MpegBox> lastBox;
  11. std::unique_ptr<bell::mpeg::Moof> lastMoof;
  12. std::vector<bell::mpeg::Mp4Track> tracks;
  13. bool chunkZero = false;
  14. public:
  15. MpegDashDemuxer(std::shared_ptr<ByteStream> stream);
  16. ~MpegDashDemuxer() {
  17. reader->close();
  18. }
  19. void parse();
  20. std::unique_ptr<bell::mpeg::MpegBox> readBox();
  21. // std::vector<Mp4Track> getTracks();
  22. std::vector<uint8_t> readFullBox(std::unique_ptr<bell::mpeg::MpegBox> &);
  23. void ensureBox(std::unique_ptr<bell::mpeg::MpegBox> &);
  24. size_t position();
  25. void close();
  26. std::unique_ptr<bell::mpeg::Mvhd> parseMvhd();
  27. std::unique_ptr<bell::mpeg::Chunk> getNextChunk(bool infoOnly);
  28. std::unique_ptr<bell::mpeg::TrunEntry> getTrunEntry(std::unique_ptr<Trun> &, int);
  29. std::unique_ptr<bell::mpeg::TrunEntry> getAbsoluteTrunEntry(std::unique_ptr<bell::mpeg::Trun> &, int, std::unique_ptr<bell::mpeg::Tfhd> &);
  30. std::vector<bell::mpeg::Trex> parseMvex(std::unique_ptr<bell::mpeg::MpegBox> &, int possibleTrackCount);
  31. std::unique_ptr<bell::mpeg::Mp4DashSample> getNextSample(std::unique_ptr<bell::mpeg::Chunk> &);
  32. bool hasFlag(int flags, int mask);
  33. std::unique_ptr<bell::mpeg::Hdlr> parseHdlr(std::unique_ptr<bell::mpeg::MpegBox> &);
  34. std::unique_ptr<bell::mpeg::Moov> parseMoov(std::unique_ptr<bell::mpeg::MpegBox> &);
  35. int parseMfhd();
  36. std::unique_ptr<bell::mpeg::Traf> parseTraf(std::unique_ptr<bell::mpeg::MpegBox> &, int);
  37. std::unique_ptr<bell::mpeg::Moof> parseMoof(std::unique_ptr<bell::mpeg::MpegBox> &, int);
  38. std::unique_ptr<bell::mpeg::Tfhd> parseTfhd(int);
  39. long parseTfdt();
  40. std::unique_ptr<bell::mpeg::Trun> parseTrun();
  41. std::unique_ptr<bell::mpeg::Tkhd> parseTkhd();
  42. std::unique_ptr<bell::mpeg::Trak> parseTrak(std::unique_ptr<bell::mpeg::MpegBox> &);
  43. bell::mpeg::Trex parseTrex();
  44. std::unique_ptr<bell::mpeg::Mdia> parseMdia(std::unique_ptr<bell::mpeg::MpegBox> &);
  45. std::unique_ptr<bell::mpeg::Minf> parseMinf(std::unique_ptr<bell::mpeg::MpegBox> &);
  46. std::unique_ptr<bell::mpeg::Elst> parseEdts(std::unique_ptr<bell::mpeg::MpegBox> &);
  47. std::vector<uint8_t> parseStbl(std::unique_ptr<bell::mpeg::MpegBox> &);
  48. std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int, int, int);
  49. std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int, int);
  50. std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int);
  51. std::unique_ptr<bell::mpeg::MpegBox> untilAnyBox(std::unique_ptr<MpegBox> &);
  52. };
  53. }