java - 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 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 并等待媒体播放器“播放”事件,即使如此,您可能需要等待更长的时间,例如使用在设置/获取音量之前 hibernate 500 毫秒左右。

显然这是一个非常糟糕的解决方案,但不幸的是事实就是这样。

使用 VLC 2.2+,情况会好一些。您现在可以在实际开始播放之前设置/获取音量,但是如果您停止媒体播放器(暂停可以,但不能停止),那么在播放之前您将无法再设置/获取音量再次媒体。

这里的 VLC 论坛上有一个帖子具有相同的结论:

https://forum.videolan.org/viewtopic.php?f=32&t=104345

因此,由于 LibVLC 中存在此问题,vlcj 中也出现了同样的问题,但目前还没有完全令人满意的解决方案。

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

mediaPlayer.playMedia(...);
mediaPlayer.setVolume(0);
mediaPlayer.getVolume();

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

总而言之,目前还没有理想的解决方案,并且可能需要更改 LibVLC,除非您准备好接受次优的解决方法。

顺便说一句,那些“主要 vout 显示错误”消息是无关紧要的。

关于java - vlcj如何控制音量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314622/

相关文章:

java - Selenium WebDriver - 单击“保存”按钮后应用程序变得无响应

java - 当我们在 android 中放大时 ListView 会扩展

java - vlcj3 支持的文件类型列表?

java - 如何为 VLCJ 添加或安装 native x64 库?

java - Android 和 Java 程序之间的 Socket 编程问题

java - RAD6支持JDK6吗

c++ - 执行示例项目时出现 libvlc-qt 错误

python - 如何使用 libVLC 使 VLC 重复整个播放列表而不是仅当前项目?

video - 如何使用 C/C++ 流式传输视频

java - 使用 VLCJ 在 java 中将视频播放器添加到 JPanel