web-dev-qa-db-ja.com

Java(JMF、Fobs4JMF、Xuggler、FMJ)でのビデオ再生

Javaで簡単なビデオ再生が必要です。

これが私の要件です:

  • 生産品質

  • ビデオコーデックとオーディオコーデックを自分で選択できるビデオファイルを開いてデコードします。 I.E動作の良いコーデックを選択できます。

  • 再生一時停止seekToFrameORseekToTimeおよびstop再生。基本的に、単一のビデオファイルのセグメントを非線形で再生できるようにしたい。たとえば、20.3秒から25.6秒のセグメントを再生したい場合は、 10秒後にセグメント340.3秒から350.5秒などを再生します。

  • 再生中は、ビデオとオーディオが同期している必要があります。

  • ビデオはSwingJComponentに表示する必要があります。

  • オープンソースでなくても商用製品で使用できる必要があります(つまり、LGPLまたはComercialが適しています)


私の研究は私を次の解決策に導きました:

私は簡単なプロトタイプを実装しましたが、これで必要なことができるようです。次を使用してビデオのセグメントを再生できます。

player.setStopTime(new Time(end));
player.setMediaTime(new Time(start));
player.start();

Fobs4JMFは機能しているように見えますが、コードの品質が低く、プロジェクトがアクティブでなくなっているように感じます。 Fobs4JMFを使用している製品を知っている人はいますか?


  • ビデオを再生するFlashアプリケーションを作成し、JFlashPlayerを使用してそれをmy Java Swingアプリケーションに取り込む

Javaとは異なり、Flashはビデオの再生に優れています。次の方法で小さなFlashアプリケーションを作成できます。

open(String videoFile),
play(),
pause(),
seek(int duration),
stop()

次に、JavaからFlash関数を呼び出すことができるJFlashPlayerを使用して、それをJavaに入れます。

このソリューションで私が気に入っているのは、Flashでのビデオ再生がしっかりしていることです。 JFlashPlayerを使用してJavaでビデオを再生した人はいますか?


  • Xugglerの上に簡単なメディアプレーヤーを書く

XugglerはJavaのFFMpegラッパーであり、非常にアクティブで高品質のプロジェクトのようです。ただし、要件で説明されている単純なビデオ再生の実装は簡単ではありません(特にシーク)。作業は、ビルドのベースとなるMediaToolsMediaViewerで行われました。


  • FMJを使用する

FMJを動作させようとしましたが、今のところ成功していません。


私の問題についてご意見をいただければ幸いです。

24
ksullivan

兄弟は Xuggler の叫び声を上げることができますか?

12
Art Clarke

私の考えでは、 [〜#〜] vlcj [〜#〜] は、この種のことを前進させる方法です。私はエンコード/トランスコーディング作業でXugglerが大好きですが、残念ながら、単純な再生を実行してすべての同期の問題などを解決するのは非常に複雑です。そうすることで、車輪の再発明のように感じます。

VLCJの唯一の点は、複数のプレーヤーで確実に機能させるために、プロセス外のプレーヤーに頼らざるを得なかったことです。フレームワークは、世界で最も簡単に導入できるものではありませんでしたが、フレームワークがあれば、美しく機能します。私は現在、アプリで3つのアウトプロセスプレーヤーを並べて実行していますが、問題はありません。

もう1つの注意点は、埋め込みメディアプレーヤーがスイングコンポーネントでは機能せず、重量のあるキャンバスだけで機能することです。しかし、それは私にとってまったく問題ではありません。もしそうなら、ダイレクトメディアプレーヤーを使用してバッファリングされた画像を取得し、それを選択したものに表示できますが、CPUに少し多く食い込みます(ただし、このアプローチを採用している他のプレーヤーよりも多くはありません)。

4
Michael Berry

xuggler(私が興味を持っている)を試したことはありませんが、 [〜#〜] vlcj [〜#〜] で楽しい時間を過ごしています。私が見つけた欠点は、アプリケーションの前にVLCをインストールする必要があることだけです。

2
Oso

私はFOBSを使用するのと同じ方法でjffmpegを使用していますが、比較はしていませんが、かなりうまく機能します。

また、JavaFXのようにネイティブコーデックとインターフェイスする簡単な方法を知りたいのですが、JavaFXとJavaの間に実際の統合はないようです。

VLCライブラリlibvlcをJavaに取り込もうとする作業もいくつかあります。私はまだそれを試していません、そして、持っている人からの返事を聞きたいです。

2
paul

JavaFX 多数の動作するビデオおよびオーディオコーデックが組み込まれています。現時点で最も幅広いサポートを提供するソリューションになる可能性があります。

2
jsight