VLCベースのビデオプレーヤー。 パート1

はじめに、またはそれがすべて始まった方法...



仕事に就くと、彼らは私がしなければならないことのレイアウトを見せてくれました。 それはかなりいいインターフェースを備えたビデオプレーヤーでした。 私のプレーヤーはVLCプレーヤー(またはそのLibVLCライブラリ)をビデオエンジンとして使用すると想定されていました。 事実は、誰もがデスクトップで見ることに慣れているプレーヤーであるということです。VLCは、本質的には、ローカルドライブであるマルチキャストストリームからビデオファイルをダウンロードしてデコードできるLibVLCライブラリの単なるインターフェイスです。



開発言語であるC ++をすぐに決定しました。 開発環境に関しては、私は上司と同じように、私自身の提案(Visual Studio IDE)を持っていました。その結果、彼らはQt IDEに同意しました。 SDKには、ユーザーインターフェイスを備えたアプリケーションの開発を高速化するための多くのクラスがあります。



問題の本質



ビデオ画像の上に半透明のインターフェイスを描画する必要がありました。 うーん...私は考え、そして一生懸命考えました。 タスクは非常に興味深いものでした。 Googleと相談した後、いくつかのオプションを見つけました。



解決策1


プレーヤー自体は、開発者自身とアマチュア中傷者の両方によって作成された多くのプラグインで構成されているため、アイデアは、イメージオーバーレイのような独自のプラグインを作成することでした。 しかし、そのようなプラグインのソースコードを検討した結果、同様のシステムをアニメーションと統合し、マウスクリック、キーなどを追跡するのは問題があるという結論に達しました。



決定2


解決策は、ビデオストリームの上にインターフェイスを備えた超越ウィンドウを保持することでした。 もちろん、2番目のウィンドウは、最初のウィンドウの座標と状態と同期する必要があります。 しかし、これは理論的にのみ良好であり、残念ながらそうでした。完全に透明なウィンドウを半透明の要素にリンクする方法をまだ理解していないため、それを実現できませんでした。 したがって...



決定3


インターネットで非常に頻繁に、VLCベースのエンジンから説明するときに、VMemプラグインの説明に出会いました。 したがって、私はこれが私の最後の出口であると決めました-そして、それは正しかったです。



ユーレカ! またはVMemがシーンに入ります...



それでは、VMemモジュール、なぜそれがそれほど優れているのか、どの機能を実行するのか?

このモジュールは、画面に直接表示するのではなく、メモリ内の画像を表示するように設計されています。 さらに、メモリの一部は、呼び出し元のアプリケーションによって作成される必要があります。 そして最も重要なことは、ビデオ画像を処理するために、すべてのフィルターとプラグインが適用された後にのみメモリー内の画像が形成されることです(例えば、インターレースを除去するフィルター、字幕を表示するなど)



LibVLC API



APIに関するいくつかの言葉:ライブラリはPureCで作成されていますが、他の言語(Python、Java、.NET、Pascal、Objective-C)のポートもありますが、C ++、Qtなどのラッパーもありますが、BrainFuckは上記に含まれていません。リスト。 公式Webサイトでは、LibVLCをベースにしたビデオプレーヤーを膝の上で組み立てる方法に関するいくつかのレッスンがあります。



おわりに



それで、記事の最初の部分は終わりました。 その中で、プレーヤーの開発を始めたばかりのときに直面しなければならなかった主な困難について説明しました。 記事の次のパートでは、画面上の画像の出力を整理する方法と、このために使用するグラフィカルAPI(GAPI)について説明します。



閲覧および訪問用のリスト:

  1. 開発者の公式ウェブサイト
  2. IPAドック
  3. 開発者フォーラム



All Articles