3

exoplayer ストリーミング ダッシュのインスタンスのレベルを制御するシークバーを設定しようとしています。

私が使用しているセットアップはデモ プロジェクトの修正版であり、シークバー出力でどの要素に影響を与えようとしているのか、つまり MSG_SET_VOLUME を適切に使用する方法などを理解するのに問題があります。

私が探している最終結果は、2 つのプレーヤーのミックスを制御するフェーダー (シークバー) を備えた両方のストリーミング ダッシュ コンテンツを持つ exoplayer の 2 つのインスタンスを持つアプリケーションです (これが理解されれば、数学が正しければ十分に簡単であると思います) ) 繰り返しになりますが、私はこれまで Exoplayer で少し時間を過ごしてきましたが、そのような初心者でした! みんなありがとう!

4

1 に答える 1

1

ExoPlayer のソース コードを正しく読んだ場合、ExoPlayer インスタンスを準備するときに使用する audioRenderers への参照を保持する必要があります。

exoPlayer.prepare(audioRenderer);

音量を変更するには、次のメッセージを送信する必要があります。

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

最初に、音量を変更したい audioRenderer を渡します。次に、オーディオに影響を与えたいので、MSG_SET_VOLUME であるレンダラーに送信するメッセージを定義します。最後に、ボリュームを設定する値を渡します。この例では 0.1f を選択しましたが、もちろん、必要に応じて任意の値を使用できます。

再生の準備に使用した両方の MediaCodecAudioTrackRenderer にメッセージを送信すると、2 つの異なる再生ボリュームに影響を与えることができます。したがって、たとえば、audioRenderer1 の値が 0.4f で、audioRenderer2 の値が 0.6f の 2 つのメッセージを送信して、再生を互いにブレンドすることができます。

私はこれを自分で試していませんが、うまくいくはずです。

これは、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 に答える