当视频刚刚加载或暂停时,它们是完全黑色的(在Android上) [英] When videos are just loaded or paused, they are completely black (on Android)
本文介绍了当视频刚刚加载或暂停时,它们是完全黑色的(在Android上)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这种情况仅在Android上发生。视频在iOS和模拟器上工作正常。
问题是,当我的视频加载到MediaPlayer中时,显示的帧是并保持完全黑色。按下播放后,视频可以正确显示。通过按暂停,可正确显示发生暂停的帧。但是,如果应用程序切换到后台,然后再切换到前台,暂停的视频将恢复为完全黑色。
如何解决此问题?
我的代码的相关部分大致如下:
Media video = MediaManager.createMedia(videoFilePath, true, () -> {
Runnable callback = runOnVideoCompletion.get();
if (callback != null) {
callback.run();
}
});
video.setNativePlayerMode(false);
video.prepare();
MediaPlayer mediaPlayer = new MediaPlayer(video) {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
mediaPlayer.setHideNativeVideoControls(true);
mediaPlayer.setMaximize(false);
mediaPlayer.hideControls();
mediaPlayer.setAutoplay(false);
Container mediaPlayerCnt = new Container(new LayeredLayout(), "NoMarginNoPadding") {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
mediaPlayerCnt.add(mediaPlayer);
[...]
推荐答案
更新:请参阅评论Reduce the impact of videos in memory to prevent crashes,因为有比我在此提出的解决方案更好的方法。
在等待适当的解决方案时,我想出了一个解决办法,似乎可以完美地解决我的Android手机上的问题。
此代码位于为创建每个视频而调用的方法中,因此在form.show()
之前执行,因此在显示表单约半秒后调用UITmer Runnable。
/*
* Workaround for the issue: https://stackoverflow.com/q/66144759
* "video" is a Media instance returned by MediaManager.createMedia
* This workaround is for Android only and it assumes we don't use autoplay
*/
if (form != null && DeviceUtilities.isAndroidNative()) {
UITimer.timer(500, false, form, () -> {
CN.invokeAndBlock(() -> {
video.play();
video.setVolume(0);
while (!video.isPlaying()) {
/*
* When in a scrollable container there are many videos,
* play does not start immediately, but only when the
* video becomes visible, so we must wait.
*/
Util.sleep(100);
}
Util.sleep(100); // extra wait to be sure that the waiting is not zero
video.pause();
video.setVolume(100);
});
form.addShowListener(l -> {
CN.invokeAndBlock(() -> {
video.play();
video.setVolume(0);
while (!video.isPlaying()) {
// same as above
Util.sleep(100);
}
Util.sleep(100); // as above
video.pause();
video.setVolume(100);
});
});
});
}
这篇关于当视频刚刚加载或暂停时,它们是完全黑色的(在Android上)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文