web-dev-qa-db-ja.com

Java)でのビデオ(DVD、.avi .mkv)の処理

Javaでビデオを再生するためのまともなライブラリを探し回った後、私は行き詰まりました。 JMFは古く、古く、ユーザーがインストールする必要があるため、周りの人は誰もがJMFを使用しないように叫んでいます。VLCJなどの他の代替手段は、機能するものの、まだ比較的不安定で、大量のネイティブコードに依存している場合は問題ないようです。 DVD、それは無料の図書館で見つけるのに金粉のようです!

現在のオプション:

  • 今、JavaFX 2は勢いを増しています。これは私が真剣に検討してきたことです(したがって、私の質問 ここ )が、これまでのところ、JavaFX2をそれ以上の何かを再生させる方法を見つけようとして運がありません。沼地の標準的なFLVビデオ。
  • VLCJはそれが何をするかについてうまく機能しており(私の現在の答えを参照)、現時点では私が進めていることです。 libvlcを使用して、ほとんどすべてのファイルを再生でき、箱から出してDVDも再生できるため、ほとんどすべてのことを実行できます。大きな問題は、プレーヤーごとに複数のVMを使用して安定したパフォーマンスを実現する必要があることです。これは、応答が比較的遅いことを意味します。また、このアプローチをMacで機能させる方法はまだありません。
  • JMFは途方もなく時代遅れで、恐ろしく、私に関する限り、実際には選択肢ではありません。私は過去にそれで遊んだことがあります、そしてその経験は良いものではありませんでした!
  • FMJはそれがJMFの代わりのドロップインだと言います。私が話した他のほとんどの人と同じように、私はまだそれを機能させていません、そしてそれ自体は私がそれを機能させることができたとしてもその品質と理解にうんざりします!
  • Xugglerはその機能に優れており、すばらしいチュートリアルがあり、非常によく書かれています。ただし、低レベルのトランスコーディング作業には最適ですが、ビデオの再生やフレームの正しい順序での同期などは、正しく機能するための悪夢であり、コードが追加されるため、メンテナンスが増え、バグが増える可能性があります。などなど...
  • 私はまだGStreamer-Javaを試していませんが、DVD再生をサポートしていないようです(これは私が取り組んでいるオープンソースアプリなので、商用プラグインもオプションではありません)。コーデックサポートはサポートしていません。 tが最も広いようです。
  • JCodec は興味深い取り組みであり、純粋なJavaの観点からビデオサポートを実装するために私が見た唯一のものです-しかし、フォーマットのサポートは現時点では不足しており、比較的新しいプロジェクト。
  • サポートしたいプラットフォームごとに異なるネイティブライブラリに自分で何かを書く。これは、必要なメンテナンスとコーディング時間が追加されるため、絶対的な最後の手段です。

上記(またはあなたが考えることができる他のもの)に基づいて、人々はどのようなオプションをお勧めしますか、そして私が見逃した他の賢明なものはありますか?または、近い将来利用可能になると思われる他の人はいますか?

27
Michael Berry

さまざまなオプションについて多くの調査を行い、いくつか試してみた後、結局VLCJを使用しましたが、ここに問題があります。VLCJのすべての作業はアウトプロセスVMで行われます。セットアップは少し複雑ですが(私がどのように行ったかについては ここ を参照)、その後は好きなように投げることができ、問題なく動作します(現在、安定性のない3つのアウトプロセスプレーヤーを使用しています)問題。)

Xugglerは素晴らしかったが、残念ながら私にはレベルが低すぎた。作業を求めて再生するためだけに必要な、ホイールの再発明の膨大な量(そしてそれよりも悪いホイール)は、私をやや先延ばしにした。すべての問題を解決するには永遠に時間がかかると感じました。エンコード/トランスコーディング/その他の低レベルのビデオ作業には、心からお勧めしますが、間違いなく最高です。

