Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何控制vlcj中的音量?_Java_Libvlc_Vlcj - Fatal编程技术网

Java 如何控制vlcj中的音量?

Java 如何控制vlcj中的音量?,java,libvlc,vlcj,Java,Libvlc,Vlcj,我正在使用vlcj为我的学院创建一个项目。这是我的密码 public class MediaPlayerUI extends JFrame { /** * */ private static final long serialVersionUID = 1L; public static EmbeddedMediaPlayer mediaPlayer; public static FullScreenStrategy fullScreenStrategy; public MediaPlaye

我正在使用vlcj为我的学院创建一个项目。这是我的密码

public class MediaPlayerUI extends JFrame {
/**
 * 
 */
private static final long serialVersionUID = 1L;
public static EmbeddedMediaPlayer mediaPlayer;
public static FullScreenStrategy fullScreenStrategy;
public MediaPlayerUI(String title) {
    super(title);
    // finding native library of vlc player
    new NativeDiscovery().discover();

    //setting a layout
    setLayout(new BorderLayout());

    //setting up mediaplayer components
    String[] libvlcArgs = {};
    MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(libvlcArgs);

    mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer(fullScreenStrategy);

    //creating swing Components
    Canvas canvas = new Canvas();

    //setting up the video surface
    CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
    mediaPlayer.setVideoSurface(videoSurface);

    //adding swing components to contant pane
    Container UIContainer = getContentPane();
    UIContainer.add(canvas,BorderLayout.CENTER);

}

}
还有这个

     package andromedia;

import javax.swing.JFrame;

import uk.co.caprica.vlcj.player.embedded.DefaultFullScreenStrategy;

public class MainPlayer {

public static void main(String args[])
{
    JFrame mainFrame = new MediaPlayerUI("AndroMedia");
    mainFrame.setVisible(true);
    mainFrame.setSize(500,500);
    mainFrame.setDefaultCloseOperation(3);
    MediaPlayerUI.fullScreenStrategy = new     DefaultFullScreenStrategy(mainFrame);  
    MediaPlayerUI.mediaPlayer.playMedia("E:\\Media\\flash.mp4","Volume=0");
    MediaPlayerUI.mediaPlayer.setVolume(0);
    System.out.println(MediaPlayerUI.mediaPlayer.getVolume());
}


}
我不能控制音量 打印当前卷时,我得到值“-1”

我得到以下运行时错误

 -1
 [000000000d670bd0] main vout display error: Failed to set on top
 [000000000d670bd0] main vout display error: Failed to resize display
任何帮助都将不胜感激


谢谢。

最新版本的VLC的卷有点问题。在旧版本的VLC中没有问题

在2.1中,在媒体播放实际开始之前,根本无法设置/获取音量。正如您所描述的,您得到的值为“-1”

因此,您必须找到其他方法,例如使用
MediaPlayerEventListener
并等待媒体播放器“播放”事件,即使如此,您也可能需要等待稍长一点的时间,例如,在设置/获取音量之前,先睡500毫秒左右

很明显,这是一个非常糟糕的解决方案,但不幸的是,情况就是这样

使用VLC2.2+,情况会稍微好一点。现在,您可以在播放真正开始之前设置/获取音量,但如果您停止媒体播放器(可以暂停,但不能停止),则在再次播放媒体之前,您无法再设置/获取音量

VLC论坛上有一条线索得出了相同的结论:

因此,由于LibVLC中的这个问题,同样的问题出现在vlcj中,但没有完全令人满意的解决方案(目前)

在代码中,可以执行以下操作:

mediaPlayer.playMedia(...);
mediaPlayer.setVolume(0);
mediaPlayer.getVolume();
您需要注意的是,
playMedia
实际上是异步启动媒体播放器的,因此在函数返回时,您尝试立即设置音量,但绝对不能保证媒体已经实际启动,并且由于这个问题,您还无法设置/获取音量

总而言之,目前还没有理想的解决方案,除非您准备使用次优的解决方案,否则可能需要更改LibVLC


顺便说一句,那些“main vout display error”消息是不相关的。

首先尝试在事件调度线程的上下文中初始化UI好的,好的,我很高兴它能工作,但实际上这是一个非常糟糕的解决方案。希望在未来版本的LibVLC/vlcj中,这可以更好地工作。