编码视频的速度在xuggler中很高

时间:2015-08-15 17:19:31

标签: java 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)。但我想像我的代码一样手动转换它。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题并编写了答案供将来参考。问题是视频编码的时间戳。我们需要从IVideoPictureEvent读取时间戳。

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

}