/** * 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++) { AbstractBox trackBoxe = trackBoxes.get(trackCounter); TrackBox trackBox = (TrackBox) trackBoxe; trackNumbers[trackCounter] = trackBox.getTrackHeaderBox().getTrackId(); } return trackNumbers; }
/** * 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; }
/** * 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++) { AbstractBox trackBoxe = trackBoxes.get(trackCounter); TrackBox trackBox = (TrackBox) trackBoxe; trackNumbers[trackCounter] = trackBox.getTrackHeaderBox().getTrackId(); } return trackNumbers; }
public String toString() { StringBuilder result = new StringBuilder(); result.append("TrackHeaderBox["); result.append("creationTime=").append(getCreationTime()); result.append(";"); result.append("modificationTime=").append(getModificationTime()); result.append(";"); result.append("trackId=").append(getTrackId()); result.append(";"); result.append("duration=").append(getDuration()); result.append(";"); result.append("layer=").append(getLayer()); result.append(";"); result.append("alternateGroup=").append(getAlternateGroup()); result.append(";"); result.append("volume=").append(getVolume()); result.append(";"); result.append("matrix=").append(matrix); result.append(";"); result.append("width=").append(getWidth()); result.append(";"); result.append("height=").append(getHeight()); result.append("]"); return result.toString(); }
public String toString() { StringBuilder result = new StringBuilder(); result.append("TrackHeaderBox["); result.append("creationTime=").append(getCreationTime()); result.append(";"); result.append("modificationTime=").append(getModificationTime()); result.append(";"); result.append("trackId=").append(getTrackId()); result.append(";"); result.append("duration=").append(getDuration()); result.append(";"); result.append("layer=").append(getLayer()); result.append(";"); result.append("alternateGroup=").append(getAlternateGroup()); result.append(";"); result.append("volume=").append(getVolume()); result.append(";"); result.append("matrix=").append(matrix); result.append(";"); result.append("width=").append(getWidth()); result.append(";"); result.append("height=").append(getHeight()); result.append("]"); return result.toString(); }
public String toString() { StringBuilder result = new StringBuilder(); result.append("TrackHeaderBox["); result.append("creationTime=").append(getCreationTime()); result.append(";"); result.append("modificationTime=").append(getModificationTime()); result.append(";"); result.append("trackId=").append(getTrackId()); result.append(";"); result.append("duration=").append(getDuration()); result.append(";"); result.append("layer=").append(getLayer()); result.append(";"); result.append("alternateGroup=").append(getAlternateGroup()); result.append(";"); result.append("volume=").append(getVolume()); result.append(";"); result.append("matrix=").append(matrix); result.append(";"); result.append("width=").append(getWidth()); result.append(";"); result.append("height=").append(getHeight()); result.append("]"); return result.toString(); }
public SampleList(TrackBox trackBox, IsoFile... additionalFragments) { Container topLevel = ((Box) trackBox.getParent()).getParent(); if (trackBox.getParent().getBoxes(MovieExtendsBox.class).isEmpty()) { if (additionalFragments.length > 0) { throw new RuntimeException("The TrackBox comes from a standard MP4 file. Only use the additionalFragments param if you are dealing with ( fragmented MP4 files AND additional fragments in standalone files )"); } samples = new DefaultMp4SampleList(trackBox.getTrackHeaderBox().getTrackId(), topLevel); } else { samples = new FragmentedMp4SampleList(trackBox.getTrackHeaderBox().getTrackId(), topLevel, additionalFragments); } }
public FragmentedMp4SampleList(long track, Container topLevel, IsoFile... fragments) { this.topLevel = topLevel; this.fragments = fragments; List<TrackBox> tbs = Path.getPaths(topLevel, "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(topLevel, "moov[0]/mvex[0]/trex"); for (TrackExtendsBox box : trexs) { if (box.getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { trex = box; } } sampleCache = (SoftReference<Sample>[]) Array.newInstance(SoftReference.class, size()); initAllFragments(); }
for (MovieFragmentBox moof : topLevel.getBoxes(MovieFragmentBox.class)) { for (TrackFragmentBox trackFragmentBox : moof.getBoxes(TrackFragmentBox.class)) { if (trackFragmentBox.getTrackFragmentHeaderBox().getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { trafs.add(trackFragmentBox); for (MovieFragmentBox moof : fragment.getBoxes(MovieFragmentBox.class)) { for (TrackFragmentBox trackFragmentBox : moof.getBoxes(TrackFragmentBox.class)) { if (trackFragmentBox.getTrackFragmentHeaderBox().getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { trafs.add(trackFragmentBox);
/** * Creates <code>Movie</code> object from a <code>ReadableByteChannel</code>. * * @param channel input channel * @return a representation of the movie * @throws IOException in case of I/O error during IsoFile creation */ public static Movie build(DataSource channel) throws IOException { IsoFile isoFile = new IsoFile(channel); Movie m = new Movie(); List<TrackBox> trackBoxes = isoFile.getMovieBox().getBoxes(TrackBox.class); for (TrackBox trackBox : trackBoxes) { SchemeTypeBox schm = Path.getPath(trackBox, "mdia[0]/minf[0]/stbl[0]/stsd[0]/enc.[0]/sinf[0]/schm[0]"); if (schm != null && (schm.getSchemeType().equals("cenc") || schm.getSchemeType().equals("cbc1"))) { m.addTrack(new CencMp4TrackImplImpl(channel.toString() + "[" + trackBox.getTrackHeaderBox().getTrackId() + "]", trackBox)); } else { m.addTrack(new Mp4TrackImpl(channel.toString() + "[" + trackBox.getTrackHeaderBox().getTrackId() + "]" , trackBox)); } } m.setMatrix(isoFile.getMovieBox().getMovieHeaderBox().getMatrix()); return m; } }
protected Box createTrex() { TrackExtendsBox trex = new TrackExtendsBox(); trex.setTrackId(source.getTrackHeaderBox().getTrackId()); trex.setDefaultSampleDescriptionIndex(1); trex.setDefaultSampleDuration(0); trex.setDefaultSampleSize(0); SampleFlags sf = new SampleFlags(); if ("soun".equals(source.getHandler()) || "subt".equals(source.getHandler())) { // as far as I know there is no audio encoding // where the sample are not self contained. // same seems to be true for subtitle tracks sf.setSampleDependsOn(2); sf.setSampleIsDependedOn(2); } trex.setDefaultSampleFlags(sf); return trex; }
protected Box createTrex(StreamingTrack streamingTrack) { TrackExtendsBox trex = new TrackExtendsBox(); trex.setTrackId(streamingTrack.getTrackHeaderBox().getTrackId()); trex.setDefaultSampleDescriptionIndex(1); trex.setDefaultSampleDuration(0); trex.setDefaultSampleSize(0); SampleFlags sf = new SampleFlags(); if ("soun".equals(streamingTrack.getHandler()) || "subt".equals(streamingTrack.getHandler())) { // as far as I know there is no audio encoding // where the sample are not self contained. // same seems to be true for subtitle tracks sf.setSampleDependsOn(2); sf.setSampleIsDependedOn(2); } trex.setDefaultSampleFlags(sf); return trex; }
List<Box> tkhds = Path.getPaths(this, "/moov[0]/trak/tkhd"); for (Box tkhd : tkhds) { if (((TrackHeaderBox) tkhd).getTrackId() == this.getParent().getBoxes(TrackFragmentHeaderBox.class).get(0).getTrackId()) { AbstractTrackEncryptionBox tenc = (AbstractTrackEncryptionBox) Path.getPath(tkhd, "../mdia[0]/minf[0]/stbl[0]/stsd[0]/enc.[0]/sinf[0]/schi[0]/tenc[0]"); if (tenc == null) {
List<Box> tkhds = Path.getPaths(this, "/moov[0]/trak/tkhd"); for (Box tkhd : tkhds) { if (((TrackHeaderBox) tkhd).getTrackId() == this.getParent().getBoxes(TrackFragmentHeaderBox.class).get(0).getTrackId()) { AbstractTrackEncryptionBox tenc = (AbstractTrackEncryptionBox) Path.getPath(tkhd, "../mdia[0]/minf[0]/stbl[0]/stsd[0]/enc.[0]/sinf[0]/schi[0]/tenc[0]"); if (tenc == null) {
@Override public int size() { if (size_ != -1) { return size_; } int i = 0; for (MovieFragmentBox moof : topLevel.getBoxes(MovieFragmentBox.class)) { for (TrackFragmentBox trackFragmentBox : moof.getBoxes(TrackFragmentBox.class)) { if (trackFragmentBox.getTrackFragmentHeaderBox().getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { for (TrackRunBox trackRunBox : trackFragmentBox.getBoxes(TrackRunBox.class)) { i += trackRunBox.getSampleCount(); } } } } for (IsoFile fragment : fragments) { for (MovieFragmentBox moof : fragment.getBoxes(MovieFragmentBox.class)) { for (TrackFragmentBox trackFragmentBox : moof.getBoxes(TrackFragmentBox.class)) { if (trackFragmentBox.getTrackFragmentHeaderBox().getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { for (TrackRunBox trackRunBox : trackFragmentBox.getBoxes(TrackRunBox.class)) { i += trackRunBox.getSampleCount(); } } } } } size_ = i; return i; }
List<TrackExtendsBox> trackExtendsBoxes = movieExtendsBoxes.get(0).getBoxes(TrackExtendsBox.class); for (TrackExtendsBox trackExtendsBox : trackExtendsBoxes) { if (trackExtendsBox.getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { for (MovieFragmentBox movieFragmentBox : trackBox.getIsoFile().getBoxes(MovieFragmentBox.class)) { offsets2Sizes.putAll(getOffsets(movieFragmentBox, trackBox.getTrackHeaderBox().getTrackId(), trackExtendsBox));
List<TrackExtendsBox> trackExtendsBoxes = movieExtendsBoxes.get(0).getBoxes(TrackExtendsBox.class); for (TrackExtendsBox trackExtendsBox : trackExtendsBoxes) { if (trackExtendsBox.getTrackId() == trackBox.getTrackHeaderBox().getTrackId()) { for (MovieFragmentBox movieFragmentBox : trackBox.getIsoFile().getBoxes(MovieFragmentBox.class)) { offsets2Sizes.putAll(getOffsets(movieFragmentBox, trackBox.getTrackHeaderBox().getTrackId(), trackExtendsBox));
if (tb.getTrackHeaderBox().getTrackId() == track) { trackBox = tb;
super(name); this.trackBox = trackBox; final long trackId = trackBox.getTrackHeaderBox().getTrackId(); samples = new SampleList(trackBox, fragments); SampleTableBox stbl = trackBox.getMediaBox().getMediaInformationBox().getSampleTableBox(); TrackHeaderBox tkhd = trackBox.getTrackHeaderBox(); trackMetaData.setTrackId(tkhd.getTrackId()); trackMetaData.setCreationTime(mdhd.getCreationTime()); trackMetaData.setLanguage(mdhd.getLanguage());
long trackId = trackBox.getTrackHeaderBox().getTrackId(); if (trackBox.getParent().getBoxes(MovieExtendsBox.class).size() > 0) {