2011-10-26 15 views
4

私はVideoViewを使ってビデオファイルを再生しています。私はそれが中止されている場所からビデオを再生するためにseekTo関数を使用しています。しかし、シーク操作が終了したら、いくつかの操作をしたかったのです。そのためには、onSeekCompleteListenerを使用する必要があります。ただし、onSeekCompleteListenerはVideoViewではサポートされていません。 MediaPlayerで使用できます。私の質問は「VideoViewでonSeekCompleteListenerを使用できる方法はありますか」ということですか?あなたはこのようなイベントをリッスンすることができますandroid:onSeekCompleteListener with VideoView

+0

私は、同じ問題を抱えている - 私は喜んでいますよここまで答えは··· –

+0

残念ながら、onSeekCompleteListenerはVideoViewで使用できません。また、なぜseekTo操作をサポートしている場合、これがVideoViewでサポートされていないのか理解できません。ここでの解決策は、onSeekCompleteListenerをMediaPlayerで使用できるため、VideoViewの代わりにMediaPlayerを使用することです。 VideoViewではなくMediaPlayerを使用して同じ機能を利用できます。これがあなたに役立つことを願っています.. – Farhan

+0

あなたの答えはありがたいですが、私はあなたのオリジナルの質問に答えて書いています。 VideoView –

答えて

9
public class ObservableVideoView extends VideoView 
{ 

private IVideoViewActionListener mVideoViewListener; 
private boolean mIsOnPauseMode = false; 

public interface IVideoViewActionListener 
{ 
    void onPause(); 
    void onResume(); 
    void onTimeBarSeekChanged(int currentTime); 
} 

public void setVideoViewListener(IVideoViewActionListener listener) 
{ 
    mVideoViewListener = listener; 
} 

@Override 
public void pause() 
{ 
    super.pause(); 

    if (mVideoViewListener != null) 
    { 
     mVideoViewListener.onPause(); 
    } 

    mIsOnPauseMode = true; 
} 

@Override 
public void start() 
{ 
    super.start(); 

    if (mIsOnPauseMode) 
    { 
     if (mVideoViewListener != null) 
     { 
      mVideoViewListener.onResume(); 
     } 

     mIsOnPauseMode = false; 
    } 
} 

@Override 
public void seekTo(int msec) 
{ 
    super.seekTo(msec); 

    if (mVideoViewListener != null) 
    { 
     mVideoViewListener.onTimeBarSeekChanged(msec); 
    } 
} 

public ObservableVideoView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 

public ObservableVideoView(Context context) 
{ 
    super(context); 
} 

public ObservableVideoView(Context context, AttributeSet attrs, int defStyle) 
{ 
    super(context, attrs, defStyle); 
} 

}

たくさん

ありがとう:

public class VideoPlayerActivity extends Activity 
{ 
public static final String VIDEO_URL = "VideoUrl"; 
private String path = ""; 
private ObservableVideoView mVideoView; 

@Override 
public void onCreate(Bundle icicle) 
{ 
    super.onCreate(icicle); 
    setContentView(R.layout.video_player_activity_layout); 
    mVideoView = (ObservableVideoView) findViewById(R.id.videoView1); 
    mVideoView.setMediaController(new MediaController(this)); 
    mVideoView.setVideoViewListener(mVideoViewListener); 


    path = getIntent().getStringExtra(VIDEO_URL);  
    if (path == "") 
    { 
     Toast.makeText(this, "Please edit VideoViewDemo Activity, and set path" + " variable to your media file URL/path", Toast.LENGTH_LONG) 
       .show(); 
    } 
    else 
    { 
     mVideoView.setVideoPath(path); 
     mVideoView.requestFocus(); 
     mVideoView.start(); 
    } 
} 

private IVideoViewActionListener mVideoViewListener = new IVideoViewActionListener() 
{ 
    @Override 
    public void onTimeBarSeekChanged(int currentTime) 
    { 
     //TODO what you want 
    } 

    @Override 
    public void onResume() 
    { 
     //TODO what you want 
    } 

    @Override 
    public void onPause() 
    { 
     //TODO what you want 
    } 
}; 

}

1

Farhan、あなたは正しいですが、onSeekCompleteListenerはVideoViewでサポートされていません。

VideoViewクラスをコピーしてローカルにカスタマイズして、このサポートを自分で追加することができます。

my answer to 7990784でこれを行う方法を示します。

17

カスタムを作成する必要はありませんVideoView

あなたはVideoViewonPrepared方法からMediaPlayerにアクセスして、OnSeekCompleteListenerを設定し、このようにすることができます:あなたはあなたの質問に対する解決策を持っている場合

mVideoView.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 

     mp.setOnSeekCompleteListener(new OnSeekCompleteListener() { 
      @Override 
      public void onSeekComplete(MediaPlayer mp) { 
       //TODO: Your code here 
      } 
     }); 

    } 
}); 
+1

は私には役に立たなかった。 'videoView.seekTo()'を使用した後にイベントが発生しなかった – Gibberish

+0

@Gibberishは私たちがあなたを助けることができるようにいくつかのコードを投稿してください –

+0

私はそれを把握することができました。これは機能しますが、それは私の場合は助けになりませんでした。ビデオエンコーディングに応じて、必要な場所を探すことはできません。たとえば、h.264 – Gibberish