使用Android Exoplayer调整Dash流的音量

3

我正在尝试设置一个SeekBar来控制Exoplayer实例流式传输dash的级别。

我正在使用的设置是演示项目的修改版本,但我很难弄清楚应该尝试影响哪个元素来使用SeekBar的输出,即如何正确地使用MSG_SET_VOLUME等等。任何意见都将不胜感激。

我希望最终的结果是一个应用程序,其中有两个Exoplayer实例都在流式传输dash内容,一个淡入淡出控制器(SeekBar)控制两个播放器的混音(一旦解决了这个问题,如果数学正确的话,应该很容易) 再次感谢大家的帮助!由于我是一个新手,到目前为止我对Exoplayer遇到了一些麻烦!

1个回答

1
如果我正确地阅读了ExoPlayer源代码,那么在准备ExoPlayer实例时,您需要保留对所使用的音频渲染器的引用。
exoPlayer.prepare(audioRenderer);

要更改音量,您需要发送以下消息:
exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0.1f);

首先,您需要传递要更改音量的audioRenderer。其次,您需要定义要发送到渲染器的消息,这是MSG_SET_VOLUME,因为您想影响音频。 最后,您需要传递要将音量设置为的值。在这个例子中,我选择了0.1f,但当然您可以使用任何符合您需要的值。

如果您向用于准备播放的两个MediaCodecAudioTrackRenderers发送消息,则可以影响两个不同的播放音量。因此,您可以向audioRenderer1和audioRenderer2发送两条消息,例如值为0.4f和0.6f,以混合播放。

我自己没有尝试过,但我认为这应该是有效的。

这是原始ExoPlayer代码片段,负责处理MSG_SET_VOLUME消息:

public void handleMessage(int messageType, Object message) throws ExoPlaybackException {
    if (messageType == MSG_SET_VOLUME) {
        audioTrack.setVolume((Float) message);
    } else {
        super.handleMessage(messageType, message);
    }
}

感谢您的输入!这给了我一些线索,但由于我的渲染器和播放器都在不同的类中(如演示所示),所以我遇到了一些问题。我正在使用DashRendererBuilder、Player和Playeractivity类来创建播放器,并且目前将seekbar放在playeractivity类中。无论如何,正如我所说,我是一个初学者,所以这对我来说是很多东西需要消化的,目前进展缓慢! - Max Marshall
你真的需要演示播放器的全部功能吗?如果不需要,你可以尝试构建自己的播放器,并使其更轻便,如果只需要部分功能。我仅使用ExoPlayer来处理标准和加密mp3文件,而且它非常易于管理。 - mismor
是的,我目前正在尽力减少它的大小,因为我正在流式传输Dash内容,所以我正在使用项目的相对较大部分,并在保留功能性的同时逐渐删除其中的内容 :)一旦我将我的rendererbuilders放在与我的播放器相同的活动中,我就能更容易地向两个组件发送消息。这目前非常像牛仔干的活! 但这似乎是我目前最好的选择!再次感谢您的帮助! - Max Marshall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接