大佬教程收集整理的这篇文章主要介绍了如何在播放另一个VideoView B时预播视频视频 – Android,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>我有两个VideoView实例.
>在给定时间只会显示一个VideoView,占据手机的整个屏幕.
>目的是在从VideoView A和VideoView B切换时减少“黑屏”.
>该应用程序一个接一个地播放视频列表.
下面的代码抓取每个玩家的MediaPlayer的引用.当MediaPlayer A开始渲染时,MediaPlayer B将调用stop(),release(),setDatasource(url),prepareAsync().当MediaPlayer A完成时,Media Player B将调用start().
public class PrebufferingActivity extends Activity { private VideoView player1; private VideoView player2; private MediaPlayer mediaPlayer1; private MediaPlayer mediaPlayer2; public static final String URL_1 = "sample1.mp4"; public static final String URL_2 = "sample2.mp4"; public Boolean first_time = true; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_prebuffering); player1 = (VideoView) findViewById(R.id.videoPlayer1); player2 = (VideoView) findViewById(R.id.videoPlayer2); player1.setOnTouchListener(new OnTouchListener(){ @Override public Boolean onTouch(View v,MotionEvent event) { // TODO Auto-generated method stub return false; } }); player2.setOnTouchListener(new OnTouchListener(){ @Override public Boolean onTouch(View v,MotionEvent event) { // TODO Auto-generated method stub return false; } }); player1.setOnCompletionListener(new OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { mediaPlayer2.start(); // Toggle visibility. Player1 is completed. Hide Player1. Show Player2. player2.setVisibility(View.VISIBLE); player1.setVisibility(View.INVISIBLE); } }); player1.setOnInfoListener(new OnInfoListener(){ @Override public Boolean onInfo(MediaPlayer mp,int what,int extra) { if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { mediaPlayer2.stop(); mediaPlayer2.release(); try { mediaPlayer2.setDatasource(URL_2); mediaPlayer2.prepareAsync(); } catch (Exception E) { e.printStackTrace(); } } return false; } }); player1.setOnPreparedListener(new OnPreparedListener(){ @Override public void onPrepared(MediaPlayer mp) { mediaPlayer1 = mp; if(first_time == truE) { mediaPlayer1.start(); player1.requestFocus(); first_time = false; } } }); player2.setOnCompletionListener(new OnCompletionListener(){ @Override public void onCompletion(MediaPlayer mp) { mediaPlayer1.start(); player1.requestFocus(); // Toggle visibility. Player2 is completed. Hide Player2. Show Player1. player1.setVisibility(View.VISIBLE); player2.setVisibility(View.INVISIBLE); } }); player2.setOnInfoListener(new OnInfoListener(){ @Override public Boolean onInfo(MediaPlayer mp,int extra) { if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) { // Prepare Player 2 mediaPlayer1.stop(); mediaPlayer1.release(); try { mediaPlayer1.setDatasource(PrebufferingActivity.URL_1); mediaPlayer1.prepareAsync(); } catch (Exception E) { e.printStackTrace(); } } return false; } }); player2.setOnPreparedListener(new OnPreparedListener(){ @Override public void onPrepared(MediaPlayer mp) { mediaPlayer2 = mp; } }); // Player 1 player1.setMediaController(new MediaController(this)); player1.setVideoURI(Uri.parse(URL_1)); // Player 2 player2.setMediaController(new MediaController(this)); player2.setVideoURI(Uri.parse(URL_2)); }
编辑
我做了类似的事情,但实际上我使用的是SurfaceView.要处理另一个流,只需创建另@L_136_3@mediaPlayer实例.以下示例将创建两个MediaPlayer实例并缓冲第一个视频.在准备好第一个视频后,第二个视频将被异步缓冲.然后将第@L_136_3@mediaPlayer绑定到SurfaceView,并启动第一个视频.当第一个视频播放完毕后,将释放相应的R_388_11845@ediaPlayer实例,附加辅助实例,并自动启动第二个视频.以下示例代码已经过测试并且工作正常:
public class StreamingActivity extends Activity implements SurfaceHolder.CallBACk,MediaPlayer.onPreparedListener,MediaPlayer.onCompletionListener { MediaPlayer mediaPlayerPriMary; MediaPlayer mediaPlayerSecondary; SurfaceHolder surfaceHolder; SurfaceView surfaceView; String videosourcePriMary = "videosourcePriMaryURL"; String videosourceSecondary = "videosourceSecondaryURL"; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.streaming_activity_layout); /** Create SurfaceView */ surfaceView = (SurfaceView) findViewById(R.id.surface_view); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallBACk(this); } @Override public void surfaceCreated(SurfaceHolder arg0) { try { /** Create MediaPlayer(s) */ mediaPlayerPriMary = new MediaPlayer(); mediaPlayerSecondary = new MediaPlayer(); /** Attach priMary MediaPlayer to SurfaceView */ mediaPlayerPriMary.setDisplay(surfaceHolder); /** Set sources */ mediaPlayerPriMary.setDatasource(videosourcePriMary); mediaPlayerSecondary.setDatasource(videosourceSecondary); /** Prepare MediaPlayer(s) */ mediaPlayerPriMary.prepare(); mediaPlayerSecondary.prepareAsync(); /** Set listeners */ mediaPlayerPriMary.setOnPreparedListener(this); mediaPlayerPriMary.setOnCompletionListener(this); mediaPlayerSecondary.setOnPreparedListener(this); mediaPlayerSecondary.setOnCompletionListener(this); /** Set audio stream type */ mediaPlayerPriMary.setAudioStreamType(Au@L_332_26@manager.STREAM_MUSIC); mediaPlayerSecondary.setAudioStreamType(Au@L_332_26@manager.STREAM_MUSIC); } catch (Exception E) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder arg0,int arg1,int arg2,int arg3) { } @Override public void surfaceDestroyed(SurfaceHolder arg0) { } @Override public void onPrepared(MediaPlayer mp) { if (mp == mediaPlayerPriMary) { /** First video ready,start playBACk */ mediaPlayerPriMary.start(); } else if (mp == mediaPlayerSecondary) { /** Second video is ready */ } } @Override public void onCompletion(MediaPlayer mp) { /** First video is completed,start second video */ mediaPlayerPriMary.release(); mediaPlayerSecondary.setDisplay(surfaceHolder); mediaPlayerSecondary.start(); } @Override public Boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.streaming_activity_menu,menu); return true; } @Override public Boolean onOptionsItemSELEcted(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button,so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_setTings) { return true; } return super.onOptionsItemSELEcted(item); } }
以上是大佬教程为你收集整理的如何在播放另一个VideoView B时预播视频视频 – Android全部内容,希望文章能够帮你解决如何在播放另一个VideoView B时预播视频视频 – Android所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。