vlcj-播放前如何更改音频的音量?

进取心

我试过了

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
val result0: Boolean = player.audio().setVolume(50) // result0: true
player.media().play("/path/to/audio.ogg")
val result1: Boolean = player.audio().setVolume(50) // result1: false

和这个

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
val result0 = player.audio().setVolume(50) // result0: true
player.media().prepare("/path/to/audio.ogg")
val result1: Boolean = player.audio().setVolume(50) // result1: false
player.controls().play()
val result2: Boolean = player.audio().setVolume(50) // result2: false

但音量保持在100%。我发现的唯一方法是做这样的事情

val player: MediaPlayer = MediaPlayerFactory("-vvv").mediaPlayers().newMediaPlayer()
player.events().addMediaPlayerEventListener(object : MediaPlayerEventAdapter() {
    override fun mediaPlayerReady(mediaPlayer: MediaPlayer) {
        mediaPlayer.submit {
            mediaPlayer.audio().setVolume(50)
        }
    }
})
player.media().play("/path/to/audio.ogg")

但是解决方案离理想还差得远。由于开始播放,播放了一段时间,然后飞快移动,因此音量已更改。

我尝试了vlcj 4.4.0和4.5.2,VLC 3.0.8和3.0.10,jdk8和14,但是它的工作方式相同。

随想

不幸的是,这在VLC 3.x中不起作用,但是在即将推出的VLC 4.x中却起作用(在编写此答案时,VLC 4仍在开发中)。

以下代码使用从源构建的最新VLC 4和最新的vlcj-5快照为我工作:

import uk.co.caprica.vlcj.player.component.AudioPlayerComponent;
import uk.co.caprica.vlcj.test.VlcjTest;

public class AudioMediaPlayerComponentTest extends VlcjTest {

    public static void main(String[] args) throws Exception {
        String mrl = "/home/music/some-cool-synthwave-tune.mp3";

        AudioPlayerComponent audioMediaPlayerComponent = new AudioPlayerComponent();
        audioMediaPlayerComponent.mediaPlayer().audio().setVolume(5);
        audioMediaPlayerComponent.mediaPlayer().media().play(mrl);

        Thread.currentThread().join();
    }
}

媒体播放器的初始音量来自OS音量设置,实际上OS音量设置是双向链接到媒体播放器的。一处改变音量反映在另一处。

在VLC 4中,通过LibVLC进行卷处理通常看起来要好得多。

如果您停留在目前很合理的VLC 3上,那么不幸的是,您还停留在某种妥协解决方案上,例如使用已经发现的“ ready”事件。

ready事件要做的只是等待第一个位置更改的事件,而该事件是专门为达成此类目的而折衷的。

我测试了可用于媒体播放器的所有本机事件回调,在实际开始播放之前没有任何设置音量的方法。

正如您已经发现的,这使您拥有以下内容:

import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.component.AudioPlayerComponent;
import uk.co.caprica.vlcj.test.VlcjTest;

public class AudioMediaPlayerComponentTest extends VlcjTest {

    public static void main(String[] args) throws Exception {
        String mrl = "/home/music/some-cool-synthwave-tune.mp3";

        AudioPlayerComponent audioMediaPlayerComponent = new AudioPlayerComponent() {
            @Override
            public void mediaPlayerReady(MediaPlayer mediaPlayer) {
                mediaPlayer.audio().setVolume(30);
            }
        };

        audioMediaPlayerComponent.mediaPlayer().media().play(mrl);

        Thread.currentThread().join();
    }
}

一种完全侧向的替代方法可能是播放尽可能短的无声媒体,作为预卷-当该媒体播放完毕(您可以收听结束或停止的事件)后,您应该能够设置音量并播放实际媒体。我没有尝试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vlcj从网址播放视频

来自分类Dev

使用vlcj的RTSP音频流播放速度

来自分类Dev

如何在vlcj中控制音量?

来自分类Dev

如何在vlcj中控制音量?

来自分类Dev

VLCj:如何设置运动模糊?

来自分类Dev

在画布中显示VLCJ播放器

来自分类Dev

在VLCJ播放的视频之上添加JTextField?

来自分类Dev

vlcj全屏视频播放器

来自分类Dev

在画布中显示VLCJ播放器

来自分类Dev

如何检测vlcj中的连接丢失

来自分类Dev

如何旋转放置在JFrame(VLCJ)上的视频?

来自分类Dev

如何使用VLCJ和JavaFX播放视频文件?

来自分类Dev

如何使用vlcj在java中制作视频播放器?

来自分类Dev

VLCJ无法在客户端使用http打开音频流

来自分类Dev

JavaFx中布局更改时如何保持vlcj一致

来自分类Dev

libvlc / vlcj,无需播放视频即可获取视频元数据(音轨数)

来自分类Dev

在JavaFX中将VLCJ媒体播放器添加到画布

来自分类Dev

VLCJ EmbeddedMediaPlayerComponent播放器在准备新视频后仍显示旧视频图像

来自分类Dev

使用vlcj编辑视频

来自分类Dev

用VLCJ缩放

来自分类Dev

在 vlcj 中使用 MouseListener

来自分类Dev

Display VlcJ in JavaFX using SwingNode

来自分类Dev

视频的VLCJ鼠标事件输入

来自分类Dev

VLCJ-从“ res”文件夹播放视频在eclipse中效果很好,但不能从可执行的JAR文件中播放

来自分类Dev

VLCJ-从“ res”文件夹中播放视频在eclipse中效果很好,但不能从可执行的JAR文件中播放

来自分类Dev

如何获得在IOS设备上播放的音乐/音频的音量?

来自分类Dev

更改音频片段的音量

来自分类Dev

使用SwingNode在JavaFX中显示VlcJ

来自分类Dev

VLCJ RTP流客户端