IMFDRMNetHelper
COM公式ドキュメント
ネットワークシンク上でネットワークデバイス向けの Windows Media Digital Rights Management (DRM) を構成します。
解説(Remarks)
保護されたコンテンツをネットワーク経由でストリーミングするために、ASF ストリーミングメディアシンクは、ネットワークデバイス向け Windows Media DRM をサポートする出力トラストオーソリティ (OTA) を提供し、IMFDRMNetHelper インターフェイスを実装します。この OTA では、多重化の前に各フレームで暗号化が行われます。ライセンス要求および応答の処理はメディアシンク内で実行されます。
アプリケーションは IMFDRMNetHelper へのポインターを取得し、そのメソッドを使用してライセンス要求と応答を処理します。また、アプリケーションはクライアントへのライセンス送信も担当します。
コンテンツをストリーミングするには、アプリケーションは次の処理を行います。
- メディアシンクがストリーミングコンテンツを書き込む先の HTTP バイトストリームを提供します。DRM で保護されたコンテンツをサーバーからクライアントへネットワーク経由でストリーミングするには、アプリケーションは Microsoft Media Foundation Protected Media Path (PMP) を使用する必要があります。メディアシンクおよびアプリケーションが提供する HTTP バイトストリームは mfpmp.exe 内に存在します。したがって、バイトストリームは IMFActivate インターフェイスを公開し、プロセス外で作成できるようにする必要があります。Note これはコードのパッケージ化の方法に影響を与える場合があります。HTTP バイトストリームを含む DLL およびその他の依存 DLL は、Protected Environment 向けに署名 (PE-signed) されている必要があります。
- MFPKEY_ASFMEDIASINK_DRMACTION プロパティを MFSINK_WMDRMACTION_TRANSCRYPT に設定します。メディアシンクのプロパティストアは、ASF ContentInfo を通じてアプリケーションから利用できます。プロパティストアを取得するには、IMFASFContentInfo::GetEncodingConfigurationPropertyStore を呼び出します。
- メディアシンクにクエリを実行して、IMFDRMNetHelper インターフェイスへのポインターを取得します。
- ライセンス要求を行うには、IMFDRMNetHelper::ProcessLicenseRequest を呼び出します。このメソッドは OTA の実装を呼び出してライセンスを取得します。クロックが初めて開始されるとき、または再開されるときに、サンプルの暗号化に使用される暗号化器が取得され、ライセンス応答がキャッシュされます。
- キャッシュされたライセンス応答を取得するには、IMFDRMNetHelper::GetChainedLicenseResponse を呼び出します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定された要求に対するライセンス応答を取得します。
| pLicenseRequest | BYTE* | in | ライセンス要求を格納したバイト配列へのポインター。 |
| cbLicenseRequest | DWORD | in | ライセンス要求のサイズ (バイト単位)。 |
| ppLicenseResponse | BYTE** | out | ライセンス応答を格納したバイト配列へのポインターを受け取ります。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。 |
| pcbLicenseResponse | DWORD* | out | ライセンス応答のサイズ (バイト単位) を受け取ります。 |
| pbstrKID | LPWSTR* | out | キー識別子を受け取ります。呼び出し元は SysFreeString を呼び出して文字列を解放する必要があります。 |
戻り値
この関数は HRESULT を返します。取り得る値には次の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| メディアシンクはシャットダウンされました。 |
このリリースでは実装されていません。(IMFDRMNetHelper.GetChainedLicenseResponse)
| ppLicenseResponse | BYTE** | out | ライセンス応答を格納したバイト配列へのポインターを受け取ります。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。 |
| pcbLicenseResponse | DWORD* | out | ライセンス応答のサイズ (バイト単位) を受け取ります。 |
戻り値
このメソッドは E_NOTIMPL を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFDRMNetHelper "{3D1FF0EA-679A-4190-8D46-7FA69E8C7E15}" #usecom global IMFDRMNetHelper IID_IMFDRMNetHelper "{}" #comfunc global IMFDRMNetHelper_ProcessLicenseRequest 3 var,int,var,var,var #comfunc global IMFDRMNetHelper_GetChainedLicenseResponse 4 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IMFDRMNetHelper "{3D1FF0EA-679A-4190-8D46-7FA69E8C7E15}" #usecom global IMFDRMNetHelper IID_IMFDRMNetHelper "{}" #comfunc global IMFDRMNetHelper_ProcessLicenseRequest 3 sptr,int,sptr,sptr,sptr #comfunc global IMFDRMNetHelper_GetChainedLicenseResponse 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。