私が選んだアプローチの警告は?外部VMが明示的にシャットダウンされていない場合、アプリケーションが終了した後もバックグラウンドでビデオの再生が続行されるため、このアプローチではデバッグが難しくなります。また、Macで動作することもまだ確認していません。最初の提案は、MacOSがネイティブコードの明示的な許可なしに、あるプロセスが別のプロセスのウィンドウを制御できないことを聞いたからではないでしょう。しかし、それは少しの作業で可能になるはずです。

私が現在取り組んでいるプロジェクトへのスピンオフとして、これらすべてのアウトプロセス機能を、下にVLCJを使用する単純なJavaビデオフレームワークにまとめることができるかどうかを確認するかもしれません。誰もがこれに興味を持っているでしょう(私は何も約束することはできませんが、興味があればあるほど、それに取り組む可能性が高くなります)、遠慮なく私に知らせてください!

したがって、私の調査と発見の後、単に再生/録音/したい場合は、VLCJを使用することをお勧めします(ただし、間違いなくアウトプロセスプレーヤーを使用します)ストリーミングビデオのもの、およびコーデック自体で低レベルのビデオ作業を行いたい場合はXuggler。執筆時点では、ニースで純粋なJavaソリューションはありません。おそらくしばらくはそのままですが、幸いなことに、ネイティブライブラリのクロスでまともな結果を得ることができます。プラットフォーム。もっと多くの作業が必要です。

11
Michael Berry

私はいくつかのプロジェクトでjffmegを使用しました(ffmeg Javaバインディング)、これまでのところ問題に直面していません。 http://jffmpeg.sourceforge.net/documentation.html =。qt-jambiも使用しましたが、ビデオライブラリ(フォノン)を試したことがありません。これで問題を解決することもできます。

2
olafpadme

JMFに近づかないことに同意します。特にDVDを再生したい場合。 JMFでさえ、その機能の一部をネイティブコードに依存しています。とにかく、ある種のネイティブ依存関係を持つことから逃れるつもりはないでしょう。もう1つのオプションはFMJです。そのオープンソースバージョンのJMF。しかし、私はそれであまり運がありませんでした。

私の提案はVLCJを使うことです。メディアソリューションが必要なときに、これを調査していました。残念ながら、それはGPLの下でリリースされているので、私のアプリケーションでは使用できませんが、あなたが望むものを処理できるはずのようです。

また、私の他の投稿はあなたに興味があるかもしれません。 リンク

また、 this が役立つ場合があります。

1
user489041

gstreamer-Java バインディングをお勧めします。名前が示すように、 GStreamer APIをJavaクラスにラップします。これにより、GStreamerが提供するメディア処理グラフ機能にアクセスできます。これは実際に可能です。トランスコーディングのようなより高度なタスクを実行したい場合は、きちんとしています。

また、私が正しく覚えていれば、DVD再生をサポートし、CSSのライセンスが付属したGStreamer用の商用プラグインがありました。これがユースケースにとって重要でない場合は、いつでもオープンソースのもの(私が今までに必要とした唯一のもの)を使用することができます。

1
Waldheinz

JavaFX APIを使用してみましたか?.

私の見方では、JavaFXにはH.264再生のサポートが含まれています...そしてここで誰かがGoogleの新しいオープンソースWebM/VP8でビデオを再生する方法を示しています

http://javafxplace.blogspot.com/2010/06/javafx-and-webm-on-linux.html

1

Xuggler を試してください。これは、Javaの有名な FFmpeg ライブラリをラップします。

1
ismail

私は現在OpenImajライブラリを使用しています http://openimaj.org/tutorial

XuggleVideo and XuggleAudio class

それを使用し、独自のスレッドメカニズムを実装してそれらを再生することをお勧めします。私は現在、メディアプレーヤーに取り組んでおり、「人気のある」ビデオ形式をうまく再生できるようになることを望んでいます。

VideoDisplay class

ライブラリでは良い仕事をしますが、再生はちょっと途切れ途切れで、ライブラリはスイングを念頭に置いて実装され、

ImageComponent 

スイングノードへの接続は、JavaFxで何らかの理由で機能しないようですが、今のところ表示されているビデオから画像を取得できます。これで運が良ければ幸いです。

0
javatar