2012-09-15 27 views
12

AndroidアプリケーションでVideoViewによる再生動画をミュートしたいとします。 VideoViewクラスでこれを行う方法が見つかりませんでした。 どうすればいいですか?Androidの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(); 


} 
+0

[類似の質問](http://stackoverflow.com/questions/4573667/how-to-mute-mediaplayer-in-android)で提案されているAudioManagerを使用してみてください。 – yorkw

+0

こんにちは、 ミュートモードでビデオを再生したいですか? SO AudioManagerでビデオを再生する方法は? – Vishal

+0

VideoViewを使用すると、AudioManagerコントロールボリュームを使用中にビデオを再生します。 – yorkw

答えて

2

これはMediaPlayerクラスを使用して行っています。 MediaPlayerクラスのsetVolume関数を使用して、ボリュームを0に設定しました。 AudioManagerクラスを使用していないことに気付きました。設定されたボリュームを0にするとMediaPlayerのすべてのインスタンスに対して0に設定され、 VideoView。しかし、MediaPlayerのsetVolume()メソッドを使用すると、そのインスタンスのボリュームだけがミュートされます。

VideoViewはMediaPlayerクラスのラッパーでMediaPlayerの機能にほとんどアクセスできないため、ボリュームを0に設定することも簡単です。 また、私はVideoViewインスタンスを使用してMediaPlayerインスタンスを参照することはできますが、その非常に複雑でそのように推奨されていないブログを読んでいます。 これは他の新しい読者にとっても同様のことをやってみるとよいでしょう。

22

あなたがMediaPlayer.OnPreparedListenerMediaPlayer.OnCompletionListenerを呼び出す必要がありVideoViewMediaPlayerへのアクセスを取得したい場合は、あなたがこれを行う0

にボリュームを設定するMediaPlayer.setVolume(0f, 0f);関数を呼び出すことができます。

@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(); 
      }  
    } 
}; 
+2

この解決策は機能しませんでした –

+0

ときどき働くことがあります。 @ RajiAC - 信頼できる解決策が見つかりましたか? – Jaydev

15
videoview.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 

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

時にはうまく動作しないことがあります。私の推測では、mp.setVolumeが呼び出された時点でvideoViewが見える場合、ミュートが発生します。それ以外の場合は、何も行われません。私が間違っているなら、私を修正してください。 – Jaydev

+0

明らかに、videoViewの読み込み時に発生します –

関連する問題