/** * Returns the track numbers associated with this <code>MovieBox</code>. * * @return the tracknumbers (IDs) of the tracks in their order of appearance in the file */ public long[] getTrackNumbers() { List<TrackBox> trackBoxes = this.getBoxes(TrackBox.class); long[] trackNumbers = new long[trackBoxes.size()]; for (int trackCounter = 0; trackCounter < trackBoxes.size(); trackCounter++) { trackNumbers[trackCounter] = trackBoxes.get(trackCounter).getTrackHeaderBox().getTrackId(); } return trackNumbers; }
public String getLanguage() { return trackBox.getMediaBox().getMediaHeaderBox().getLanguage(); }
public FragmentedMp4SampleList(long track, Container isofile, RandomAccessSource randomAccess) { this.isofile = isofile; this.randomAccess = randomAccess; List<TrackBox> tbs = Path.getPaths(isofile, "moov[0]/trak"); for (TrackBox tb : tbs) { if (tb.getTrackHeaderBox().getTrackId() == track) { trackBox = tb; } } if (trackBox == null) { throw new RuntimeException("This MP4 does not contain track " + track); } List<TrackExtendsBox> trexs = Path.getPaths(isofile, "moov[0]/mvex[0]/trex"); for (TrackExtendsBox box : trexs) { if (box.getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { trex = box; } } sampleEntries = new ArrayList<>(trackBox.getSampleTableBox().getSampleDescriptionBox().getBoxes(SampleEntry.class)); if (sampleEntries.size() != trackBox.getSampleTableBox().getSampleDescriptionBox().getBoxes().size()) throw new AssertionError("stsd contains not only sample entries. Something's wrong here! Bailing out"); sampleCache = (SoftReference<Sample>[]) Array.newInstance(SoftReference.class, size()); initAllFragments(); }
for (TrackBox trak : tracks) { if (log.isDebugEnabled()) { log.debug("trak children: {}", trak.getBoxes().size()); MP4Reader.dumpBox(trak); TrackHeaderBox tkhd = trak.getTrackHeaderBox(); // tkhd log.debug("Track id: {}", tkhd.getTrackId()); MediaBox mdia = trak.getMediaBox(); // mdia long scale = 0; if (mdia != null) { SampleTableBox stbl = trak.getSampleTableBox(); // mdia/minf/stbl if (stbl != null) { if (log.isDebugEnabled()) {
if (box.getTrackHeaderBox().getTrackId() == trackId) { trackBox = box; break; assert schm != null && (schm.getSchemeType().equals("cenc") || schm.getSchemeType().equals("cbc1")) : "Track must be CENC (cenc or cbc1) encrypted"; List<SampleEntry> sampleEntries = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox().getSampleDescriptionBox().getBoxes(SampleEntry.class); assert trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox().getSampleDescriptionBox().getBoxes().size() == sampleEntries.size(); long[] chunkSizes = trackBox.getSampleTableBox().getSampleToChunkBox().blowup(chunkOffsetBox.getChunkOffsets().length);
TrackBox trackBox = null; for (TrackBox box : Path.<TrackBox>getPaths(isofile, "moov/trak")) { if (box.getTrackHeaderBox().getTrackId() == trackId) { trackBox = box; break; SampleTableBox stbl = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox(); handler = trackBox.getMediaBox().getHandlerBox().getHandlerType(); MediaHeaderBox mdhd = trackBox.getMediaBox().getMediaHeaderBox(); TrackHeaderBox tkhd = trackBox.getTrackHeaderBox();
public SampleDescriptionBox getSampleDescriptionBox() { return trackBox.getSampleTableBox().getSampleDescriptionBox(); }
for (TrackBox trak : tracks) { if (log.isDebugEnabled()) { log.debug("trak children: {}", trak.getBoxes().size()); MP4Reader.dumpBox(trak); TrackHeaderBox tkhd = trak.getTrackHeaderBox(); // tkhd log.debug("Track id: {}", tkhd.getTrackId()); MediaBox mdia = trak.getMediaBox(); // mdia long scale = 0; if (mdia != null) { SampleTableBox stbl = trak.getSampleTableBox(); // mdia/minf/stbl if (stbl != null) { if (log.isDebugEnabled()) {
public ClassicMp4ContainerSource(InputStream is) throws IOException { readableByteChannel = Channels.newChannel(new TeeInputStream(is, baos)); BasicContainer container = new BasicContainer(); BoxParser boxParser = new PropertyBoxParserImpl(); Box current = null; while (current == null || !"moov".equals(current.getType())) { current = boxParser.parseBox(readableByteChannel, null); container.addBox(current); } // Either mdat was already read (yeahh sucks but what can you do if it's in the beginning) // or it's still coming for (TrackBox trackBox : Path.<TrackBox>getPaths(container, "moov[0]/trak")) { Mp4StreamingTrack mp4StreamingTrack = new Mp4StreamingTrack(trackBox); tracks.put(trackBox, mp4StreamingTrack); if (trackBox.getSampleTableBox().getCompositionTimeToSample() != null) { mp4StreamingTrack.addTrackExtension(new CompositionTimeTrackExtension()); } mp4StreamingTrack.addTrackExtension(new TrackIdTrackExtension(trackBox.getTrackHeaderBox().getTrackId())); currentChunks.put(trackBox, 1L); currentSamples.put(trackBox, 1L); } }
if (box.getTrackHeaderBox().getTrackId() == trackId) { trackBox = box; break; assert schm != null && (schm.getSchemeType().equals("cenc") || schm.getSchemeType().equals("cbc1")) : "Track must be CENC (cenc or cbc1) encrypted"; List<SampleEntry> sampleEntries = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox().getSampleDescriptionBox().getBoxes(SampleEntry.class); assert trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox().getSampleDescriptionBox().getBoxes().size() == sampleEntries.size(); long[] chunkSizes = trackBox.getSampleTableBox().getSampleToChunkBox().blowup(chunkOffsetBox.getChunkOffsets().length);
String handler = trackBox.getMediaBox().getHandlerBox().getHandlerType(); if (language != null && !trackBox.getMediaBox().getMediaHeaderBox().getLanguage().equals(language)) { LOG.info(f.getName() + ": Excluding track " + trackBox.getTrackHeaderBox().getTrackId() + " from processing as language is " + trackBox.getMediaBox().getMediaHeaderBox().getLanguage() + " but not " + language + "."); include = false; LOG.info(f.getName() + ": Excluding track " + trackBox.getTrackHeaderBox().getTrackId() + " from processing as type is " + handlerToType.computeIfAbsent(handler, e -> e) + " but not " + type + "."); include = false; tracks.add(new Mp4TrackImpl(trackBox.getTrackHeaderBox().getTrackId(), isoFile, new FileRandomAccessSourceImpl(new RandomAccessFile(f, "r")), f.getName()));
@Override public int size() { return l2i(trackBox.getSampleTableBox().getSampleSizeBox().getSampleCount()); }
for (TrackBox trak : tracks) { if (log.isDebugEnabled()) { log.debug("trak children: {}", trak.getBoxes().size()); dumpBox(trak); TrackHeaderBox tkhd = trak.getTrackHeaderBox(); // tkhd log.debug("Track id: {}", tkhd.getTrackId()); if (tkhd != null && tkhd.getWidth() > 0) { log.debug("Width {} x Height {}", width, height); MediaBox mdia = trak.getMediaBox(); // mdia long scale = 0; boolean isAudio = false, isVideo = false; SampleTableBox stbl = trak.getSampleTableBox(); // mdia/minf/stbl if (stbl != null) { if (log.isDebugEnabled()) {
TrackBox trackBox = trackBoxes.stream().filter(tb -> tb.getTrackHeaderBox().getTrackId() == trackId).findAny().get();
if (tb.getTrackHeaderBox().getTrackId() == track) { trackBox = tb; throw new RuntimeException("This MP4 does not contain track " + track); sampleEntries = new ArrayList<>(trackBox.getSampleTableBox().getSampleDescriptionBox().getBoxes(SampleEntry.class)); if (sampleEntries.size() != trackBox.getSampleTableBox().getSampleDescriptionBox().getBoxes().size()) throw new AssertionError("stsd contains not only sample entries. Something's wrong here! Bailing out"); chunkOffsets = trackBox.getSampleTableBox().getChunkOffsetBox().getChunkOffsets(); long[] chunkSizes = new long[chunkOffsets.length]; ssb = trackBox.getSampleTableBox().getSampleSizeBox(); List<SampleToChunkBox.Entry> s2chunkEntries = trackBox.getSampleTableBox().getSampleToChunkBox().getEntries(); SampleToChunkBox.Entry[] entries = s2chunkEntries.toArray(new SampleToChunkBox.Entry[s2chunkEntries.size()]);
TrackBox trackBox = null; for (TrackBox box : Path.<TrackBox>getPaths(isofile, "moov/trak")) { if (box.getTrackHeaderBox().getTrackId() == trackId) { trackBox = box; break; SampleTableBox stbl = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox(); handler = trackBox.getMediaBox().getHandlerBox().getHandlerType(); MediaHeaderBox mdhd = trackBox.getMediaBox().getMediaHeaderBox(); TrackHeaderBox tkhd = trackBox.getTrackHeaderBox();
protected ParsableBox createTrak(Track track, Movie movie) { LOG.debug("Creating Track " + track); TrackBox trackBox = new TrackBox(); trackBox.addBox(createTkhd(movie, track)); ParsableBox edts = createEdts(track, movie); if (edts != null) { trackBox.addBox(edts); } trackBox.addBox(createMdia(track, movie)); return trackBox; }
public long getTimescale() { return trackBox.getMediaBox().getMediaHeaderBox().getTimescale(); }
@Override public int size() { return l2i(trackBox.getSampleTableBox().getSampleSizeBox().getSampleCount()); }