簡體   English   中英

Xuggler:在單獨的線程中捕獲視頻幀

[英]Xuggler: Capture video frames in a separate thread

我正在與Xuggler合作,並嘗試創建一個使用從視頻捕獲的幀的程序。

我找到了這段代碼: Xuggler:Deocde和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所說的格式,使類“猜測”該格式。

不過,兩者都拋出相同的異常,因此我不確定從這里出發。 我還在搜索。

也許您應該使用ExecutorService來處理線程池。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM