java - 使 VideoView 中的视频静音

标签 java android video-streaming audio-streaming

我正在使用 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);

这在视频被静音时效果很好,但问题是所有流媒体音乐都被静音了,如果我想播放另一个视频(或音频),它也会被静音。

有没有办法只针对要静音的特定流?
谢谢。

最佳答案

在深入研究了我设法找到的每一个可能的信息源之后,我提出了以下解决方案,并认为它可能会在未来造福于其他人:

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 方法,以便可以在类范围之外控制音量,但我只需要公开静音/取消静音。

关于java - 使 VideoView 中的视频静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394876/

相关文章:

android - 如何将来电时的电话铃声静音

video-streaming - 来自 mp4box 的 DASH .mpd 不在 Dash.js 播放器中播放

java - Android:底部导航 View 菜单之间切换的问题

java - iText:PDF 生成。一个模板。更多输入。一个输出

java - 选择java网络框架的建议

android - 使用 ExoPlayer 再现加密视频

java - WebDriver 在一定时间后关闭弹出窗口

Android 解析推送通知在 Marshmallow 中不显示图标

html - 如何播放来自 HTML5 websocket 的视频 block ?

闪存媒体服务器 FMS 3.5 和 IIS 在同一台机器上