2013-04-07 42 views
0

我正在使用Xuggler並嘗試創建一個使用從視頻捕獲的幀的程序。Xuggler:在單獨的線程中捕獲視頻幀

我發現這個代碼:Xuggler: Deocde And Capture Frames

我設法得到它的工作和保存我需要的幀。現在

,我試圖把它融入我的GUI程序在一個單獨的線程保持一切從鎖起來,把抓住的幀。我幾乎只是將所有東西都複製到run方法中。我所做的唯一更改是糾正args文件名。我硬編碼它,並檢查了我的工作程序,以確保它是正確的路徑。

現在,當我嘗試運行框架抓在自己運行的線程代碼,它崩潰。 它似乎在這部分打開文件時崩潰:

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()

它說:「如果當前阻塞方法運行時,當前線程被中斷,方法將返回一個負值。 「

它返回一個負值崩潰之前,所以我想這可能是我的問題。雖然,這是目前我的程序中唯一的額外線程。我的程序只是我要用來顯示內容的一些基本框架和麪板。然後,創建這些之後,我嘗試啓動崩潰的抓取線程。

我不知道如何解決這個問題。有人能指出我正確的方向嗎?謝謝。

編輯:

發現這個帖子後:嗯,我沒有足夠的代表處發佈的第三連桿,因此它可以通過google搜索找到:icontainer.open xuggler用戶

我實現使用另一種需要格式的開放方法打開容器,它似乎工作。現在

,它拋出此異常時,它得到本節:

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這樣的格式表示讓類「猜測」格式。

雖然都拋出了相同的異常,所以我不知道該從哪裏走。我仍然在尋找。

回答

0

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

+0

這只是一個線程,但我也試過。它在輪胎打開容器時仍然崩潰,並以不利的結果退出。 – Lucas 2013-04-07 13:39:49