Erstellen von Filterdiagrammen in DRM-Enabled Anwendungen

Wenn Ihre DirectShow-Anwendung die Wiedergabe von DRM-geschützten Dateien unterstützt, sollten Sie im Allgemeinen renderFile nicht zum Erstellen des Filterdiagramms verwenden, da es keine Möglichkeit gibt, anzugeben, welche DRM-Rechte Sie vor dem Öffnen der Datei anfordern. Der WM ASF-Reader fordert standardmäßig nur Wiedergaberechte an. Der Filter wird dem Diagramm nicht hinzugefügt und kann daher erst von Anwendungen gefunden werden, wenn eine Datei erfolgreich geöffnet wurde.

Um ein DRM-fähiges Wiedergabediagramm mithilfe des WM ASF-Readerszu erstellen, müssen Sie den Filter mit CoCreateInstance instanziieren, ihn mithilfe von IGraphBuilder::AddFilter dem Filterdiagramm hinzufügen, ihn konfigurieren und dann seine Ausgabepins rendern. Diese Technik wird im PlayWndASF-Beispiel demonstriert. Wenn Sie das Diagramm auf diese Weise erstellen, verfügen Sie bereits über den IBaseFilter-Zeiger, mit dem QueryService aufgerufen werden kann, um IWMDRMWriter zu erhalten. Diese Schnittstelle ist jedoch erst verfügbar, wenn das Windows Media Format SDK-Readerobjekt intern vom WM ASF-Reader erstellt wurde. Die erste Gelegenheit, die die Anwendung zum Festlegen von DRM-Rechten hat, befindet sich im WMT _ NO _ RIGHTS EX-Ereignishandler, wie im folgenden _ Codeausschnitt gezeigt:

case WMT_NO_RIGHTS_EX:

    IServiceProvider *pServiceProvider;
    IWMDRMReader pWMDRMReader;
    JIF(g_pReader->QueryInterface(IID_IServiceProvider, (void **) &pServiceProvider));
    JIF(pServiceProvider->QueryService(IID_IWMDRMReader, IID_IWMDRMReader, (void **) &pWMDRMReader)); 
    SAFE_RELEASE(pServiceProvider);

    // Set the rights we want for this file. These are the actions we 
    // might want to perform on the file. Here we ask for two rights only.
    // In a real application you should enable users to select which 
    // rights they want.
    hr = pWMDRMReader->SetDRMProperty(g_wszWMDRM_Rights, WMT_TYPE_STRING,
        BYTE*) wszRights, (sizeof(wszRights) / sizeof(wszRights[0])) * 2);
    SAFE_RELEASE(pWMDRMReader);
    if (FAILED(hr))
    {
       Msg(TEXT("SetDRMProperty Failed!  hr=0x%x\n"), hr);
       return hr;
    }
    // Now proceed with license acqusition.
    if( pEventData->pData )
    {
        hr = HandleNoRightsEx(pEventData->hrStatus, 
        (WM_GET_LICENSE_DATA *)pEventData->pData);
    }
    else
    {
         hr = E_FAIL;
    }
    break;

Digital Rights Management Features

DRM-Attributliste

DRM-Eigenschaften

Aktivieren der DRM-Unterstützung

IWMDRMReader

IWMDRMWriter