public void finish() throws IOException {

    videoTrack.addSampleEntry(MP4Muxer.videoSampleEntry(imageType, size, ENCODER_NAME));

    // Write MP4 header and finalize recording
    if (af != null) audioTrack.addSampleEntry(MP4Muxer.audioSampleEntry(af));

    muxer.writeHeader();
    NIOUtils.closeQuietly(ch);
  }
예제 #2
0
  private static void addSampleEntry(
      FramesMP4MuxerTrack track, SeqParameterSet[] spss, PictureParameterSet[] ppss) {
    SeqParameterSet sps = spss[0];
    Size size = new Size((sps.pic_width_in_mbs_minus1 + 1) << 4, getPicHeightInMbs(sps) << 4);

    SampleEntry se = MP4Muxer.videoSampleEntry("avc1", size, "JCodec");

    avcC = new AvcCBox(sps.profile_idc, 0, sps.level_idc, write(spss), write(ppss));
    se.add(avcC);
    track.addSampleEntry(se);
  }
  public void addFrame(int width, int height, ByteBuffer buff, long timeScaleFPS, long duration)
      throws IOException {
    if (size == null) {
      size = new Size(width, height);
      videoTrack.addSampleEntry(MP4Muxer.videoSampleEntry(imageType, size, ENCODER_NAME));

      if (af != null) audioTrack.addSampleEntry(MP4Muxer.audioSampleEntry(af));
    }

    // Add packet to video track

    videoTrack.addFrame(
        new MP4Packet(buff, frameNo, timeScaleFPS, duration, frameNo, true, null, frameNo, 0));

    frameNo++;
  }