0

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));

基本的にはサンプルと同じなので全部は載せず、この部分だけ変えています。

ありがとう、

スティーブ

4

2 に答える 2

2

@ピソモジャド

回答ありがとうございます、この質問を投稿したことをすっかり忘れていました。

私の記憶が正しければ、問題は CreateObjectFromByteStream がコンテンツ タイプを識別する方法を必要とすることでした。これを行うには、URL とバイト ストリーム インスタンス (pwszURL パラメータ) を渡すか、バイト ストリーム クラスに IMFAttributes を実装させ、コンテンツ タイプを要求する GetAllocatedString の呼び出しを処理します。私はこれらのことをどちらもしていなかったので、リゾルバーはストリームを拒否していました。

あなたの回答で提案したように、リゾルバーは最初の数バイトを介してストリームコンテンツタイプを認識しようとすると思っていましたが、私にはそうではないようでした。これがなぜなのかはわかりませんが、気にしないでください。

スティーブ

于 2010-08-25T09:46:15.363 に答える
1

ここで何が起こっているかをデバッグするためのいくつかのアイデア:

まずIMFSourceResolver::CreateObjectFromUrl、c:\ifb.wma ファイルで を実行します。それが幸せであることを確認してください。

そうであると仮定すると、CreateObjectFromByteStream 呼び出し内で IMFByteStream で何が起こるかを調べます。通常、CreateObjectFromByteStream は、IMFByteStream の先頭から数バイトを読み取ろうとします。これは、通常、そこにある種の識別バイト シーケンスがあるためです。いくつかのブレークポイントを設定するか、あなたIMFByteStream::[Begin]Readからログを記録して、何を求められているか、正しいバイトを忠実に配信しているかどうかを確認してください。

FWIW、すべての WMA ファイル (および WMV、および ASF) は次のように始まります (これは ASF ヘッダー GUID です)。

30 26 b2 75 8e 66 cf 11 a6 d9 00 aa 00 62 ce 6c
于 2010-08-24T13:59:28.223 に答える