none
WMSDKでDRM保護されたWMAファイルの再生 RRS feed

  • 質問

  • はじめて質問させていただきます。

    Windows Media Format SDK 9.5 を使って、
    DRM保護されたファイルを再生するアプリを開発しています。

    Windows SDKのDirectShowのフィルタグラフに WM Asf Reader Filter を登録し、
    DirectShow経由で再生させようと試みているのですが、
    そもそも WM Asf Reader Filter からIWMDRMReaderインタフェースを取得することができません。
    以下のようなコードでIWMDRMReaderインタフェースの取得を試みています。

    SmartPtr <IBaseFilter>            pReader;
    SmartPtr <IFileSourceFilter>    pSrcFilter;

    HRESULT hr = AddFilterByCLSID( m_pGraphBuilder, CLSID_WMAsfReader, &pReader, L"ASF Reader" );
    if ( SUCCEEDED( hr ) )
    {
        CComPtr<IEnumFilters> pEnum;
        CComPtr<IBaseFilter> pFilter;
        ULONG cFetched;

        SmartPtr<IWMDRMReader> pWMDRMReader;
        SmartPtr<IServiceProvider> pSP;
        hr = pReader->QueryInterface( IID_IServiceProvider, (void**)&pSP );
        if( SUCCEEDED(hr) )
        {
            hr = pSP->QueryService(IID_IWMDRMReader, IID_IWMDRMReader, (void **)&pWMDRMReader);
            if( SUCCEEDED(hr) )
            {
                pWMDRMReader->SetDRMProperty( g_wszWMDRM_RIGHT_PLAYBACK,
                                              WMT_TYPE_STRING,
                                              (BYTE*)g_wszWMDRM_RIGHT_PLAYBACK,
                                              sizeof(g_wszWMDRM_RIGHT_PLAYBACK) );
            }
        }
    }


    何か行っておくべきことなどがあるのでしょうか?
    もしくはインタフェースを取得する手順に間違いがあるのでしょうか?

    ※尚、DRM再生のためのスタブライブラリなどはすでに入手済みで、サンプルのaudioplayerは正常に動作することを確認しています。

    ご教授の程、宜しくお願い致します。
    2008年7月7日 14:27

回答

  • ↓ネット上の(数少ない)サンプル?
    http://www.eggheadcafe.com/software/aspnet/31994536/how-to-tolerate-broken-ne.aspx

     

    DirectShow を使って、IP カメラの動画を表示する試みだそうです。
    試み自体は成功していないようですが、IWMDRMReader は取得できているようです。
    ただし、使っている Windows Media Format のバージョンが 11 なので、
    バージョンの違いで問題が起こるかも知れませんが、とりあえず参考までに。

     

    これ以外だと、ちょっと今のところは、アイディアがありません。

    2008年7月8日 1:40

すべての返信

  • 割と適当に書いてみます。外してたらすみません。

     

    http://msdn.microsoft.com/en-us/library/aa390677(VS.85).aspx

    The reader object is created by the function WMCreateReader, which sets a pointer to an IWMReader interface. The other interfaces of the reader object can be obtained by calling the QueryInterface method.

     

    WMCreateReaderで作れと読めました。

     

     

    参考

    WM ASF リーダー フィルタ

    http://msdn.microsoft.com/ja-jp/library/cc371601.aspx

     

    これを見る限り、DRM関連のインターフェースはこのフィルタには実装されていません。

    2008年7月7日 14:37
    モデレータ
  • 解決方法はわかりませんが、気になった点を2つほど。

     

    Windows Media 9 Series のドキュメントを見ると、
    When you install the Windows Media Format 9 Series SDK run-time libraries, the WM ASF Reader is registered as

    the default filter for ASF files.
    と書いてありますので、もしかすると明示的に追加する必要はないかも。
    (あとからフィルターを取得する手間を考えると、明示的のほうがいいかな?)

     

    あと、RenderFile してから IWMDRMReader の取得を試みたら、どうなるでしょうか。

    2008年7月7日 22:08
  •  Abstract さんからの引用

    Windows Media 9 Series のドキュメントを見ると、
    When you install the Windows Media Format 9 Series SDK run-time libraries, the WM ASF Reader is registered as

    the default filter for ASF files.
    と書いてありますので、もしかすると明示的に追加する必要はないかも。

    英語ドキュメントをあさってきました。

    確かにWM ASF Readerでいけるのかもしれません。

     

    http://msdn.microsoft.com/en-us/library/ms788135(VS.85).aspx

    In addition, the filter exposes the following Windows Media Format SDK interfaces: IWMHeaderInfo, IWMReaderAdvanced, IWMReaderAdvanced2, IWMDRMReader (through IServiceProvider)

     

    IServiceProviderを通せばってことかな。

    2008年7月7日 22:33
    モデレータ
  • 皆様、情報有難うございます。

    WM ASF Reader を明示的に追加している理由は、RenderFile()で自動的に追加されるフィルタが
    Windows Media Player6.4互換のものになるのですが、この場合にシークパフォーマンスや再生に問題が出たためです。

    WM ASF Readerのバージョンが色々ありそうで、IServiceProviderを通せば取得できると書いてあるものや
    全くIWMDRMReaderについて触れていない(実装されていない)と記載されているものなど、
    MSDNのバージョンによって差異があるようです。

    Media Format SDK9.5 のヘルプやWIndows SDKのドキュメントでは、WM ASF Reader Filterのインタフェースとして
    IWMDRMReaderの記述がありますが、実際にこのフィルタから取得しようとしても失敗してしまうのです。


    2008年7月8日 1:01
  • ↓ネット上の(数少ない)サンプル?
    http://www.eggheadcafe.com/software/aspnet/31994536/how-to-tolerate-broken-ne.aspx

     

    DirectShow を使って、IP カメラの動画を表示する試みだそうです。
    試み自体は成功していないようですが、IWMDRMReader は取得できているようです。
    ただし、使っている Windows Media Format のバージョンが 11 なので、
    バージョンの違いで問題が起こるかも知れませんが、とりあえず参考までに。

     

    これ以外だと、ちょっと今のところは、アイディアがありません。

    2008年7月8日 1:40
  •  Abstract さんからの引用

    ↓ネット上の(数少ない)サンプル?
    http://www.eggheadcafe.com/software/aspnet/31994536/how-to-tolerate-broken-ne.aspx

     

    DirectShow を使って、IP カメラの動画を表示する試みだそうです。
    試み自体は成功していないようですが、IWMDRMReader は取得できているようです。



    貴重な情報有難うございます。

    このサンプルを見て、IFileSourceFilter::Load()を呼んでからIWMDRMReader を取得するように変更したところ
    上手くインタフェースを取得することが出来ました。

    DRM保護されたソースを読み込むまで、内部でインタフェースの実体が作られないようです。

    皆様、ご協力有難うございました!
    2008年7月8日 2:49