【问题标题】:Xuggler: Capture video frames in a separate threadXuggler:在单独的线程中捕获视频帧
【发布时间】: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


    【解决方案1】:

    也许你应该使用ExecutorService 来处理线程池。

    【讨论】:

    • 目前只有一个线程,但我也尝试过。当它疲倦地打开容器并以否定结果退出时,它仍然会崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多