Dar*_*ppi 7 video android android-videoview
我正在尝试开发一个在一个视频视图中播放多个视频的Android应用程序.当一个完成后,第二个必须启动,依此类推.
我的视频存储在项目的原始文件夹中,以获取我的文件名:
Field[] fields = R.raw.class.getFields();
final List<String> videoNames = new ArrayList<String>() ;
for(Field field: fields){
videoNames.add(field.getName());
}
Run Code Online (Sandbox Code Playgroud)
然后我设置第一个路径到我的视频视图
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(0));
myVideoView.setVideoURI(videoUri);
Run Code Online (Sandbox Code Playgroud)
发挥其他人
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++;
}
}
});
Run Code Online (Sandbox Code Playgroud)
但...
每当我在真实设备中尝试此代码时,我在第一个视频完成时会收到相同的错误"无法播放视频"...
所有的视频都是.mp4文件,用我用于开发的相同设备录制...
有任何想法吗?或其他方式按顺序播放更多视频?我到处寻找解决方案,但我找不到它..
编辑
做到了!!好的..错误是如此愚蠢..谢谢大家的有用答案.
错误发生在我正在寻找的路径上("这些不是你寻找的路径".)
正如我写的,视频存储在原始文件夹中..我正在使用
videoUri = Uri.parse("android.resource://" + MainActivity.ctx.getPackageName() + "/
+ videoNames.get(VideoI));
Run Code Online (Sandbox Code Playgroud)
在路径中添加原始文件夹
videoUri = Uri.parse("android.resource://" + MainActivity.ctx.getPackageName() + "/raw/"
+ videoNames.get(VideoI));
Run Code Online (Sandbox Code Playgroud)
它终于奏效..正如我写的......这是一个愚蠢的..
好吧,你正在收到错误,因为你试图在重新设置视频之前再次初始化视频.像这样对代码进行更改.
myVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
startOtherVid();
}
});
Run Code Online (Sandbox Code Playgroud)
现在制作方法startOtherVid()并在释放前一个视频后初始化视频.
private void startOtherVid(){
myVideoView.stopPlayback();
videoUri = Uri.parse("android.resource://" + getActivity().getPackageName() + "/"
+ videoNames.get(VideoI));
myVideoView.setVideoURI(videoUri);
myVideoView.start();
....
.....
}
Run Code Online (Sandbox Code Playgroud)
这样您将释放一个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();}
});
Run Code Online (Sandbox Code Playgroud)
干杯.:)
尝试类似的东西 - 它对我来说很完美.
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();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10014 次 |
| 最近记录: |