1

ビデオをビデオビューで表示するアプリを実装する必要があります。ユーザーは、ビデオからフレームの特定の範囲を選択し、そのフレームの速度は遅くなります。基本的に私はビデオのフレームを表示すると、ユーザーはフレームのセットを選択することもできます。次に、選択したフレームセットのオーディオとビデオの速度を遅くする方法がわかりません。アンドロイドプロジェクトの動画から特定のフレームの速度が遅い

答えて

0

Vitamio Apiを使用すると、ビデオスロー(再生速度を変えてビデオを再生する)を実行できます。テスト目的のために、GitHub Vitamio android sampleで利用可能なvitamioサンプルを使用することができます。または、ビデオを遅くするために、vitamioサンプルのMediaPlayerDemo_Video avaialbeクラスを追加できます。ここ

はMediaPlayerDemo_Video

public class MediaPlayerDemo_Video extends Activity implements OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 

    private static final String TAG = "MediaPlayerDemo"; 
    private int mVideoWidth; 
    private int mVideoHeight; 
    private MediaPlayer mMediaPlayer; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    private String path; 
    private Bundle extras; 
    private static final String MEDIA = "media"; 
    private static final int LOCAL_AUDIO = 1; 
    private static final int STREAM_AUDIO = 2; 
    private static final int RESOURCES_AUDIO = 3; 
    private static final int LOCAL_VIDEO = 4; 
    private static final int STREAM_VIDEO = 5; 
    private boolean mIsVideoSizeKnown = false; 
    private boolean mIsVideoReadyToBePlayed = false; 

    /** 
    * 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     if (!LibsChecker.checkVitamioLibs(this)) 
      return; 
     setContentView(R.layout.mediaplayer_2); 
     mPreview = (SurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setFormat(PixelFormat.RGBA_8888); 
     extras = getIntent().getExtras(); 

    } 

    private void playVideo(Integer Media) { 
     doCleanUp(); 
     try { 

      switch (Media) { 
      case LOCAL_VIDEO: 
       /* 
       * TODO: Set the path variable to a local media file path. 
       */ 
       path = ""; 
       if (path == "") { 
        // Tell the user to provide a media file URL. 
        Toast.makeText(MediaPlayerDemo_Video.this, "Please edit MediaPlayerDemo_Video Activity, " + "and set the path variable to your media file path." + " Your media file must be stored on sdcard.", Toast.LENGTH_LONG).show(); 
        return; 
       } 
       break; 
      case STREAM_VIDEO: 
       /* 
       * TODO: Set path variable to progressive streamable mp4 or 
       * 3gpp format URL. Http protocol should be used. 
       * Mediaplayer can only play "progressive streamable 
       * contents" which basically means: 1. the movie atom has to 
       * precede all the media data atoms. 2. The clip has to be 
       * reasonably interleaved. 
       * 
       */ 
       path = ""; 
       if (path == "") { 
        // Tell the user to provide a media file URL. 
        Toast.makeText(MediaPlayerDemo_Video.this, "Please edit MediaPlayerDemo_Video Activity," + " and set the path variable to your media file URL.", Toast.LENGTH_LONG).show(); 
        return; 
       } 

       break; 

      } 

      // Create a new media player and set the listeners 
      mMediaPlayer = new MediaPlayer(this); 
      mMediaPlayer.setDataSource(path); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepareAsync(); 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 
      setVolumeControlStream(AudioManager.STREAM_MUSIC); 

     } catch (Exception e) { 
      Log.e(TAG, "error: " + e.getMessage(), e); 
     } 
    } 

    public void onBufferingUpdate(MediaPlayer arg0, int percent) { 
     // Log.d(TAG, "onBufferingUpdate percent:" + percent); 

    } 

    public void onCompletion(MediaPlayer arg0) { 
     Log.d(TAG, "onCompletion called"); 
    } 

    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
     Log.v(TAG, "onVideoSizeChanged called"); 
     if (width == 0 || height == 0) { 
      Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); 
      return; 
     } 
     mIsVideoSizeKnown = true; 
     mVideoWidth = width; 
     mVideoHeight = height; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void onPrepared(MediaPlayer mediaplayer) { 
     Log.d(TAG, "onPrepared called"); 
     mIsVideoReadyToBePlayed = true; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { 
     Log.d(TAG, "surfaceChanged called"); 

    } 

    public void surfaceDestroyed(SurfaceHolder surfaceholder) { 
     Log.d(TAG, "surfaceDestroyed called"); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     Log.d(TAG, "surfaceCreated called"); 
     playVideo(extras.getInt(MEDIA)); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    private void releaseMediaPlayer() { 
     if (mMediaPlayer != null) { 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
    } 

    private void doCleanUp() { 
     mVideoWidth = 0; 
     mVideoHeight = 0; 
     mIsVideoReadyToBePlayed = false; 
     mIsVideoSizeKnown = false; 
    } 

    private void startVideoPlayback() { 
     Log.v(TAG, "startVideoPlayback"); 
     holder.setFixedSize(mVideoWidth, mVideoHeight); 
     mMediaPlayer.start(); 
    } 
} 

レイアウトコード

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <io.vov.vitamio.widget.CenterLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <SurfaceView 
      android:id="@+id/surface" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" > 
     </SurfaceView> 
    </io.vov.vitamio.widget.CenterLayout> 

</LinearLayout> 
するためのコードであります
関連する問題