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 回答
12

将此代码放入 oncreate() 和 onresume() 以更好地处理视频视图...

  VideoView videoview = (VideoView) findViewById(R.id.videoview);
  videoview.setVideoPath(videopath);
  videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.setVolume(0f, 0f);
                        mp.setLooping(true);
                    }
                });
 videoview.start();
于 2018-01-05T06:54:52.397 回答
1

如果你在 kotlin 中编码,只需使用这行代码

videoView.setOnPreparedListener { video->
            video.setVolume(0f,0f)
        }
于 2022-02-08T08:21:52.693 回答
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 回答