10

次のように、VideoView を使用して (YouTube から) ビデオを再生しています。

VideoView video = (ViewView) this.findViewById(R.id.youtube_video);
MediaController controllers = new MediaController(this);
controllers.setAnchorView(video);
video.setMediaController(controllers);

video.setVideoURI(videoUri);
video.start()

ビデオをミュートできるようにしたいのですが、これまでに見つかったのは次のとおりです。

AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);

ビデオがミュートされているという点で問題なく機能しますが、問題は、ストリーミングされたすべての音楽がミュートされていることです。再生したい別のビデオ (またはオーディオ) がある場合は、それもミュートされます。

特定のストリームをミュートするだけの方法はありますか?
ありがとう。

4

4 に答える 4

24

なんとか見つけたあらゆる情報源を掘り下げた後、次の解決策を思いつき、将来他の人に役立つかもしれないと考えました。

public class Player extends VideoView implements OnPreparedListener, OnCompletionListener, OnErrorListener {
    private MediaPlayer mediaPlayer;

    public Player(Context context, AttributeSet attributes) {
        super(context, attributes);

        this.setOnPreparedListener(this);
        this.setOnCompletionListener(this);
        this.setOnErrorListener(this);
    }

    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        this.mediaPlayer = mediaPlayer;
    }

    @Override
    public boolean onError(MediaPlayer mediaPlayer, int what, int extra) { ... }

    @Override
    public void onCompletion(MediaPlayer mediaPlayer) { ... }

    public void mute() {
        this.setVolume(0);
    }

    public void unmute() {
        this.setVolume(100);
    }

    private void setVolume(int amount) {
        final int max = 100;
        final double numerator = max - amount > 0 ? Math.log(max - amount) : 0;
        final float volume = (float) (1 - (numerator / Math.log(max)));

        this.mediaPlayer.setVolume(volume, volume);
    }
}

ミュート/ミュート解除機能を備えたVideoViewのように機能し、私にとってはうまく機能しているようです。クラスのスコープ外でボリュームを制御できるようにsetVolumeメソッドを公開すること
は可能ですが、公開するにはミュート/ミュート解除が必要でした。

于 2012-11-15T13:03:36.063 に答える
0

より簡単な方法があります。これを行うと、ミュート/ミュート解除ボタンが表示されます (これはオーディオとビデオに使用できます)。

//set global variable
//private Button mMuteButton;
//private static int aux = 0;
//private AudioManager mAudioManager;
//set the Mute button on clickListener 

  mMuteButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

            if(aux % 2 == 0){

                mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 100, 0);
                aux++;


            } else {

                mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
                aux++;

            }


        }
    });

}

于 2014-11-06T04:54:25.000 に答える