- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 vlcj MediaPlayer 上添加具有透明背景的 JLabel?
我把源代码放在下面,但它不能正常工作,因为 JLabel 没有设置透明背景。
import com.sun.jna.NativeLibrary;
import javax.swing.*;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
class VideoExample extends JFrame {
private EmbeddedMediaPlayerComponent mediaPlayerComponent;
public VideoExample(String path) {
super("Простой видео плеер");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(640, 480);
//Create JLayeredPane
JLayeredPane mainLayer = new JLayeredPane();
mainLayer.setSize(640,480);
//Create MediaPlayer on background
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
mediaPlayerComponent.setLocation(0, 0);
mediaPlayerComponent.setSize(mainLayer.getSize());
//Create MediaPlayer on foreground
JLabel label = new JLabel("LABEL", JLabel.CENTER);
label.setBounds(100, 100, 200, 100);
label.setOpaque(false);
mainLayer.add(mediaPlayerComponent, JLayeredPane.DEFAULT_LAYER); //add mediaPlayer in DEFAULT_LAYER
mainLayer.add(label, JLayeredPane.PALETTE_LAYER); //add label in PALETTE_LAYER
add(mainLayer); // add JLayeredPane in JFrame
setVisible(true);
mediaPlayerComponent.getMediaPlayer().playMedia(path);
}
public static void main(String[] args) {
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir") + "/lib/vlc64");
final String mrl = "D:\\Candlelight_QT.mov";
new VideoExample(mrl);
}
}
最佳答案
MadProgrammer 是对的。 VLCJ 将 native 视频表面附加到 java.awt.Canvas。您可以使用重写的paint(..) 方法提供自己的Canvas,但这无济于事。这就是 Linux 内部发生的事情 LinuxVideoSurfaceAdapter
:
public void attach(LibVlc libvlc, MediaPlayer mediaPlayer, long componentId) {
Logger.debug("attach(componentId={})", componentId);
libvlc.libvlc_media_player_set_xwindow(mediaPlayer.mediaPlayerInstance(), (int)componentId);
}
final boolean perPixelTranslucencySupported = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().isWindowTranslucencySupported(WindowTranslucency.PERPIXEL_TRANSLUCENT);
mediaPlayerComponent = new EmbeddedMediaPlayerComponent() {
@Override
protected Window onGetOverlay() {
final JWindow transparentWindow = new JWindow();
// Set basic window opacity if required - the window system must support WindowTranslucency (i.e. PERPIXEL_TRANSLUCENT)!
transparentWindow.setOpacity(0.8f);
// White with transparent alpha channel - WindowTranslucency is required for translucency.
transparentWindow.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.0f));
final JLabel superImposedLightweigtLabel = new JLabel("Hello, VLC.", JLabel.CENTER);
superImposedLightweigtLabel.setOpaque(false);
transparentWindow.getContentPane().add(superImposedLightweigtLabel);
return transparentWindow;
}
...
}
mediaPlayerComponent.getMediaPlayer().enableOverlay(true);
关于java - 添加透明 JLabel 顶部 vlcj MediaPlayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16928069/
我试过这个 val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer() val resul
{ String media = "d:\\a.mp4"; String options = formatHttpStream("127.0.0.1", 5555); System.o
我正在使用 VLCJ 库来播放位于某些 Web 服务器上的媒体文件。我遇到的唯一问题是如何获得正确的媒体长度。我尝试解析媒体,但应用程序挂起,如果我在媒体播放器上调用 getLength,它会返回 0
我尝试通过以下方式禁用字幕 mediaPlayer.setSubTitleFile((String)null); mediaPlayer.setSubTitleFile((File)null); 也尝
我正在使用 VLCJ,并且希望使用 mediaPlayer.playMedia(); 保存正在播放的视频剪辑。到我的桌面。我知道这可以通过使用 :sout 字符串设置媒体选项来完成,但我不知道要设置哪
我想在两个不同的 JFrame 中拥有同一视频的两个副本!目前,我已经实现了 2 个视频正在显示,但只有一个视频“集成”到 JFrame 中。据我所读,它还没有完全开发出来,无法与所有副本集成。我错了
我正在尝试编写一个Java程序,它允许一个用户充当服务器并流式传输其桌面(视频和音频),然后其他用户充当客户端并观看其桌面的实时流(类似于Twitch, Webex、Skype 屏幕共享等)。我正在为
请看下面的代码 import com.sun.jna.Native; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vl
我尝试使用 VLCj 来访问网络摄像头。我正在使用这段代码: public static void main(String[] args) { // Create player. Me
如果我直接使用vlcj显示全屏那么就可以了,但是当我最初设置固定大小并稍后将其设置为全屏时它会丢失渲染,代码: panel_canvas=new JPanel(new BorderLayout
我用vlc媒体播放器的vlcj库做了一个视频播放器。 这是我的代码.. public class Player { public static void main(final String[]
我有一个使用 vlcj 播放视频并将 VLC 库打包在 jar 中的 Java 程序。在运行时,VLC 库被提取到用户的家,假设路径 A。指示 vlcj 的此路径的正常方法是通过 jna 方法: Na
我正在使用 vlcj 在应用程序中显示带有 OutOfProcessMediaPlayerComponent 的视频。为此,我将视频 Canvas 添加到未修饰的 JDialog 的内容 Pane 中
我正在尝试让 VLCJ 为从 HTTP 流播放的 mp3 文件做一个可视化工具。当我流式传输视频时就会显示视频。但是当音频播放时,什么也没有发生。 这是我在客户端的代码 EmbeddedMediaPl
这是我使用 VLCJ 的第一天。我从here下载了完整的zip并执行以下操作将其添加到我的 netbeans 项目中。 创建新项目 右键单击 > 属性 在“库”部分选择了 VLCJ 文件夹。 已复制并
我正在开发一个交互式视频播放器,并希望使用 VLCj 3.0.1 动态设置运动模糊。由于EmbeddedMediaPlayer不提供某种setBlur方法,我想我应该使用addMediaOptions
这是我第三次也是最后一次尝试在StackOverflow上提问,我的提问方式非常具体。 我有一个Java应用程序,它将带桌面并使用libx264对其进行编码,然后使用RTMP将其流式传输到twitch
我正在使用 vlcj 创建多个视频面板。对于每个视频窗口,我应该添加代码: factory0 = new MediaPlayerFactory(); mediaPlayer0 = factory0
我正在研究 vlcj,试图运行视频流,这是我在本教程中使用的代码 知道如何解决视频中的这个问题 他使用 JFilechooser但我将其更改为直接设置路径 lectur video 头等舱 /
我想使用 vlcj ( https://github.com/caprica/vlcj ,版本 4.2.0)将音频数据提取到内存。我不想同时播放视频,只需提取音频数据,只要性能允许即可。 现在我正在使
我是一名优秀的程序员,十分优秀!