视频无法循环播放或重复播放 (vlcj-java)



我在java程序中使用vlcj。我需要反复播放视频。我使用过setRepeat(true(;但这对我不起作用。还有其他可以循环播放视频的吗?还是我做错了?请帮帮我。非常感谢。

public QueueMonitor() {

initComponents();

//VIDEO
chargerLibrairie();
Canvas c = new Canvas();
panel.add(c);
MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
//Create a media player instance
EmbeddedMediaPlayer mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));

mediaPlayer.playMedia("Ospital1.mp4");
mediaPlayer.setRepeat(true);
mediaPlayer.setPlaySubItems(true);

}

public static void chargerLibrairie(){
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC");
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
LibXUtil.initialise();
}

此外,我如何在程序运行时设置一些功能,如暂停、播放、降低音量?就像一个普通的视频播放器能够做到的那样。

以下是一些如何使用vlcj进行重复播放的最小示例。

对于当前版本的vlcj、4.x及更高版本:

// vlcj 4.x+
public class RepeatPlayer {
public static void main(String[] args) throws Exception {
String mrl = "some-cool-video.mp3";
EmbeddedMediaPlayerComponent mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
JFrame f = new JFrame("Repeat Player");
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
}
});
f.setContentPane(mediaPlayerComponent);
f.setVisible(true);
mediaPlayerComponent.mediaPlayer().controls().setRepeat(true);
mediaPlayerComponent.mediaPlayer().media().play(mrl);
Thread.currentThread().join();
}
}

由于看起来你使用的是一个古老版本的vlcj,这就是以前的做法:

// vlcj 3.12.1
public class RepeatPlayer {
public static void main(String[] args) throws Exception {
String mrl = "some-cool-video.mp3";
final EmbeddedMediaPlayerComponent mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
JFrame f = new JFrame("Repeat Player");
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
}
});
f.setContentPane(mediaPlayerComponent);
f.setVisible(true);
mediaPlayerComponent.getMediaPlayer().setRepeat(true);
mediaPlayerComponent.getMediaPlayer().playMedia(mrl);
Thread.currentThread().join();
}
}

因此,最初问题中的代码大致正确,至少在重复播放功能方面是正确的。原始代码最可能的问题是,由于未能保存对象引用,媒体播放器被垃圾收集。

public class Video extends javax.swing.JPanel
{
private EmbeddedMediaPlayerComponent video;
private EmbeddedMediaPlayer mediaPlayer;

public Video()
{
initComponents();
initVideo();
}
private void initVideo()
{
video = new EmbeddedMediaPlayerComponent()
{
@Override
public void finished(MediaPlayer mediaPlayer)
{
super.finished(mediaPlayer);
System.out.println("FINISHED");
new Thread(() -> {
System.gc();
mediaPlayer.controls().setTime(0);
mediaPlayer.controls().play();
}).start();
}
};
mediaPlayer = video.mediaPlayer();
mediaPlayer.input().enableKeyInputHandling(false);
mediaPlayer.input().enableMouseInputHandling(false);
add(video, BorderLayout.CENTER);
}
public void start(String path)
{
mediaPlayer.media().prepare(path);
mediaPlayer.controls().play();
}
public void stop()
{
mediaPlayer.controls().stop();
mediaPlayer.release();
video.release();
}
@SuppressWarnings("unchecked")
private void initComponents()
{
setLayout(new java.awt.BorderLayout());
}
}

最新更新