public RawH264Track(IsoBufferWrapperImpl rawH264) throws IOException { InnerAccessUnit current = new InnerAccessUnit(); InnerAccessUnit previous = new InnerAccessUnit(); NALUnitReader nalUnitReader = new AnnexBNALUnitReader(rawH264); AccessUnitSourceImpl accessUnitSource = new AccessUnitSourceImpl(nalUnitReader); streamParams = accessUnitSource; SliceHeaderReader sliceHeaderReader = new SliceHeaderReader(accessUnitSource); AccessUnit au; long frameNumInGop = 0; while ((au = accessUnitSource.nextAccessUnit()) != null) { // System.err.println("Start AU"); List<IsoBufferWrapper> nals = new LinkedList<IsoBufferWrapper>(); IsoBufferWrapper nalUnitBuffer; while ((nalUnitBuffer = au.nextNALUnit()) != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); new IsoOutputStream(baos).writeUInt32(nalUnitBuffer.size()); nals.add(new IsoBufferWrapperImpl(baos.toByteArray())); nals.add(nalUnitBuffer); NALUnit nalUnit = NALUnit.read(nalUnitBuffer); if (nalUnit.type == NALUnitType.IDR_SLICE || nalUnit.type == NALUnitType.NON_IDR_SLICE || nalUnit.type == NALUnitType.AUX_SLICE || nalUnit.type == NALUnitType.SLICE_PART_A || nalUnit.type == NALUnitType.SLICE_PART_B || nalUnit.type == NALUnitType.SLICE_PART_C) { current.sliceHeaders.add(sliceHeaderReader.read(nalUnit, new CAVLCReader(nalUnitBuffer))); } if (++a % 1000 == 0) { System.err.println(a); } } samples.add(new MultiplexIsoBufferWrapperImpl(nals)); decodedPoc(current, previous); if (current.poc == 0) { frameNumInGop = 0; } System.err.println("cts: " + (current.poc - frameNumInGop * 2)); previous = current; frameNumInGop++; current = new InnerAccessUnit(); } }