MediaFoundationでの音量操作
以前にTeraTailsのサイトに質問したのですが全く反応がないのでこちらに質問し直します。
C#で動画の制御をしたいと思いDirectShowとMediaFoundationを迷いましたが、MS的に後発であるし、.NETのライブラリがあると言う事でMediaFoundation.NETを使用することにしました。
https://sourceforge.net/projects/mfnet/
実際にはVS2017でNuGetのパッケージを入れております。
細かいところは省略しますが、動画再生に関する部分はほぼサンプル(MFSamples-2016-09)を使用しました。
厳密にやりたいのは動画の細かい制御(コマ送りだったり、再生スピード変更、二つの動画をそれぞれ再生位置を変更した後に同期再生・・等)ですが、とりあえずウィンドウ内のパネル等に動画を表示・再生・一時停止、TrackBarで再生位置を変更するような所までは出来るようになりました。
ですがいろんなサンプルを眺めたつもりなのですが音量操作の部分がどうしても分かりません。
MediaSessionから作成するのは同じだと思うのですが、IMFSimpleAudioVolumeが分かりやすい名前でしたが、調べるとMSがこれをサンプルでも使用していないとかのディスカッションが見つかります。
結局王道としてどうして良いのかさっぱり分からない状況です。
正直音量は細かい操作は必要ないのでこんな所に時間がかかるとは思わず、結構萎えてきてしまってる状況です。
(極端、元のボリュームとミュートが切り替えられるだけでも良いのですが、Windows自体のボリュームをミュートしてしまうのは不可なので)
サンプルがあれば一番良いですが、参考資料などございませんでしょうか?
よろしくお願い致します。
==9月5日追記==
コメント頂いたサイト(C++)を参考に
object ppvObject;
MFExtern.MFGetService(m_pSession, MFServices.MR_STREAM_VOLUME_SERVICE, typeof(IMFAudioStreamVolume).GUID, out ppvObject);
m_pAudioStreemVolume = (IMFAudioStreamVolume)ppvObject;
としてみたのですがm_pAudioStreemVolumeがnullになってしまいます・・・
(正確にはppvObjectがnullで返ってきてます)
手探りでここまで来たんですが行き詰まってしまいました。
何が間違っているのでしょうか・・・・
動画再生や再生速度変更、再生位置変更等は問題ないので、後は音関係だけなのですが・・・
海外サイトでも情報が少ないので結構キツイですね・・・・