0

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 に応じて複数の画像のみが必要です。

ここに画像の説明を入力

4

2 に答える 2