case ID_CUES: if (!sentSeekMap) { extractorOutput.seekMap(buildSeekMap()); sentSeekMap = true; } else { extractorOutput.drmInitData( new DrmInitData.Universal(MimeTypes.VIDEO_WEBM, currentTrack.encryptionKeyId)); sentDrmInitData = true; throw new ParserException("No valid tracks were found"); extractorOutput.endTracks(); return; default:
@Override public void init(ExtractorOutput output) { this.output = output; output.seekMap(SeekMap.UNSEEKABLE); }
this.output = output.track(number); this.output.format(format);
private void onMoovContainerAtomRead(ContainerAtom moov) { List<Atom.LeafAtom> moovChildren = moov.leafChildren; int moovChildrenSize = moovChildren.size(); DrmInitData.Mapped drmInitData = null; for (int i = 0; i < moovChildrenSize; i++) { LeafAtom child = moovChildren.get(i); if (child.type == Atom.TYPE_pssh) { if (drmInitData == null) { drmInitData = new DrmInitData.Mapped(MimeTypes.VIDEO_MP4); } byte[] psshData = child.data.data; drmInitData.put(PsshAtomUtil.parseUuid(psshData), psshData); } } if (drmInitData != null) { extractorOutput.drmInitData(drmInitData); } ContainerAtom mvex = moov.getContainerAtomOfType(Atom.TYPE_mvex); extendsDefaults = parseTrex(mvex.getLeafAtomOfType(Atom.TYPE_trex).data); track = AtomParsers.parseTrak(moov.getContainerAtomOfType(Atom.TYPE_trak), moov.getLeafAtomOfType(Atom.TYPE_mvhd)); Assertions.checkState(track != null); trackOutput.format(track.mediaFormat); }
private void onLeafAtomRead(LeafAtom leaf, long inputPosition) { if (!containerAtoms.isEmpty()) { containerAtoms.peek().add(leaf); } else if (leaf.type == Atom.TYPE_sidx) { ChunkIndex segmentIndex = parseSidx(leaf.data, inputPosition); extractorOutput.seekMap(segmentIndex); haveOutputSeekMap = true; } }
id3Reader = new Id3Reader(output.track(TS_STREAM_TYPE_ID3)); switch (streamType) { case TS_STREAM_TYPE_MPA: pesPayloadReader = new MpegAudioReader(output.track(TS_STREAM_TYPE_MPA)); break; case TS_STREAM_TYPE_MPA_LSF: pesPayloadReader = new MpegAudioReader(output.track(TS_STREAM_TYPE_MPA_LSF)); break; case TS_STREAM_TYPE_AAC: pesPayloadReader = new AdtsReader(output.track(TS_STREAM_TYPE_AAC)); break; case TS_STREAM_TYPE_ATSC_E_AC3: case TS_STREAM_TYPE_ATSC_AC3: pesPayloadReader = new Ac3Reader(output.track(streamType)); break; case TS_STREAM_TYPE_H264: pesPayloadReader = new H264Reader(output.track(TS_STREAM_TYPE_H264), new SeiReader(output.track(TS_STREAM_TYPE_EIA608)), idrKeyframesOnly); break; case TS_STREAM_TYPE_H265: pesPayloadReader = new H265Reader(output.track(TS_STREAM_TYPE_H265), new SeiReader(output.track(TS_STREAM_TYPE_EIA608))); break; case TS_STREAM_TYPE_ID3: output.endTracks();
extractorOutput.seekMap(SeekMap.UNSEEKABLE); sentSeekMap = true;
extractorOutput.seekMap(SeekMap.UNSEEKABLE); haveOutputSeekMap = true;
if (seeker == null) { setupSeeker(extractorInput, headerPosition); extractorOutput.seekMap(seeker); trackOutput.format(MediaFormat.createAudioFormat(synchronizedHeader.mimeType, MediaFormat.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES, seeker.getDurationUs(),