private static String createPath(Box box, String path) { if (box instanceof IsoFile) { return path; } else { List<?> boxesOfBoxType = box.getParent().getBoxes(box.getClass()); int index = boxesOfBoxType.indexOf(box); path = String.format("/%s[%d]", box.getType(), index) + path; return createPath(box.getParent(), path); } }
private static String createPath(Box box, String path) { if (box instanceof IsoFile) { return path; } else { List<?> boxesOfBoxType = box.getParent().getBoxes(box.getClass()); int index = boxesOfBoxType.indexOf(box); path = String.format("/%s[%d]", box.getType(), index) + path; return createPath(box.getParent(), path); } }
private void correctChunkOffsets(Container container, long correction) { List<Box> chunkOffsetBoxes = Path.getPaths(container, "/moov[0]/trak/mdia[0]/minf[0]/stbl[0]/stco[0]"); for (Box chunkOffsetBox : chunkOffsetBoxes) { LinkedList<Box> stblChildren = new LinkedList<>(chunkOffsetBox.getParent().getBoxes()); stblChildren.remove(chunkOffsetBox); long[] cOffsets = ((ChunkOffsetBox) chunkOffsetBox).getChunkOffsets(); for (int i = 0; i < cOffsets.length; i++) { cOffsets[i] += correction; } StaticChunkOffsetBox cob = new StaticChunkOffsetBox(); cob.setChunkOffsets(cOffsets); stblChildren.add(cob); chunkOffsetBox.getParent().setBoxes(stblChildren); } }
private static String createPath(Box box, String path) { Container parent = box.getParent(); int index = 0; List<Box> siblings = parent.getBoxes(); for (Box sibling : siblings) { if (sibling.getType().equals(box.getType())) { if (sibling == box) { break; } index++; } } path = String.format("/%s[%d]", box.getType(), index) + path; if (parent instanceof Box) { return createPath((Box) parent, path); } else { return path; } }
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); } }
do { Object current = b; b = ((Box) b).getParent();
movieFragmentBoxes.addAll(((Box) trackBox.getParent()).getParent().getBoxes(MovieFragmentBox.class)); for (IsoFile fragment : fragments) { movieFragmentBoxes.addAll(fragment.getBoxes(MovieFragmentBox.class)); for (TrackExtendsBox trex : trackExtendsBoxes) { if (trex.getTrackId() == trackId) { List<SubSampleInformationBox> subss = Path.getPaths(((Box) trackBox.getParent()).getParent(), "/moof/traf/subs"); if (subss.size() > 0) { subSampleInformationBox = new SubSampleInformationBox();
for (MovieFragmentBox movieFragmentBox : ((Box) trackBox.getParent()).getParent().getBoxes(MovieFragmentBox.class)) { List<TrackFragmentBox> trafs = movieFragmentBox.getBoxes(TrackFragmentBox.class); for (TrackFragmentBox traf : trafs) { long baseOffset; if (traf.getTrackFragmentHeaderBox().hasBaseDataOffset()) { base = ((Box) trackBox.getParent()).getParent(); baseOffset = traf.getTrackFragmentHeaderBox().getBaseDataOffset(); } else {