java - Android VideoView 长时间运行后冻结(超过 24 小时)
问题描述
我正在制作一个循环播放视频的应用程序。只要设备打开,它就应该永远播放。我在一个变量中有一个视频列表,我使用 index 循环播放每个视频。该应用程序运行良好,但当它在某个点运行多个小时(超过 20 小时)时,videoView 冻结在一个帧上,它不会调用onCompletion
或onError
监听。我在具有 API 17 和 API 19 的设备上运行它。它们都得到相同的错误。这是我的代码(执行播放循环的两种方法):
public void playNextVideo(){
if(playIndex < 0) { playIndex = 0; }
if(allPromos.size() > 0) {
try {
Promo p = allPromos.get(playIndex);
playVideo(p);
} catch (IndexOutOfBoundsException e) {
Log.w("EXCEPTION", e);
isPlaying = false;
} finally {
playIndex++;
if (playIndex >= allPromos.size()) {
playIndex = 0;
}
}
} else {
Log.d("PlayNextVideo", "No videos in the playlist");
}
}
public void playVideo(Promo promo) {
File videoFile = new File(promo.getLocal_link());
if (!videoFile.exists()) {
Log.d("VIDEOPLAYER", "Video " + playIndex + " Has been skipped. File not found");
playNextVideo();
} else {
if (videoView.isPlaying()) {
videoView.stopPlayback();
}
videoView.setVideoPath(promo.getLocal_link());
videoView.requestFocus();
videoView.start();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(false);
}
});
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
videoView.stopPlayback();
playNextVideo();
}
});
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d("MEDIA PLAYER ERROR", what + ", " + extra);
videoView.stopPlayback();
try{
mp.release();
} catch (Exception e) {
Log.w("RELEASE EXCEPTION", e);
}
playNextVideo();
return true;
}
});
}
}
解决方案
推荐阅读
- reactjs - React + AWS Cognito:防止低级用户登录管理仪表板
- python-3.x - scikit-learn 管道中的 TargetEncoder(`from category_encoders`)导致 `GridSearchCV` 索引错误
- javascript - 从手机浏览器在手机上分享whatsapp时面临问题
- hyperledger-fabric - 如何将我们自己在 node.js 中编写的链代码放置在超级账本结构中
- ruby-on-rails - 从两个数据源创建哈希的最优雅方式
- macos - Mac/Linux 命令:从任何地方访问?
- javascript - 正则表达式允许中文或字母字符
- java - 如何编写 Do/While 验证?
- c - 与 OpenGL ES 渲染和 windows 多线程冲突
- angular - 删除方法中的 HTTP 错误无法正常工作