我目前正在研究可以播放mkv
格式的java媒体播放器。我正在使用VLCJ
,除非我尝试更改无效的音轨,否则一切正常。
这是代码
public class mediaplayer {
private static JFileChooser filechooser = new JFileChooser();
public mediaplayer() {
}
public static void main(String[] args) {
String vlcPath = "", mediaPath = "";
File ourfile;
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
filechooser.showSaveDialog(null);
ourfile = filechooser.getSelectedFile();
mediaPath = ourfile.getAbsolutePath();
EmbeddedMediaPlayerComponent mediacom = new EmbeddedMediaPlayerComponent();
JFrame frame = new JFrame();
frame.setContentPane(mediacom);
frame.add(canvas);
frame.setLocation(100, 100);
frame.setSize(1050, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
MediaPlayer mplayer = mediacom.getMediaPlayer();
mplayer.playMedia(mediaPath);
mplayer.setAudioTrack(1);
}
}
答案 0 :(得分:1)
在vlc 2.0.5之前的libVLC版本中,设置音频轨道的本机API调用被窃听。
使用libVLC 2.0.5中的修复,设置音频轨道可靠地工作,但你不能只假设0..N的简单索引,你不能假设顺序音轨号码 - 你必须通过调用mediaPlayer来枚举音轨.getAudioDescriptions()。返回的TrackDescription对象包含应与mediaPlayer.setAudioTrack()一起使用的音轨标识符。
要禁用音频,您可以选择描述为“禁用”的音轨的音轨标识符。
另请注意,在调用mediaPlayer.playMedia()后,您可能无法立即设置音轨。媒体以异步方式启动,您可能需要等到媒体实际启动和/或在轨道信息可用之前进行了解析。
答案 1 :(得分:0)
6年后
API增长了很多
如果您想停止或选择一个音轨,则可以使用此代码段并对其进行调整,其想法是等待播放器开始使用某个过程,然后切换到所需的功能,在我的情况下是禁用音频
new Thread(
() -> {
try {
while(!empc.mediaPlayer().status().isPlaying())Thread.sleep(500);
empc.mediaPlayer().audio().trackDescriptions().stream()
.filter(td -> td.description().equals("Disable"))
.forEach(t -> empc.mediaPlayer().audio().setTrack(t.id()));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
).start();
empc 是我的媒体播放器实例{为了在播放器组件中提供更高的精度而嵌入一个}