2014-02-07 54 views
2

我正在開發一個與「視頻拼貼」相關的應用程序,該用戶可以在單個佈局文件中播放多個視頻。爲此,我使用視頻觀看來播放視頻。但問題是用戶點擊保存按鈕佈局文件被轉換並保存爲SD卡中的視頻文件。如果用戶打開保存的文件,它會播放多個視頻。但我正在使用視頻播放視頻,但視頻視圖無法使用緩存方法保存視頻。如何在Android的單個屏幕中播放多個視頻?

任何人都可以給我一個想法我該怎麼做?

我使用以下代碼在時間播放多個視頻。

public class MainActivity extends Activity { 

String SrcPath = "sdcard/dhoo3.mp4"; 
String SrcPath2 = "sdcard/DCIM/Camera/20140206_124925.mp4"; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final VideoView myVideoView = (VideoView)findViewById(R.id.myvideoview); 
    //myVideoView.setVideoURI(Uri.parse(SrcPath)); 
    myVideoView.setVideoPath(SrcPath); 
    // MediaController mc=new MediaController(getApplicationContext()); 
    // myVideoView.setMediaController(new MediaController(this)); 
    // mc.setAnchorView(myVideoView); 
    //mc.setMediaPlayer(myVideoView); 
    //myVideoView.setMediaController(mc); 

    myVideoView.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      myVideoView.start(); 
      myVideoView.requestFocus(); 
      mp.start(); 


     } 
    }); 


    // myVideoView.start(); 

    final VideoView myVideoView2 = (VideoView)findViewById(R.id.myvideoview2); 
    //myVideoView2.setVideoURI(Uri.parse(SrcPath2)); 
    myVideoView2.setVideoPath(SrcPath2); 
    // myVideoView2.setMediaController(new MediaController(this)); 
    myVideoView2.setOnPreparedListener(new OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 

      myVideoView2.start(); 
      myVideoView2.requestFocus(); 
      mp.start(); 
      mp.setVolume(0f, 0f); 

     } 
    }); 
    // myVideoView2.start(); 
} 
} 
+0

無法理解你的問題... –

+0

@shridutt科塔裏我正在開發相關的視頻拼貼應用程序,在此用戶可以選擇多個視頻並保存該文件,我的應用是類似到「https://play.google.com/store/apps/details?id=com.instavideocollage.android&hl=en」。請給我一個想法,我該怎麼做....在此先感謝 – Somanadh

回答

1

下面的代碼在單個屏幕上播放兩個視頻。我使用了RTSP鏈接。如果網絡不好,您可能會收到錯誤(1,-110),這意味着超時錯誤。表面視圖以線性佈局放置,其寬度與給定的權重相同。

public class MainActivity extends Activity { 

private MediaPlayer mPlayer1; 
private MediaPlayer mPlayer2; 

SurfaceHolder.Callback mCallback1; 
SurfaceHolder.Callback mCallback2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mPlayer1 = new MediaPlayer(); 
    mPlayer2 = new MediaPlayer(); 

    mCallback1 = new SurfaceHolder.Callback() { 
     @Override 
     public void surfaceCreated(SurfaceHolder surfaceHolder) { 
      try { 
       mPlayer1.setDisplay(surfaceHolder); 
       mPlayer1.setDataSource(MainActivity.this, Uri.parse("http://media.rc.rit.edu/grav-screenshots/grav264.video.mp4-ipad.video.mp4")); 
       mPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mediaPlayer) { 
         mPlayer1.start(); 
        } 
       }); 
       mPlayer1.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { 

     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 
      mPlayer1.release(); 
     } 
    }; 

    mCallback2 = new SurfaceHolder.Callback() { 
     @Override 
     public void surfaceCreated(SurfaceHolder surfaceHolder) { 
      try { 
       mPlayer2.setDisplay(surfaceHolder); 
       mPlayer2.setDataSource(MainActivity.this, Uri.parse("http://media.rc.rit.edu/grav-screenshots/grav264.video.mp4-ipad.video.mp4")); 
       mPlayer2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mediaPlayer) { 
         mPlayer2.start(); 
        } 
       }); 
       mPlayer2.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { 

     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder surfaceHolder) { 
      mPlayer2.release(); 
     } 
    }; 

    final SurfaceView surfaceView1 = 
      (SurfaceView)findViewById(R.id.surfaceView1); 
    // Configure the Surface View. 
    surfaceView1.setKeepScreenOn(true); 
    // Configure the Surface Holder and register the callback. 
    SurfaceHolder holder1 = surfaceView1.getHolder(); 
    holder1.addCallback(mCallback1); 
    holder1.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    final SurfaceView surfaceView2 = 
      (SurfaceView)findViewById(R.id.surfaceView2); 
    // Configure the Surface View. 
    surfaceView2.setKeepScreenOn(true); 
    // Configure the Surface Holder and register the callback. 
    SurfaceHolder holder2 = surfaceView2.getHolder(); 
    holder2.addCallback(mCallback2); 
    holder2.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

}

相關問題