3

我正在尝试设置一个搜索栏来控制 exoplayer 流破折号实例的级别。

我正在使用的设置是演示项目的修改版本,并且无法确定我应该尝试使用搜索栏输出影响哪个元素,即如何正确使用 MSG_SET_VOLUME 等任何输入将不胜感激。

我正在寻找的最终结果是一个具有两个 exoplayer 实例的应用程序,两个实例都使用推子(seekbar)流式传输破折号内容,控制两个播放器的混合(一旦弄清楚,我认为如果数学正确的话应该很容易) 任何帮助都将不胜感激,到目前为止,我在 Exoplayer 上玩了一段时间,还是个新手!多谢你们!

4

1 回答 1

1

如果我正确阅读了 ExoPlayer 源代码,则必须保留对准备 ExoPlayer 实例时使用的音频渲染器的引用。

exoPlayer.prepare(audioRenderer);

要更改音量,您必须发送以下消息:

exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0.1f);

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

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

我自己没有尝试过,但我认为它应该可以工作。

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

public void handleMessage(int messageType, Object message) throws ExoPlaybackException {
    if (messageType == MSG_SET_VOLUME) {
        audioTrack.setVolume((Float) message);
    } else {
        super.handleMessage(messageType, message);
    }
}
于 2015-07-21T13:02:44.230 回答