ffmpeg java 播放视频_Javacv使用ffmpeg实现音视频同步播放

最近用javaCV的ffmpeg包的FFmpegFrameGrabber帧捕捉器对捕捉到的音频帧和视频帧做了同步的播放。采用的同步方法是视频向音频同步。

具体的思路如下:

(1)首先介绍ffmpeg是如何捕捉视频文件的图像和声音的

FFmpegFrameGrabber fg = new FFmpegFrameGrabber("a video file path or a url);

得到帧捕捉器对象后,调用它的grab()方法就会返回捕捉到的Frame对象。这个Frame可以是视频帧或者是音频帧,这是因为音视频帧时按照时间戳在播放时间先上排列的。当然捕捉到的帧都是已经译码过的,并且存储在java.nio.Buffer对象中,对于视频帧,Buffer是储存图像的像素数据比如RGB,然后通过

BufferedImage bi = (new Java2DFrameConverter()).getBufferedImage(f);

就可以得到图片,得到的图片可以进行一系列的处理或者不处理直接显示在swing组件上。对应音频帧,Buffer是储存音频的PCM数据,这个PCM可以是float或者short的,然后用java.sounds.sample里面的sourceDataLine.write方法就可以将这些音频PCM数据写入到扬声器中。

(2)接着介绍如何不断得将得到的帧播放出来。首先是单独播放视频:

while(true)

{

Frame f = fg.grab();

if(f.image!=null)

label.setIcon(new ImageIcon((new Java2DFrameConverter()).getBufferedImage(f)));

Thr

你可能感兴趣的:(ffmpeg,java,播放视频)