カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2019年01月04日(金)

動画を見るノ、引き続き、Media Foundation に対応中です

あけまして、おめでとうございます。
ミルノこと、S.S.Software こと、佐藤です^^。

ま、正月そうそう、ひきつづき、
動画を見るノ の修正してます。

動画を見るノには、動画のスナップショットを
バックグラウンドで取得する機能と、
動画を再生しながら、マニュアルで動画の
スナップショットを選択する機能があります。

そこの機能を、これまでのバージョンでは、
DirectShow とよばれる部品を使用して実装していたのですが、
新しく Media Foundation という部品を使って
(DirectShow と併用) できるようにする作業を行ってます。

メリットとしては、DirectShow のフィルターとよばれるものを
インストールしなくても、mp4 なんかのスナップショットが取得
できるようになって、とっつきやすくなるところですね。

とはいえ、いろいろな動画に対応させたいと思うと、DirectShow の
フィルターも必要になるので、機能的にはあまり変わらないかもです。

ここからは実装の話になります。

動画のスナップショットをバックグラウンドで取得する部分は、
IMFSourceReader という部品を使うと
比較的簡単に実装できましたが、

再生しながら、スナップショットを取得する機能は
右往左往、なかなか実装に目処が立ちませんでした。

最初は、Media Foundation の Session を使った再生方法を
試してみました。 IMFVideoDisplayControl::GetCurrentImage
があるので、簡単にできるかなーと思ったのですが、
この関数は、拡縮済みの出力画像を返すので、
オリジナル画像が取得できませんでした。

オリジナル画像を取得するには、Session 中の Topology 内の
MediaSink (出力部分) を自作するか、出力と入力の間に
自作のフィルターをかませる必要がありそうです。

ちなみに、 Sample Grabber Sink と呼ばれるできあいの MediaSink
を使用してできないか試してみたのですが、無理っぽいです。

というのも、Sample Grabber Sink は、ファイルに書き出したり、
動画をリアルタイムに加工して出力することのみを想定しているためか、
再生速度を 0 にした Scrubbing モードでシークしているときなどは、
サンプルデーターが届きませんでした。

また、再生からかなり遅れて、データーが届くみたいな感じでした。
というのも、音声と動画のストリームを両方用意して再生してみると、
音が流れるのと同時には、データーが届かなかったからです。

ちなみに、Sample Grabber Sink は、音声用のサンプルコードなので、
サブタイプに MFAudioFormat_PCM を指定してありますが、mp4 の
動画の場合、MFVideoFormat_RGB32 を指定すると失敗します。

mp4 の場合、MFVideoFormat_NV12 とか MFVideoFormat_IYUV
を指定するとうまくいきます。mp4 のデコーダーが、RGB32
での出力をサポートしないためです。

Sample Grabber Sink に、MFVideoFormat_RGB32 のデーターが
届くようにするには、動画のトポロジーに、変換用のフィルターを
追加する必要があると思いますが、簡単にはできませんでした。

ま、メモリーコピーに無駄が生じるので、
Sample Grabber Sink に届く NV12 とかの
データーを自分でデコードした方がいいかもしれません。

デコードには、 Video Processor MFT なんかが使えると思います。
とはいえ、自分の用途では Sample Grabber Sink
が使えないことがわかったので、完成するまでやってません。

で、今はバックグラウンドで動画のスナップショットを取得するのに
使用した IMFSourceReader を使って再生する方法を試みてます。

クロックとか、マルチメディアタイマー割り込みの処理を
自分で実装しないといけないので、ちょっと大変ですが、
動画のみを再生するだけなら、なんとかなりそうです。

ちなみに、クロックは、 IMFPresentationClock が使えます。
マルチメディアタイマーは、timeSetEvent 関数 を使えば、
簡単に利用できますが、スレッドの知識がないとハマること間違いなし。

ま、とりあえず、この方針で完成させるけど、
将来的には、フィルターをかませる方法に
実装しなおすかもしれん。

音声も再生させたい気もするし、そうなると
自分で、Session の機能を実装するのはきついからなー。

・・・

動画を見るノの最新版はこちらのページから、ダウンロードできます

・・・

Direct Show よりも、Media Foundation の方が
実行効率は良さそうだが、Topology の構成方法は
よくわからない部分が多い。ドキュメント不足かな。

例えば、Video Processor とノードをつなぐには、ノードの属性の MF_TOPONODE_CONNECT_METHOD に、MF_CONNECT_ALLOW_CONVERTER を指定しないと
ダメっぽいんだけど、そんなの簡単には気づかないよー。

動画を見るノ
動画を見るノのダウンロード
動画を見るノの更新履歴
ご意見・ご要望連絡窓口


<< | 2/1234PAGES | >>