Processing长时间播放高清视频出现NullPointerException 错误的解决方法

时间:2023-01-31 22:40:25

在processing开发中需要长时间播放视频时,经常会出现NullPointerException错误,可以使用PImage获取Movie中的每一帧图像的方式来替代直接在draw中直接使用Movie播放视频,代码如下:

import processing.video.*;

Movie movie;
PImage movieImage;

void setup() {
size(800, 800);
background(0);
// Load and play the video in a loop
movie = new Movie(this, "bottom.mp4");
movie.loop();
}

// do not use this method - keep it commented out
//void movieEvent(Movie m) {
// m.read();
//}

void draw() {
// I use the synchronization here to avoid multiple calls to draw
// before it finishes

synchronized(this) {
if (movie.available()) {
//loads a new frame
movie.read();
if (movieImage==null) {
// delayed initialization, because until the first frame is read
// the movie object does not now its size
movieImage=createImage(movie.width, movie.height, RGB);
movieImage.loadPixels();
}
movie.loadPixels();
//copies pixels to a PImage
System.arraycopy(movie.pixels, 0, movieImage.pixels, 0, movie.pixels.length);
movieImage.updatePixels();
}
if (movieImage!=null) {
//draw the image/video
image(movieImage, 0, 0, width, height);
}
}
}