public String toString() { StringBuilder result = new StringBuilder(); result.append("MovieHeaderBox["); result.append("creationTime=").append(getCreationTime()); result.append(";"); result.append("modificationTime=").append(getModificationTime()); result.append(";"); result.append("timescale=").append(getTimescale()); result.append(";"); result.append("duration=").append(getDuration()); result.append(";"); result.append("rate=").append(getRate()); result.append(";"); result.append("volume=").append(getVolume()); result.append(";"); result.append("matrix=").append(matrix); result.append(";"); result.append("nextTrackId=").append(getNextTrackId()); result.append("]"); return result.toString(); }
protected Box createMvhd() { MovieHeaderBox mvhd = new MovieHeaderBox(); mvhd.setVersion(1); mvhd.setCreationTime(creationTime); mvhd.setModificationTime(creationTime); mvhd.setDuration(0);//no duration in moov for fragmented movies long[] timescales = new long[0]; long maxTrackId = 0; for (StreamingTrack streamingTrack : source) { timescales = Mp4Arrays.copyOfAndAppend(timescales, streamingTrack.getTimescale()); maxTrackId = Math.max(streamingTrack.getTrackExtension(TrackIdTrackExtension.class).getTrackId(), maxTrackId); } mvhd.setTimescale(Mp4Math.lcm(timescales)); // find the next available trackId mvhd.setNextTrackId(maxTrackId + 1); return mvhd; }
protected MovieBox createMovieBox(Movie movie, Map<Track, int[]> chunks) { MovieBox movieBox = new MovieBox(); MovieHeaderBox mvhd = new MovieHeaderBox(); mvhd.setCreationTime(new Date()); mvhd.setModificationTime(new Date()); mvhd.setMatrix(movie.getMatrix()); long movieTimeScale = getTimescale(movie); long duration = 0; mvhd.setDuration(duration); mvhd.setTimescale(movieTimeScale); nextTrackId = nextTrackId < track.getTrackMetaData().getTrackId() ? track.getTrackMetaData().getTrackId() : nextTrackId; mvhd.setNextTrackId(++nextTrackId);
public static void main(String[] args) throws IOException { String filename = GetDuration.class.getProtectionDomain().getCodeSource().getLocation().getFile() + "/count-video.mp4"; IsoFile isoFile = new IsoFile(filename); double lengthInSeconds = (double) isoFile.getMovieBox().getMovieHeaderBox().getDuration() / isoFile.getMovieBox().getMovieHeaderBox().getTimescale(); System.err.println(lengthInSeconds); }
set = true; if (create) { ((MovieHeaderBox) header).setCreationTime(date); } else { ((MovieHeaderBox) header).setModificationTime(date);
assert mvhd != null; for (EditListBox.Entry e : elst.getEntries()) { edits.add(new Edit(e.getMediaTime(), mdhd.getTimescale(), e.getMediaRate(), (double) e.getSegmentDuration() / mvhd.getTimescale()));
public void setDuration(long duration) { this.duration = duration; if (duration >= (1L << 32)) { setVersion(1); } }
Movie result = MovieCreator.build("input.mp4"); // do something with the file Container out = new DefaultMp4Builder().build(result); MovieHeaderBox mvhd = Path.getPath(out, "moov/mvhd"); mvhd.setMatrix(Matrix.ROTATE_180); out.writeContainer(new FileOutputStream("result.mp4").getChannel());
timeScale = mvhd.getTimescale(); duration = mvhd.getDuration(); log.debug("Time scale {} Duration {}", timeScale, duration); double lengthInSeconds = (double) duration / timeScale;
editStartTime -= (double) edit.getSegmentDuration() / mvhd.getTimescale(); } else /* if edit.getMediaTime() >= 0 */ { assert mdhd != null;
public void setCreationTime(Date creationTime) { this.creationTime = creationTime; if (DateHelper.convert(creationTime) >= (1L << 32)) { setVersion(1); } }
IsoFile isoFile = new IsoFile("video.mp4"); MovieHeaderBox mvhd = Path.getPath(isoFile, "/moov/mvhd"); mvhd.setMatrix(Matrix.ROTATE_180); isoFile.writeContainer(new FileOutputStream("result.mp4").getChannel());
protected Box createMvhd() { MovieHeaderBox mvhd = new MovieHeaderBox(); mvhd.setVersion(1); mvhd.setCreationTime(creationTime); mvhd.setModificationTime(creationTime); long[] timescales = new long[0]; long maxTrackId = 0; double duration = 0; for (StreamingTrack streamingTrack : source) { duration = Math.max((double) nextSampleStartTime.get(streamingTrack) / streamingTrack.getTimescale(), duration); timescales = Mp4Arrays.copyOfAndAppend(timescales, streamingTrack.getTimescale()); maxTrackId = Math.max(streamingTrack.getTrackExtension(TrackIdTrackExtension.class).getTrackId(), maxTrackId); } mvhd.setTimescale(Mp4Math.lcm(timescales)); mvhd.setDuration((long) (Mp4Math.lcm(timescales) * duration)); // find the next available trackId mvhd.setNextTrackId(maxTrackId + 1); return mvhd; }
protected MovieBox createMovieBox(Movie movie, Map<Track, int[]> chunks) { MovieBox movieBox = new MovieBox(); MovieHeaderBox mvhd = new MovieHeaderBox(); mvhd.setCreationTime(new Date()); mvhd.setModificationTime(new Date()); mvhd.setMatrix(movie.getMatrix()); long movieTimeScale = getTimescale(movie); long duration = 0; mvhd.setDuration(duration); mvhd.setTimescale(movieTimeScale); nextTrackId = nextTrackId < track.getTrackMetaData().getTrackId() ? track.getTrackMetaData().getTrackId() : nextTrackId; mvhd.setNextTrackId(++nextTrackId);
public String toString() { StringBuilder result = new StringBuilder(); result.append("MovieHeaderBox["); result.append("creationTime=").append(getCreationTime()); result.append(";"); result.append("modificationTime=").append(getModificationTime()); result.append(";"); result.append("timescale=").append(getTimescale()); result.append(";"); result.append("duration=").append(getDuration()); result.append(";"); result.append("rate=").append(getRate()); result.append(";"); result.append("volume=").append(getVolume()); result.append(";"); result.append("matrix=").append(matrix); result.append(";"); result.append("nextTrackId=").append(getNextTrackId()); result.append("]"); return result.toString(); }
timeScale = mvhd.getTimescale(); duration = mvhd.getDuration(); log.debug("Time scale {} Duration {}", timeScale, duration); double lengthInSeconds = (double) duration / timeScale;
public static void addSegmentBase(RepresentationBuilderImpl rb, RepresentationType representationType) { SegmentBaseType segBaseType = new SegmentBaseType(); representationType.setSegmentBase(segBaseType); segBaseType.setTimescale(((MovieHeaderBox) Path.getPath(rb.getInitSegment(), "moov[0]/mvhd[0]")).getTimescale()); segBaseType.setIndexRangeExact(true); long initSize = 0; for (Box b : rb.getInitSegment().getBoxes()) { initSize += b.getSize(); } long indexSize = 0; for (Box b : rb.getIndexSegment().getBoxes()) { indexSize += b.getSize(); } segBaseType.setIndexRange(String.format("%s-%s", initSize, initSize + indexSize - 1)); URLType initialization = new URLType(); segBaseType.setInitElement(initialization); initialization.setRange(String.format("0-%s", initSize - 1)); }
public void setModificationTime(Date modificationTime) { this.modificationTime = modificationTime; if (DateHelper.convert(modificationTime) >= (1L << 32)) { setVersion(1); } }
mvhd.setMatrix(Matrix.ROTATE_180); if (!dst.exists()) { dst.createNewFile();
/** * Creates a single 'mvhd' movie header box for a given movie. * * @param movie the concerned movie * @return an 'mvhd' box */ protected ParsableBox createMvhd(Movie movie) { MovieHeaderBox mvhd = new MovieHeaderBox(); mvhd.setVersion(1); mvhd.setCreationTime(getDate()); mvhd.setModificationTime(getDate()); mvhd.setDuration(0);//no duration in moov for fragmented movies long movieTimeScale = movie.getTimescale(); mvhd.setTimescale(movieTimeScale); // find the next available trackId long nextTrackId = 0; for (Track track : movie.getTracks()) { nextTrackId = nextTrackId < track.getTrackMetaData().getTrackId() ? track.getTrackMetaData().getTrackId() : nextTrackId; } mvhd.setNextTrackId(++nextTrackId); return mvhd; }