我正在尝试开发一个在一个视频视图中播放多个视频的Android应用程序。当一个完成后,第二个必须开始,依此类推。
我的视频存储在项目的原始文件夹中, 得到他们的文件名:
Field[] fields = R.raw.class.getFields();
final List<String> videoNames = new ArrayList<String>() ;
for(Field field: fields){
videoNames.add(field.getName());
}
然后我将第一个路径设置为我的视频
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(0));
myVideoView.setVideoURI(videoUri);
扮演其他人
myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(VideoI));
myVideoView.setVideoURI(videoUri);
myVideoView.start();
if(VideoI==videoNames.size()-1)
{
VideoI=0;
}
else{
VideoI++;
}
}
});
但是...
每次我在真实设备中尝试此代码时,我都会遇到同样的错误 第一个视频完成后“无法播放视频”......
所有视频都是使用我用于开发的相同设备记录的.mp4文件...
任何想法?或其他方式按顺序播放更多视频? 我到处寻找解决方案,但我找不到它..
修改
DID IT !!好的..这个错误太傻了..谢谢大家的帮助。
错误出现在我正在寻找的路径中(“这些不是您要寻找的途径”。)
正如我写的,视频存储在原始文件夹中.. 我正在使用
videoUri = Uri.parse("android.resource://" + MainActivity.ctx.getPackageName() + "/
+ videoNames.get(VideoI));
在路径中添加原始文件夹
videoUri = Uri.parse("android.resource://" + MainActivity.ctx.getPackageName() + "/raw/"
+ videoNames.get(VideoI));
它终于奏效..正如我写的那样......这真是个傻瓜......
答案 0 :(得分:6)
您正在收到错误,因为您在重置视频之前尝试再次初始化视频。像这样对代码进行更改。
myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
startOtherVid();
}
});
现在制作方法startOtherVid()
并在释放前一个视频后在此处初始化视频。
private void startOtherVid(){
myVideoView.stopPlayback();
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(VideoI));
myVideoView.setVideoURI(videoUri);
myVideoView.start();
....
.....
}
这样您将释放一个videoview对象并再次创建。加载时间很短,但您可以直观地处理它。
修改强>
您还可以发布mediaplayer对象并解决您的问题。
public void onCompletion(MediaPlayer mp) {
try {
mp.reset();
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(VideoI));
myVideoView.setVideoURI(videoUri);
myVideoView.start();
}
catch(Exception e){e.printstacktrace();}
});
干杯:)
答案 1 :(得分:6)
尝试类似的东西 - 它对我来说非常适合。
public class MainActivity extends Activity {
private VideoView videoView = null;
String[] videoArray = {"video1", "video2"};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Uri videoUri = Uri.parse("android.resource://" + MainActivity.this.getPackageName() + "/raw/" + videoArray[0]);
videoView = (VideoView)findViewById(R.id.videoView);
videoView.setVideoURI(videoUri);
videoView.start();
videoView.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp)
{
Uri videoUri = Uri.parse("android.resource://" + MainActivity.this.getPackageName() + "/raw/" + videoArray[1]);
videoView.setVideoURI(videoUri);
videoView.start();
}
});
}
}