package org.mp4parser.streaming.output.mp4; import org.mp4parser.Box; import org.mp4parser.boxes.iso14496.part12.*; import org.mp4parser.streaming.StreamingTrack; import org.mp4parser.streaming.extensions.DimensionTrackExtension; import org.mp4parser.streaming.extensions.TrackIdTrackExtension; import java.util.LinkedList; import java.util.List; public abstract class DefaultBoxes { public Box createFtyp() { List<String> minorBrands = new LinkedList<String>(); minorBrands.add("isom"); minorBrands.add("iso2"); minorBrands.add("avc1"); minorBrands.add("iso6"); minorBrands.add("mp41"); return new FileTypeBox("isom", 512, minorBrands); } protected Box createMdiaHdlr(StreamingTrack streamingTrack) { HandlerBox hdlr = new HandlerBox(); hdlr.setHandlerType(streamingTrack.getHandler()); return hdlr; } protected Box createMdia(StreamingTrack streamingTrack) { MediaBox mdia = new MediaBox(); mdia.addBox(createMdhd(streamingTrack)); mdia.addBox(createMdiaHdlr(streamingTrack)); mdia.addBox(createMinf(streamingTrack)); return mdia; } abstract protected Box createMdhd(StreamingTrack streamingTrack); abstract protected Box createMvhd(); protected Box createMinf(StreamingTrack streamingTrack) { MediaInformationBox minf = new MediaInformationBox(); if (streamingTrack.getHandler().equals("vide")) { minf.addBox(new VideoMediaHeaderBox()); } else if (streamingTrack.getHandler().equals("soun")) { minf.addBox(new SoundMediaHeaderBox()); } else if (streamingTrack.getHandler().equals("text")) { minf.addBox(new NullMediaHeaderBox()); } else if (streamingTrack.getHandler().equals("subt")) { minf.addBox(new SubtitleMediaHeaderBox()); } else if (streamingTrack.getHandler().equals("hint")) { minf.addBox(new HintMediaHeaderBox()); } else if (streamingTrack.getHandler().equals("sbtl")) { minf.addBox(new NullMediaHeaderBox()); } minf.addBox(createDinf()); minf.addBox(createStbl(streamingTrack)); return minf; } protected Box createStbl(StreamingTrack streamingTrack) { SampleTableBox stbl = new SampleTableBox(); stbl.addBox(streamingTrack.getSampleDescriptionBox()); stbl.addBox(new TimeToSampleBox()); stbl.addBox(new SampleToChunkBox()); stbl.addBox(new SampleSizeBox()); stbl.addBox(new StaticChunkOffsetBox()); return stbl; } protected DataInformationBox createDinf() { DataInformationBox dinf = new DataInformationBox(); DataReferenceBox dref = new DataReferenceBox(); dinf.addBox(dref); DataEntryUrlBox url = new DataEntryUrlBox(); url.setFlags(1); dref.addBox(url); return dinf; } protected Box createTrak(StreamingTrack streamingTrack) { TrackBox trackBox = new TrackBox(); trackBox.addBox(createTkhd(streamingTrack)); trackBox.addBox(createMdia(streamingTrack)); return trackBox; } protected Box createTkhd(StreamingTrack streamingTrack) { TrackHeaderBox tkhd = new TrackHeaderBox(); tkhd.setTrackId(streamingTrack.getTrackExtension(TrackIdTrackExtension.class).getTrackId()); DimensionTrackExtension dte = streamingTrack.getTrackExtension(DimensionTrackExtension.class); if (dte != null) { tkhd.setHeight(dte.getHeight()); tkhd.setWidth(dte.getWidth()); } return tkhd; } }