1

Ich muss eine App implementieren, wo Video auf Video-Ansicht angezeigt wird. Der Benutzer wählt einen bestimmten Bereich von Bildern aus dem Video aus und verlangsamt die Bildgeschwindigkeit. Grundsätzlich bin ich damit fertig, Frames von Videos zu zeigen und der Benutzer kann auch Frames auswählen. Als nächstes weiß ich nicht, wie man die Audio- und Videogeschwindigkeit der ausgewählten Gruppe von Bildern verlangsamt.langsame Geschwindigkeit bestimmter Frames von Video in Android-Projekt

Antwort

0

Mit Vitamio Api Video-Verlangsamung (Wiedergabe von Video mit Änderung der Wiedergabegeschwindigkeit) durchgeführt werden. Zu Testzwecken kann der Benutzer die Vitamio-Probe verwenden, die auf GitHub Vitamio android sample verfügbar ist. Oder Sie können die Klasse MediaPlayerDemo_Video in vitamio sample hinzufügen, um das Video zu verlangsamen.

Hier ist ein Code für 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(); 
    } 
} 

Layout-Code

<?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>