在我的应用程序中,我有许多短(1-2秒)电影存储在外部存储。一个活动显示这些视频。问题是,当我创建活动一切都很好。但是当我重放电影或换电影时,有时会出现黑屏(视频开始时)。但当视频是1-2秒时,这是不可接受的),只有音频。
一些帖子建议使用AsyncTask播放视频。不幸的是,它没有帮助。
由于视频播放总是在活动创建中工作,所以当用户想要重播或更改视频时,我做了一些重新加载整个活动的实验。在快速视频(活动)更改"无法播放视频"消息时显示。
也许它与android外部内存管理有关?有人知道我哪里做错了吗?
我使用的代码:
//on button click
public void navigateToNext(View view) {
setNextVideo();
refreshPlayer();
}
public void play(View view) {
refreshPlayer();
}
public void refreshPlayer(){
if(playingTask != null && !playingTask.isCancelled()){
playingTask.cancel(false);
}
initPlayingTask();
}
private void initPlayingTask() {
playingTask = new AsyncTask(){
@Override
protected void onPreExecute() {
super.onPreExecute();
String videoPath = getActualVideoPath();
videoView.setVideoPath(videoPath);
videoView.requestFocus();
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
}
@Override
protected Object doInBackground(Object... params) {
while(!this.isCancelled() && videoView.isPlaying());
return null;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
}
};
playingTask.execute();
}
我尝试使用mediaplayer和surface。试图缓存其他媒体播放器(准备下一个视频的媒体播放器,所以当我不想播放它时,我只是改变播放器)。似乎什么都没用。
视频格式为mp4。
只是替换你的mp.start() -> videoView.start();在你的onPrepared或你也可以尝试不实现onPreparedListener
videoView.setVideoPath(videoPath);
videoView.requestFocus();
使用:
videoView.start(); // As you are using mediaplayer to start that's why it's only playing sound with black screen
OR
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared() {
videoView.start(); // As you are using mediaplayer to start that's why it's only playing sound with black screen
}
});
希望它对你有用!!