我一直在尝试使用处理(3.0.2)作为显示视频的库。你可以在下面看到我的主要课程的开始。我正在使用Maven构建一个在命令行上运行的胖.jar。程序运行,不冻结,可以关闭,但没有视频...(下面的截图)问题是这完全是无声无息地发生的:没有警告,没有崩溃。
我完全确定程序可以找到视频文件,因为删除它会触发RuntimeException
。
编辑:好的,所以找到了文件,但没有找到帧。程序在尝试查找非零帧时卡住。
编辑2:似乎这实际上是一个GStreamer问题。显然,处理不支持GStreamer 1.x世系。按照此处和此处的说明安装 GStreamer 0.1x,不幸的是对我不起作用。
编辑3:尝试使用基本示例(下面的代码),我看到Movie.read()
方法从未被触发,尽管draw()
方法被触发。由于仍然没有错误或警告,我想这是库问题。有趣的是,当从处理 IDE 作为 .pde 执行时,相同的代码可以完美运行,因此那里一定有一个我缺少的库。任何想法??
我的依赖项:
- 核心.jar
- 视频.jar
- 日报.jar
- gstreamer-java.jar
系统:Ubuntu 14.04 LTS,Java HotSpot(TM) 64 位服务器虚拟机(java 版本"1.8.0_77"),处理 3.0.2,通过处理 IDE 安装视频库。
import processing.core.PApplet;
import processing.video.*;
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
image(myMovie.get(), 0, 0);
System.out.println("I'm drawing!");
}
// Called every time a new frame is available to read
void movieEvent(Movie m) {
try{
m.read();
}catch(Exception e){
System.out.println(e.getMessage());
}
System.out.println("new frame!");
}
}
所以,我终于让电影播放了,而且似乎毕竟不是图书馆的问题......由于某种神秘的原因,movieEvent()
不会执行,很可能是因为没有触发任何事件。使用Movie.available()
按如下方式解决:
public class TestMovie extends PApplet{
Movie myMovie;
public static void main(String[] args){
PApplet.main(TestMovie.class.getName());
}
public void settings(){
size(720, 480, FX2D);
}
public void setup() {
//background(0);
try{
myMovie = new Movie(this, "red_45deg_284sec_500ml.mpg");
}catch(Exception e){
System.out.println(e.getMessage());
}
myMovie.loop();
}
public void draw() {
if (myMovie.available()) {
myMovie.read();
}
image(myMovie, 0, 0);
}
}