【发布时间】:2013-04-07 04:54:54
【问题描述】:
我正在与 Xuggler 合作并尝试创建一个使用从视频中捕获的帧的程序。
我找到了这个代码:Xuggler: Deocde And Capture Frames
我设法让它工作并保存了我需要的帧。
现在,我正在尝试将它集成到我的 GUI 程序中的一个单独线程上,以防止在抓取帧时所有内容都被锁定。我几乎只是将 main 中的所有内容复制到 run 方法中。我所做的唯一更改是更正 args 文件名。我对其进行了硬编码,并检查了我的工作程序以确保它是正确的路径。
现在,当我尝试在自己的 Runnable 线程中运行帧抓取代码时,它会崩溃。 打开文件时似乎在此部分崩溃:
IContainer container = IContainer.make();
if (container.open(filename, IContainer.Type.READ, null) < 0)
throw new IllegalArgumentException("could not open file: " + filename);
在对 Xuggler 站点进行了一些研究之后,我在这里查看了 IContainer 文件的打开方法:Xuggler: IContainer API open()
它说“如果当前线程在此阻塞方法运行时被中断,该方法将返回负值。 “
它在崩溃之前确实返回了一个负值,所以我认为这可能是我的问题。不过,这是我的程序中当前运行的唯一额外线程。我的程序只是一些用于显示内容的基本框架和面板。然后,在创建这些之后,我尝试启动崩溃的帧抓取线程。
我不知道如何解决这个问题。有人能指出我正确的方向吗?谢谢。
编辑:
找到这个帖子后:嗯,我没有足够的代表来发布第三个链接,所以可以通过谷歌搜索找到:icontainer.open xuggler-users
我使用另一种需要格式的打开方法实现了打开容器,它似乎可以工作。
现在,当它到达这个部分时,它会抛出这个异常:
resampler = IVideoResampler.make(
videoCoder.getWidth(), videoCoder.getHeight(), IPixelFormat.Type.BGR24,
videoCoder.getWidth(), videoCoder.getHeight(), videoCoder.getPixelType());
if (resampler == null)
throw new RuntimeException(
"could not create color space resampler for: " + filename);
我尝试通过设置自己的 IFormat 来打开它:
IContainerFormat format = IContainerFormat.make();
format.setInputFormat("mp4");
我尝试使用 null 作为 API 所说的格式让类“猜测”格式。
虽然两者都抛出相同的异常,所以我不确定从这里去哪里。不过我还在寻找。
【问题讨论】:
标签: java multithreading swing xuggler