如何在 vlcj 中控制音量?
How to control volume in 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 中,根本不可能 set/get 在 媒体播放实际开始之前 音量。正如您所描述的,您得到的值为“-1”。
所以你必须找到其他方法,比如使用 MediaPlayerEventListener
并等待媒体播放器 "playing" 事件,即使那样你可能需要等待更长的时间,例如使用在 setting/getting 音量之前睡 500 毫秒左右。
显然这是一个非常糟糕的解决方案,但不幸的是,事实就是如此。
使用 VLC 2.2+ 时,情况稍微好一些。你现在可以 set/get播放前的音量实际上已经开始了,但是如果你停止媒体播放器(暂停可以,但不能停止)那么你就不能再set/get 再次播放媒体之前的音量。
这里的 VLC 论坛上有一个主题具有相同的结论:
https://forum.videolan.org/viewtopic.php?f=32&t=104345
因此,由于 LibVLC 中的这个问题,同样的问题出现在 vlcj 中,没有完全令人满意的解决方案(目前)。
在您的代码中,您这样做:
mediaPlayer.playMedia(...);
mediaPlayer.setVolume(0);
mediaPlayer.getVolume();
您需要注意 playMedia
实际上启动媒体播放器 异步 ,因此在函数 returns 时,您尝试设置紧随其后的音量,绝对不能保证媒体已经实际启动,并且由于这个问题,您还不能 set/get 音量。
总而言之,目前还没有理想的解决方案,除非您准备好接受次优的解决方法,否则可能需要更改 LibVLC。
顺便说一下,那些 "main vout display error" 消息是无关紧要的。
我正在使用 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 中,根本不可能 set/get 在 媒体播放实际开始之前 音量。正如您所描述的,您得到的值为“-1”。
所以你必须找到其他方法,比如使用 MediaPlayerEventListener
并等待媒体播放器 "playing" 事件,即使那样你可能需要等待更长的时间,例如使用在 setting/getting 音量之前睡 500 毫秒左右。
显然这是一个非常糟糕的解决方案,但不幸的是,事实就是如此。
使用 VLC 2.2+ 时,情况稍微好一些。你现在可以 set/get播放前的音量实际上已经开始了,但是如果你停止媒体播放器(暂停可以,但不能停止)那么你就不能再set/get 再次播放媒体之前的音量。
这里的 VLC 论坛上有一个主题具有相同的结论:
https://forum.videolan.org/viewtopic.php?f=32&t=104345
因此,由于 LibVLC 中的这个问题,同样的问题出现在 vlcj 中,没有完全令人满意的解决方案(目前)。
在您的代码中,您这样做:
mediaPlayer.playMedia(...);
mediaPlayer.setVolume(0);
mediaPlayer.getVolume();
您需要注意 playMedia
实际上启动媒体播放器 异步 ,因此在函数 returns 时,您尝试设置紧随其后的音量,绝对不能保证媒体已经实际启动,并且由于这个问题,您还不能 set/get 音量。
总而言之,目前还没有理想的解决方案,除非您准备好接受次优的解决方法,否则可能需要更改 LibVLC。
顺便说一下,那些 "main vout display error" 消息是无关紧要的。