当前位置: 首页 > 面试题库 >

尝试将vlcj媒体播放器嵌入JPanel内的WindowsCanvas中

丁正阳
2023-03-14
问题内容

我正在尝试在JPanel中使用vlcj播放视频,但它对我不起作用。我得到的消息异常是“
java.lang.IllegalStateException:视频表面组件必须是可显示的”,这与保持错误消息“组件必须可显示”中的问题相同

包含画布和vlcj播放器的JPanel的代码是这样的:

import javax.swing.JPanel;

import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;

import java.awt.Canvas;
import java.awt.Color;

import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import uk.co.caprica.vlcj.runtime.windows.WindowsCanvas;

public class MyJPanel extends JPanel {
private EmbeddedMediaPlayer player;
private WindowsCanvas canvas;

public MyJPanel() {
    canvas = new WindowsCanvas();
    add(canvas);
    revalidate();
    repaint();

    canvas.setVisible(true);

    MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory();
    player = mediaPlayerFactory.newEmbeddedMediaPlayer();

    CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);

    player.setVideoSurface(videoSurface);
    player.playMedia("v.avi");   // This sentence throws the exception.
}
}

MyJFrame扩展了JFrame,仅包含MyJPanel JPanel。我认为这根本不重要。

import javax.swing.JFrame;

public class MyJFrame extends JFrame {
protected MyJPanel myJPanel;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                MyJFrame frame = new MyJFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public MyJFrame() {
    myJPanel = new myJPanel();
    add(myJPanel);
}   
}

提前致谢。


问题答案:

您试图在将包含画布的框架设置为可见之前播放媒体。您需要将playMedia()调用放在单独的方法中,并在创建整个框架并将其设置为可见 调用它。

编辑:

如果您仍然希望它直接播放,请在创建并显示框架后调用相关方法:

MyJFrame frame = new MyJFrame();
frame.setVisible(true);
frame.startPlaying();

…很显然,您需要startPlaying()在MyJFrame上进行定义,但是随后它应该立即开始播放。您只需要先设置框架可见。



 类似资料:
  • 1367[AWT-EventQueue-0]信息uk.co.caprica.vlcj.binding.libvlcfactory-libvlc:c:\program files\videolan\vlc\libvlc.dll 2061[AWT-EventQueue-0]错误uk.co.caprica.vlcj.player.DefaultMediaPlayer-未能为“SimpleMedia[mr

  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?

  • 1.1.1. 多媒体播放 1.1.1. 多媒体播放 我们事实上对上游芯片厂商自带的播放器方式做了调整。 Amlogic 芯片 BaseCode 我们禁用了芯片厂商的原生代码的 libplayer 包,原因是芯片厂商的播放器是直接使用 ALSA 框架来调用音频播放功能的。 这对我们 RokidOS 平台让多个进程使用音频设备造成阻碍。基于这个因素,我们使用了 RokidOS 开发的媒体播放库 lib

  • 我有一个简单的播放器和录音机。一切都很好,但都有一个问题。我想添加搜索栏来查看播放记录的进度,并使用此搜索栏设置玩家应该播放的位置。我有进步,但没有效果。这是代码: 你知道如何使用seek bar来查看进度和设置记录的位置吗?

  • 这可能不是一个可以接受的问题,但我现在非常绝望。 我需要一个同步java媒体播放器与快速寻找和平衡修改。 脚本: 我有一个javaFX项目,我必须在循环中播放一个非常短(50-100毫秒)的媒体文件。问题是,在重新启动之前,我需要等待一些要求。 简而言之:播放声音- javafx提供了一个我修改过的媒体播放器。 如果有人能为我指出正确的方向(图书馆/我错过的东西),我将不胜感激 ps允许的java

  • 当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误: