プログラム(C ++)にビデオプレーヤーを埋め込む必要がありますが、後処理を行う必要があるため、XEmbedを使用できません。ffmpegでできるように、出力を生のRGBとしてメモリのバッファに書き込むことは可能ですか?
2 に答える
残念ながら、mplayerをライブラリとして実行することはできませんが、mplayerコードに変更を加える場合は、少しハッキーな解決策がある可能性があります。これはWindowsとMacOSXでも機能するはずですが、ある程度の調整が必要です。
mplayerソースをダウンロードし、./libvo/vo_png.c
ファイルを検索します。このファイルをテンプレートとして使用して、独自のファイルを作成できます(たとえば)./libvo/vo_shm.c
-生のピクセルを取得する関数があります。アイデアは、共有メモリオブジェクト(man shmget
)を作成することです。後で同じキーを使用してこのメモリを参照しshmget
、ピクセルバッファを表示する他のプロセスを呼び出すことができます。一度に1つのプロセスだけが1つのバッファを使用するように、少なくとも2つのメモリバッファを作成する必要があることに注意してください。たぶん、3つ以上のバッファが最適でしょう。
static const vo_info_t info
また、構造体の初期化を変更して、ビデオ出力デバイスを別の名前として登録することも忘れないでください。私が見る限り、あなたの新しいものをファイル内vo_shm.c
のビルドシステムに追加することができます。config.mak
幸運を。
多くのLinuxプログラムにはmplayerプレーヤーが組み込まれています(IIRC:gimp-gap、k9copyなど)
一般的なアプローチは、mplayerの子ウィンドウをXの親ウィンドウのすぐ内側に埋め込むことだと思います。明らかに、それはWindowsよりもX11アーキテクチャでより簡単に達成されます:)
男mplayerショー:
mplayer -wid <windowId>
-guiwid <window id>
This tells the GUI to also use an X11 window and stick itself to the bottom of the video, which is useful to embed a mini-GUI in a browser (with the mplayerplug-in for instance).
-wid <window id>
This tells MPlayer to use a X11 window, which is useful to embed MPlayer in a browser (with the plugger extension for instance).
(たとえば、Qtアプリケーションを使用して)単純に使用できます
mplayer -wid mywidget->winId();
だからあなたが必要とするのは
- mplayerへのインストールの依存関係
- man execve / man mplayer