【问题标题】:Mute a playing video by VideoView in Android Application在 Android 应用程序中通过 VideoView 将正在播放的视频静音
【发布时间】:2012-09-15 06:59:07
【问题描述】:

我想在我的 Android 应用程序中通过 VideoView 将正在播放的视频静音。 我在 VideoView 类中找不到任何方法。 知道怎么做吗?

我在 MediaPlayer 类中找到了一个方法“setVolume”,但我找不到任何工作代码来通过 MediaPlayer 类播放视频。 所以我相信我可以通过这种方法设置音量0。

因此,我正在寻找任何工作代码来使用 MediaPlayer 类播放视频或如何使用 VideoView 类控制音量。

下面是我正在使用的 VideoView 播放视频的代码。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video);

    VideoView videoView = (VideoView)this.findViewById(R.id.VVSimpleVideo);
    MediaController mc = new MediaController(this);
    mc.setAnchorView(videoView);
    mc.setMediaPlayer(videoView);
    videoView.setMediaController(mc);
    String _path = "/mnt/sdcard/Movies/video5.mp4";

    videoView.setVideoPath(_path);

    videoView.requestFocus();
    videoView.start();


}

【问题讨论】:

  • 尝试使用this similar question中建议的AudioManager。
  • 嗨,yorkw,我想在静音模式下播放视频。那么如何使用 AudioManager 播放视频?
  • 使用VideoView播放视频,同时使用AudioManager控制音量。
  • 谢谢。它的工作。顺便说一句,现在我想用这个静音视频播放其他音乐。那怎么可能呢?
  • 实际上当我通过 AudioManager 将视频的音量设置为 0 时。它将我正在播放的另一首歌曲的音量设置为 0。任何想法都可以做到这一点。即使用我的 Android 应用程序在后台播放带有其他歌曲的视频(静音)。

标签: android video


【解决方案1】:

如果你想访问VideoViewMediaPlayer,你必须调用MediaPlayer.OnPreparedListenerMediaPlayer.OnCompletionListener,然后你可以调用MediaPlayer.setVolume(0f, 0f);函数将音量设置为0。

这样做:

@Override

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_video);

  VideoView videoView = (VideoView)this.findViewById(R.id.VVSimpleVideo);
  MediaController mc = new MediaController(this);
  mc.setAnchorView(videoView);
  mc.setMediaPlayer(videoView);
  videoView.setMediaController(mc);
  String _path = "/mnt/sdcard/Movies/video5.mp4";

  videoView.setVideoPath(_path);
  videoView.setOnPreparedListener(PreparedListener);

  videoView.requestFocus();

  //Dont start your video here
  //videoView.start();


}

MediaPlayer.OnPreparedListener PreparedListener = new MediaPlayer.OnPreparedListener(){

     @Override
     public void onPrepared(MediaPlayer m) {
         try {
                if (m.isPlaying()) {
                    m.stop();
                    m.release();
                    m = new MediaPlayer();
                }
                m.setVolume(0f, 0f);
                m.setLooping(false);
                m.start();
            } catch (Exception e) {
                e.printStackTrace();
            }    
     }
 };

【讨论】:

  • 有时有效,有时无效。 @RajiAC - 找到任何可靠的解决方案?
【解决方案2】:
videoview.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {

            mp.setVolume(0, 0);
        }
    });

【讨论】:

  • 有时有效,有时无效。我的猜测是,如果 videoView 在调用 mp.setVolume 时可见,则会发生静音。否则,不会发生任何动作。如果我错了,请纠正我。
  • 显然它发生在加载videoView的时候
  • 如果我想以编程方式在播放视频时静音怎么办?
【解决方案3】:

我已经使用 MediaPlayer 类完成了这项工作。 我使用 MediaPlayer 类的 setVolume 函数将音量设置为 0。 我也意识到不要使用 AudioManager 类,因为如果使用 AudioManager 将音量设置为 0,那么它会将 MediaPlayer 和 VideoView 的所有实例的音量设置为 0。但是,如果您将使用 MediaPlayer 的 setVolume() 方法,那么它只会静音该实例的音量。

使用 VideoView 将音量设置为 0 也很容易,因为 VideoView 是 MediaPlayer 类的包装器,只允许访问 MediaPlayer 的一些功能。 另外我在一些博客上读到,虽然您可以使用 VideoView 实例引用 MediaPlayer 实例,但它非常复杂,不建议这样做。 希望这对其他新读者如何尝试做类似的事情有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2013-05-18
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多