MediaMetadataRetrieverを使用して、ビデオからイメージをイメージ ビューに設定しようとしています。
シークバーを移動するたびに、フレームを取得して表示しようとしています
mediaMetadataRetriever.getFrameAtTime((int)(33*10),MediaMetadataRetriever.OPTION_CLOSEST);
初めてうまくいきましたが、シークバーの進行状況を使用してもう一度試してみると、うまくいきません。以下は私のコードです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
seekBar1 = (SeekBar)findViewById(R.id.seekBar1);
imageView1 = (ImageView)findViewById(R.id.imageView1);
File sdcard = Environment.getExternalStorageDirectory();
file = new File(sdcard,"VID_20130922_130050.mp4");
retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(file.getAbsolutePath());
Log.v("", "");
Bitmap bitmap = retriever.getFrameAtTime((int)(33*10),MediaMetadataRetriever.OPTION_CLOSEST);
imageView1.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 480, 320, false));
bitmap.recycle();
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (RuntimeException ex) {
ex.printStackTrace();
}
seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
String[] params =null;;
if(progress >0)
setImage(progress);
}
});
}
public void setImage(int progress){
Bitmap bitmap = retriever.getFrameAtTime((int)(33*progress),MediaMetadataRetriever.OPTION_CLOSEST);
imageView1.setImageBitmap(Bitmap.createScaledBitmap(bitmap, 480, 320, false));
}
編集
質問をよりよく説明するためにスクリーンショットを追加します。ここでは、フレーム、videoView、または mediaPlayer に応じて複数の画像のみが必要です。