@Override public VideoFrameWithPacket getNextVideoFrame() throws IOException { Packet inVideoPacket; while ((inVideoPacket = getNextVideoPacket()) != null) { if (inVideoPacket.getFrameType() == FrameType.UNKNOWN) { detectFrameType(inVideoPacket); } Picture decodedFrame = null; LoanerPicture pixelBuffer = getPixelBuffer(inVideoPacket.getData()); decodedFrame = decodeVideo(inVideoPacket.getData(), pixelBuffer.getPicture()); if (decodedFrame == null) { pixelStore.putBack(pixelBuffer); continue; } frameReorderBuffer.add(new VideoFrameWithPacket(inVideoPacket, new LoanerPicture(decodedFrame, 1))); if (frameReorderBuffer.size() > Transcoder.REORDER_BUFFER_SIZE) { return removeFirstFixDuration(frameReorderBuffer); } } // We don't have any more compressed video packets if (frameReorderBuffer.size() > 0) { return removeFirstFixDuration(frameReorderBuffer); } // We don't have any more compressed video packets and nothing's in // the buffers return null; }
for (int i = 0; pkt != null && i < 150; i++) { videoTrack.addFrame(MP4Packet.createMP4Packet(pkt.getData(), pkt.getPts() - firstPts, pkt.getTimescale(), pkt .getDuration(), pkt.getFrameNo(), pkt.getFrameType(), pkt.getTapeTimecode(), 0, pkt.getPts() - firstPts, 0)); pkt = video.nextFrame();