2013-10-28 2 views
3

Привет, я сделал собственное видео, воспроизводимое на андроиде. С некоторыми простыми играми «играть», «пауза», «играть снова» и «захватить». НО я сделал все эти функции, кроме «захвата». много ссылок и googled много, но я не могу найти, как захватить фрейм от запуска видео в android? мой код, как показано ниже: Пожалуйста, помогите мне это:Как захватить кадр из видео в Android?

Main.java

package org.apache.android.media; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.net.URLConnection; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.URLUtil; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.Toast; 

    import android.widget.VideoView; 
    public class VideoViewDemo extends Activity { 
     private static final String TAG = "VideoViewDemo"; 
     private VideoView mVideoView; 
     private EditText mPath; 
     private ImageButton mPlay; 
     private ImageButton mPause; 
     private ImageButton mReset; 
     private ImageButton mStop; 
     private ImageButton mcaptur; 
     private String current; 
     @Override 
     public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.main); 
      mVideoView = (VideoView) findViewById(R.id.surface_view); 
      mPath = (EditText) findViewById(R.id.path); 
      mPath.setText("http://daily3gp.com/vids/747.3gp"); 
      mPlay = (ImageButton) findViewById(R.id.play); 
      mPause = (ImageButton) findViewById(R.id.pause); 
      mReset = (ImageButton) findViewById(R.id.reset); 
      mStop = (ImageButton) findViewById(R.id.stop); 
      mcaptur = (ImageButton) findViewById(R.id.Captur); 
      mPlay.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { 
        playVideo(); 
       } 
      }); 
      mPause.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { 
        if (mVideoView != null) { 
         mVideoView.pause(); 
        } 
       } 
      }); 
      mReset.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { 
        if (mVideoView != null) { 
         mVideoView.seekTo(0); 
        } 
       } 
      }); 
      mStop.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { 
        if (mVideoView != null) { 
         current = null; 
         mVideoView.stopPlayback(); 
        } 
       } 
      }); 
      runOnUiThread(new Runnable() { 
       public void run() { 
        playVideo(); 
       } 
      }); 
      mcaptur.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
       } 
      }); 
     } 
     private void playVideo() { 
      try { 
       final String path = mPath.getText().toString(); 
       Log.v(TAG, "path: " + path); 
       if (path == null || path.length() == 0) { 
        Toast.makeText(VideoViewDemo.this, "File URL/path is empty", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        // If the path has not changed, just start the media player 
        if (path.equals(current) && mVideoView != null) { 
         mVideoView.start(); 
         mVideoView.requestFocus(); 
         return; 
        } 
        current = path; 
        mVideoView.setVideoPath(getDataSource(path)); 
        mVideoView.start(); 
        mVideoView.requestFocus(); 
       } 
      } catch (Exception e) { 
       Log.e(TAG, "error: " + e.getMessage(), e); 
       if (mVideoView != null) { 
        mVideoView.stopPlayback(); 
       } 
      } 
     } 
     private String getDataSource(String path) throws IOException { 
      if (!URLUtil.isNetworkUrl(path)) { 
       return path; 
      } else { 
       URL url = new URL(path); 
       URLConnection cn = url.openConnection(); 
       cn.connect(); 
       InputStream stream = cn.getInputStream(); 
       if (stream == null) 
        throw new RuntimeException("stream is null"); 
       File temp = File.createTempFile("mediaplayertmp", "dat"); 
       temp.deleteOnExit(); 
       String tempPath = temp.getAbsolutePath(); 
       FileOutputStream out = new FileOutputStream(temp); 
       byte buf[] = new byte[128]; 
       do { 
        int numread = stream.read(buf); 
        if (numread <= 0) 
         break; 
        out.write(buf, 0, numread); 
       } while (true); 
       try { 
        stream.close(); 
       } catch (IOException ex) { 
        Log.e(TAG, "error: " + ex.getMessage(), ex); 
       } 
       return tempPath; 
      } 
     } 
    } 
+0

Думаю, вы не можете сделать это с видео. Используйте библиотеку 'open cv', чтобы делать такие вещи. –

+0

вы хотите показать изображение, связанное с этим видео, когда нажимаете кнопку захвата? –

+0

@ AliImran-thanx ali ... но могу ли я получить хорошие ссылки или некоторые вещи? – jigar

ответ

0

вы можете использовать FFmpeg

Обратитесь по ссылке для получения более подробной информации

How to extract images from a Video using FFmpeg

вам нужно запустить эту команду ffmpeg в своей деятельности, чтобы достичь этого

вы можете также площадка видео, обрезать видео, используя FFmpeg

+0

bro..i сделали свой пользовательский видеоплеер и в этом только я должен добавить функцию захвата .. у меня не было вопроса – jigar

3

Вы можете получить видеокадр с MediaMetadataRetriever. Основное использование заключается в следующем.

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 

// Set data source to retriever. 
// From your code, you might want to use your 'String path' here. 
retriever.setDataSource(yourPath); 

// Get a frame in Bitmap by specifying time. 
// Be aware that the parameter must be in "microseconds", not milliseconds. 
Bitmap bitmap = retriever.getFrameAtTime(timeInMicroSeconds); 

// Do something with your bitmap. 

Возможно, вы захотите использовать FFmpegMediaMetadataRetriever для лучшей производительности.

 Смежные вопросы

  • Нет связанных вопросов^_^