gpt4 book ai didi

java - 使用 SwingNode 在 JavaFX 中显示 VlcJ

转载 作者:行者123 更新时间:2023-11-30 03:49:25 25 4
gpt4 key购买 nike

FXMLController初始化方法:

@FXML
private VBox vbContainer;
MediaPlayerVLC m_mediaPlayer;

public void initialize(URL url, ResourceBundle rb) {
final SwingNode swingNode = new SwingNode();

m_mediaPlayer = new MediaPlayerVLC();
createAndSetSwingContent(swingNode, m_mediaPlayer);

vbContainer.getChildren().add(0, swingNode);
}

和createAndSetSwingContent():

private void createAndSetSwingContent(final SwingNode swingNode, JComponent jComponent) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
swingNode.setContent(jComponent);
}
});
}

MediaPlayerVLC 类:

package javafxswing;

import javax.swing.JPanel;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;

public class MediaPlayerVLC extends JPanel {

private final EmbeddedMediaPlayerComponent mediaPlayerComponent;

public MediaPlayerVLC() {

setSize(350, 320);
setVisible(true);
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
mediaPlayerComponent.setSize(350, 320);
add(mediaPlayerComponent);
}

public MediaPlayer getMediaPlayer() {
return mediaPlayerComponent.getMediaPlayer();
}
}

我通过单击 FXMLController 中的按钮来播放媒体:

@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
m_currentVideo = "video.mov";
m_mediaPlayer.getMediaPlayer().playMedia(m_currentVideo);
}

现在,问题是:视频开始播放,但我看不到图像。我说它开始播放是因为我能听到音频。我做错了什么?

非常感谢任何帮助。

最佳答案

简而言之,这样是行不通的。

来自 SwingNode 的 Javdoc:http://docs.oracle.com/javase/8/javafx/api/javafx/embed/swing/SwingNode.html

它部分指出:

The hierarchy of components contained in the JComponent instance should not contain any heavyweight components, otherwise SwingNode may fail to paint it.

对于 vlcj,EmbeddedMediaPlayerComponent 扩展了 Panel(一个重量级 AWT 组件)。

要与 JavaFX 一起使用 vlcj,您可能必须自己直接渲染视频数据。这就是 vlcj 所谓的 DirectMediaPlayerComponent 的用途。这种方法的本质是 DirectMediaPlayerComponent 接收要渲染的每一帧视频数据,然后您可以使用 PixelWriter 或您提出的其他方式自行渲染它与。

这里有一个vlcj-javafx项目https://github.com/caprica/vlcj-javafx ,并且这种方法适用于 Java7。由于错误的线程,它不适用于 Java8,记录如下:https://github.com/caprica/vlcj-javafx/issues/3

关于java - 使用 SwingNode 在 JavaFX 中显示 VlcJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24798120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com