0

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 ファイルの open メソッドを調べました: Xuggler: IContainer API open()

「このブロッキング メソッドの実行中に現在のスレッドが中断された場合、メソッドは負の値を返します。「</p>

クラッシュする前に負の値を返すので、これが私の問題かもしれないと思いました。ただし、これは現在私のプログラムで実行されている唯一の余分なスレッドです。私のプログラムは、何かを表示するために使用するいくつかの基本的なフレームとパネルです。次に、それらを作成した後、クラッシュするフレームグラブスレッドを開始しようとします。

これを回避する方法がわかりません。誰かが私を正しい方向に向けることができますか? ありがとう。

編集:

この投稿を見つけた後: まあ、3 番目のリンクを投稿するのに十分な担当者がいないので、グーグルで見つけることができます: icontainer.open xuggler-users

フォーマットを必要とする他の open メソッドを使用してコンテナを開くことを実装しましたが、うまくいくようでした。

現在、このセクションに到達すると、この例外がスローされます。

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");

そして、APIがクラスにフォーマットを「推測」させるように言うように、フォーマットとしてnullを使用してみました。

ただし、どちらも同じ例外をスローするため、ここからどこに行くべきかわかりません。それでも探しています。

4

1 に答える 1

0

ExecutorServiceを使用してスレッド プールを処理する必要があるかもしれません。

于 2013-04-07T05:04:02.637 に答える