xuggler 中编码视频的节奏很高

Encoded video's tempo is high in xuggler

我正在尝试使用 IMediaWriter 将 mp4 转换为 ts。视频编码成功,但节奏非常快。

IContainer container = IContainer.make();
container.open(input, IContainer.Type.READ,null);
mediaReader = ToolFactory.makeReader(container);
mediaReader.setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR);
mediaReader.addListener(new MediaListener());
for(int i=0; i< container.getNumStreams();i++){
    if(container.getStream(i).getStreamCoder().getCodecType() == Type.CODEC_TYPE_VIDEO){
        FRAME_RATE = container.getStream(i).getFrameRate();

    }
    else if(container.getStream(i).getStreamCoder().getCodecType() == Type.CODEC_TYPE_AUDIO){
        sampleRate = container.getStream(i).getStreamCoder().getSampleRate();
    }
}
mediaWriter = ToolFactory.makeWriter(output);
mediaWriter.addVideoStream(0, 0,
          FRAME_RATE,
          640,480);

startTime = System.nanoTime();
while (mediaReader.readPacket() == null) ;
mediaWriter.close();
mediaReader.close();

听众

public void onVideoPicture(IVideoPictureEvent event) {
    mediaWriter.encodeVideo(0,event.getImage(),System.nanoTime()-startTime, TimeUnit.NANOSECONDS);

}

注意:我知道这一点:mediaReader.addListener(mediaWriter)。但是我想像我的代码一样手动转换它。

这个问题我已经解决了,写下答案以供日后参考。问题是视频编码的时间戳。我们需要从 IVideoPictureEvent.

读取时间戳
public void onVideoPicture(IVideoPictureEvent event) {
    mediaWriter.encodeVideo(0,event.getImage(),event.getTimeStamp(TimeUnit.MICROSECONDS).longValue(), TimeUnit.NANOSECONDS);

}