IMFSourceResolver::CreateObjectFromByteStream メソッドを使用して、DRM で保護された WMA ファイルの IMFMediaSource インスタンスを作成しようとしています。Windows SDK の ProtectedPlayback サンプルを遊び場として採用しています。私が達成したい最終目標は、私が作成する IMFByteStream のカスタム実装によって再生プロセスが供給されるようにすることです。
しかし、単純な IMFByteStream の実装も、MFCreateFile 関数によって返された実装も機能しません。CreateObjectFromByteStream に渡されると、それぞれが MF_E_UNSUPPORTED_BYTESTREAM_TYPE の HRESULT を返します。
DRM で保護された WMA ファイルを使用して、サンプル プロジェクトをデフォルトの状態 (ファイルで CreateObjectFromUrl を使用) でテストしたところ、正常に動作しました。ファイルは破損しておらず、ライセンスは有効です。このコードを CreateObjectFromByteStream( MFCreateFile() ) に置き換えてもうまくいかない理由がわかりません。カスタム バイト ストリームの使用や、リゾルバーがバイト ストリーム インスタンスに期待することについて説明しているドキュメントはほとんど見つかりませんでした。
誰かがこのようなことを経験したり、私が間違っていることを考えたりした場合は、いくつかの指針をいただければ幸いです。
私が使用しているコードは次のとおりです。
IMFByteStream* stream = NULL;
HRESULT hr2 = MFCreateFile(
MF_ACCESSMODE_READ,
MF_OPENMODE_FAIL_IF_NOT_EXIST,
MF_FILEFLAGS_NONE,
L"C:\\IFB.wma",
&stream);
CHECK_HR(hr = pSourceResolver->CreateObjectFromByteStream(
stream,
NULL,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSource));
基本的にはサンプルと同じなので全部は載せず、この部分だけ変えています。
ありがとう、
スティーブ