如何在 android 中的 TextureView 中逐一播放视频?
How to play video one by one in TextureView in android?
我想在 android 中使用纹理视图从我的 sdcard 中一个一个地播放视频。我正在使用 tetureview bcoz ,我想将视频旋转 90 度。所以我可以通过实现 SurfaceTextureListener 接口 .
在设备上播放旋转的视频
这是代码:
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
root = Environment.getExternalStorageDirectory();
ArrayList extList = new ArrayList<String>();
extList.add("mp4");
extList.add("3gp");
extList.add("ts");
extList.add("webm");
extList.add("mkv");
Intent intent = getIntent();
Bundle b = intent.getExtras();
vFiles = b.getStringArrayList("vFiles");
System.out.println("VFiles: " + vFiles);
iterator = vFiles.iterator();
videoPath = root + "/Video/";
if (iterator.hasNext()) {
System.out.println("Inside iterator: .......................................");
String video = videoPath + iterator.next();
mMediaPlayer = new MediaPlayer();
//mMediaPlayer.setDataSource(afd.getFileDescriptor(),
// afd.getStartOffset(), afd.getLength());
mMediaPlayer.setDataSource(video);
System.out.println("After Datasource: " + video);
mMediaPlayer.setSurface(sur);
// mMediaPlayer.setLooping(true);
mMediaPlayer.prepareAsync();
// mMediaPlayer.setOnBufferingUpdateListener((OnBufferingUpdateListener) this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
// Play video when the media source is ready for playback.
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// mediaPlayer.setLooping(true);
mediaPlayer.start();
}
});
}
}
但是通过这段代码,只有一个视频在播放,另一个视频没有播放..我想当一个视频播放完然后播放列表中的第二个视频等等..
我在网上搜索了很多关于这个的...但是没有运气...
谁能帮我解决这个问题?
onSurfaceTextureAvailable
方法不会在 MediaPlayer
对象完成播放时触发,它会在 Surface 纹理准备好使用时触发。
您需要实现MediaPlayer.OnCompletionListener
,播放完成后会触发onCompletion
方法
第一个视频播放完毕后开始播放列表中的下一个视频。
我想在 android 中使用纹理视图从我的 sdcard 中一个一个地播放视频。我正在使用 tetureview bcoz ,我想将视频旋转 90 度。所以我可以通过实现 SurfaceTextureListener 接口 .
在设备上播放旋转的视频这是代码:
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
root = Environment.getExternalStorageDirectory();
ArrayList extList = new ArrayList<String>();
extList.add("mp4");
extList.add("3gp");
extList.add("ts");
extList.add("webm");
extList.add("mkv");
Intent intent = getIntent();
Bundle b = intent.getExtras();
vFiles = b.getStringArrayList("vFiles");
System.out.println("VFiles: " + vFiles);
iterator = vFiles.iterator();
videoPath = root + "/Video/";
if (iterator.hasNext()) {
System.out.println("Inside iterator: .......................................");
String video = videoPath + iterator.next();
mMediaPlayer = new MediaPlayer();
//mMediaPlayer.setDataSource(afd.getFileDescriptor(),
// afd.getStartOffset(), afd.getLength());
mMediaPlayer.setDataSource(video);
System.out.println("After Datasource: " + video);
mMediaPlayer.setSurface(sur);
// mMediaPlayer.setLooping(true);
mMediaPlayer.prepareAsync();
// mMediaPlayer.setOnBufferingUpdateListener((OnBufferingUpdateListener) this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnCompletionListener(this);
// Play video when the media source is ready for playback.
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// mediaPlayer.setLooping(true);
mediaPlayer.start();
}
});
}
}
但是通过这段代码,只有一个视频在播放,另一个视频没有播放..我想当一个视频播放完然后播放列表中的第二个视频等等..
我在网上搜索了很多关于这个的...但是没有运气...
谁能帮我解决这个问题?
onSurfaceTextureAvailable
方法不会在 MediaPlayer
对象完成播放时触发,它会在 Surface 纹理准备好使用时触发。
您需要实现MediaPlayer.OnCompletionListener
,播放完成后会触发onCompletion
方法
第一个视频播放完毕后开始播放列表中的下一个视频。