[英]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.