Windows Media DRM 10 を使用したデジタル メディア コンテンツ使用のメータリング
Andrea Pruneda
Jim Travis
Microsoft Corporation
February 2005
日本語版最終更新日 2006 年 5 月 30 日
適用対象:
Microsoft® Windows Media® Rights Manager 10 SDK
Microsoft Windows Media Device Manager 10 SDK
Microsoft Windows Media DRM 10 for Portable Devices
ポーティング キット
概要: 保護されたデジタル メディア コンテンツの使用に対するメータリングの概念を解説し、コンテンツ プロバイダがメータリングを実装するために Microsoft Windows Media DRM 10 プラットフォームを使用する方法を説明します。
目次
はじめに
メータリングの動作
メータリング証明書の作成
メータリングされたコンテンツのライセンスの発行
メータリング データの記録と報告
トランザクション ID の理解
コンピュータを使用したメータリング データの報告
メータリング チャレンジからのデータの処理
メータリング応答の処理
関連情報
はじめに
メータリングは、保護されたコンテンツの使用回数 (再生回数やコピー回数など) のカウントをデジタル メディア コンテンツ プロバイダに実現するテクノロジです。メータリングは、個々のユーザーのリッスン動作を追跡するためには使用されません。これは、特定のコンテンツ アイテムが使用された回数の簡単な集計です。マイクロソフトはいかなる場合においてもメータリング データを使用しません。
コンピュータに搭載されたメディア プレーヤーやデバイスでは、Microsoft® Windows Media® DRM 10 プラットフォームを使用して、Windows Media デジタル著作権管理 (DRM) テクノロジで保護されているコンテンツをメータリングできます。メータリングによっていくつかの利点がもたらされますが、その中でも特筆すべきは、コンテンツのライセンス供与を行い、ユーザーにこのコンテンツを再販売するコンテンツ プロバイダ サービスに対するロイヤリティの軽減です。ロイヤリティは販売のタイプに基づいています (販売が永久的な転送なのか、またはメータリングされた 1 回のみの再生なのかなど)。メータリングされた 1 回のみの再生のコストは永久的な転送のコストよりも大幅に低く、通常、コンテンツのメータリングはコンテンツ プロバイダにとって非常に経済的です。
また、メータリングは他の利点ももたらします。コンテンツのメータリングによって、コンテンツ プロバイダは次を実現できます。
- より人気のあるコンテンツの判断
- コンテンツが再生されるアーティストに対する識別と支払い
- 広告が表示された回数の追跡
メータリングの動作
メータリングには、コンテンツ プロバイダ サービス (コンテンツ所有者およびライセンス発行者)、メータリング集計サービス (メータリング データを収集し、処理するサービス)、およびデバイス製造元の関与に対する調整が必要です。
メータリングの基本的なプロセスは次のとおりです。番号の付いた手順は、次の図の番号に対応しています。
- メータリング集計サービスは、ライセンス発行者にメータリング証明書を提供します。この証明書には、メータリング データの報告先を示すメータリング ID および URL が含まれています。次に、ライセンス発行者は、メータリングが必要なコンテンツのライセンス内にメータリング証明書を含めます。
- エンド ユーザーはこのコンテンツを取得し、標準的なライセンス取得プロセスを介してライセンスを受信します。
- コンピュータに搭載されたメディア プレーヤーまたはデバイスでコンテンツ ライセンスを開きます。プレーヤーの DRM コンポーネントによってメータリング データが記録されます。このデータには、コンテンツの使用回数の集計、実行されたアクションのタイプ、およびメータリング ID が含まれます。
- コンピュータまたはデバイスに搭載されたメータリング プラグインまたはアプリケーションは、特定のメータリング ID のメータリング データを定期的に要求します。このデータは、メータリング チャレンジと呼ばれる特殊な形式で提供されます。次に、プラグインまたはアプリケーションは対応するメータリング集計サービスにこのデータを送信します。Web 対応のデバイスが使用される場合、そのデバイスはメータリング集計サービスにメータリング データを直接送信できます。
メータリング チャレンジは、ID が含まれたメータリング証明書を所有するメータリング集計サービスによってのみ暗号化が可能です。
たとえば、ユーザーが 2 つの音楽サービスに申し込み、それぞれからメータリングされたコンテンツをダウンロードするとします。これらのサービスのうち、どちらかのサービスのメータリング プラグインがそのメータリング ID のメータリング データを要求します。この ID のメータリング データのみが収集され、対応するメータリング集計サービスに送信されます。
- メータリング集計サービスがメータリング データを受信し、処理した後、このサービスはメータリング プラグインまたはアプリケーションにメータリング応答を返し、報告されたメータリング データの消去をプレーヤーに指示します。

メータリング証明書の作成
要件: Windows Media Rights Manager 10 SDK
コンテンツのメータリングの前に、メータリング集計サービスはまず、サービスを識別し、メータリング ID および URL を含むメータリング証明書を作成する必要があります。ライセンス発行者がこの証明書をライセンス内に含めた後、メータリング ID に基づいてメータリング データが収集され、整理されます。
メータリング証明書を作成するために、メータリング集計サービスは公開鍵と秘密鍵のペアを生成します (Windows Media Rights Manager 10 SDK の WMRMKeys.GenerateSigningKeys メソッドを使用)。また、この公開鍵をメータリング集計サービスの URL と共にマイクロソフトに送信します。マイクロソフトはメータリング ID および URL を含む署名付きのメータリング証明書を返送します。
秘密鍵はメータリング集計サービスによって安全に格納され、マイクロソフトとは共有されません。報告されたメータリング データはメータリング証明書の公開鍵を使用して暗号化されますが、暗号化の解除には秘密鍵が使用されます。したがって、メータリング証明書を所有するメータリング集計サービスのみがこのデータにアクセスできます。
メータリングされたコンテンツのライセンスの発行
要件: Windows Media Rights Manager 10 SDK
ライセンス発行者がメータリングされたコンテンツのライセンスを生成する場合、このライセンス発行者は Windows Media Rights Manager 10 SDK の WMRMLicGen.MeteringCertificate プロパティを使用して、メータリング証明書をライセンス内に含めます。結果として、このライセンスに関連付けられたすべてのアクションは、メータリング証明書からのメータリング ID と共に記録されます。
注 メータリング データを記録すると、コンテンツを識別する手段として、プレーヤーはライセンス鍵 ID を記録します。つまり、個々のコンテンツ アイテムを正確にメータリングするには、各コンテンツ アイテムに一意な鍵 ID を使用する必要があります。これとは逆に、同じ鍵 ID を複数のコンテンツ アイテム全体で使用することも選択できます。この場合、同じ鍵 ID を持つすべてのコンテンツのメータリング データが累積される結果となります。鍵 ID の詳細については、Windows Media Rights Manager SDK のドキュメントを参照してください。
次の VBScript の例コードでは、WMRMLicGen オブジェクトを作成し、メータリング証明書を指定する方法を示します。
Dim LicenseObj ' WMRMLicGen オブジェクトを含めるための変数
Dim MeterCert ' Variable to contain the metering certificate.
MeterCert = "Metering_Certificate"
' オブジェクトを作成します。
Set LicenseObj = Server.CreateObject("WMRMObjs.WMRMLicGen")
' メータリング証明書を指定します。
LicenseObj.MeteringCertificate = MeterCert
この例では、Metering_Certificate はユーザーが使用するメータリング証明書の文字列です。
メータリング データの記録と報告
メータリング データは、コンピュータ データ ストアとポータブル デバイス データ ストアの 2 つのソースから提供されます。コンピュータ データ ストアには、ユーザーがコンピュータ上で再生した、保護されたデジタル メディア コンテンツに関するメータリング データが含まれています。ポータブル デバイス データ ストアには、ユーザーがポータブル デバイスを使用して再生した、デジタル メディア コンテンツに関するメータリング データが含まれています。
メータリングがサポートされたメディア プレーヤーをエンド ユーザーが使用する場合にのみ、コンテンツに対するメータリングが可能です。コンピュータに搭載されたメディア プレーヤーは、たとえば Windows Media Player 10 などのように、Windows Media Format 9.5 SDK 上に構築されている必要があります。デバイスは、Windows Media DRM 10 for Portable Devices のポーティング キット上に構築されている必要があります。メータリング データは、プレーヤーの DRM コンポーネントによって自動的に記録されます。
メータリングを必要とするライセンスを持つコンテンツがプレーヤーで使用されると、実行されたばかりのこのアクションのカウントは、そのデータ ストアのメータリング セクション内で増加します。また、鍵 ID (コンテンツを識別するために使用)、メータリング ID、およびトランザクション ID も、カウントを使用して記録されます。
トランザクション ID の理解
メータリングの場合、データ ストアからメータリング データを要求するとトランザクションが開始され、データ ストア内のメータリング データをリセットすると終了します。トランザクション ID ではそれぞれのトランザクションを区別する方法を提供します。つまり、メータリングされたすべてのコンテンツに同じ報告セッションの同じトランザクション ID が割り当てられます。メータリング データを要求すると、報告トランザクションが完了するまで、メータリング サブシステムによってトランザクション ID が保存されます。報告メータリング データのプロセスが中断されると、メータリング サブシステムによる再送信が必要なデータがトランザクション ID によって識別されます。これで、データ ストアのクリア前に確実にトランザクションが完了します。
たとえば、メータリング プラグインがポータブル デバイスからメータリング データを要求するとします。プラグインが取得するメータリング チャレンジには、前回完了したトランザクション以降に格納されたすべてのメータリング情報が含まれます。チャレンジ内のすべてのデータは、単一のトランザクション ID と関連付けられています。プレーヤーはメータリング集計サービスにデータを送信し、サービスは応答文字列を返します。また、プレーヤーはデータ ストアをリセットします。この時点でトランザクションが完了します。したがって、次の報告トランザクションの完了まで、格納されたすべてのメータリング データの新しいトランザクションID がメータリング サブシステムによって作成されます。
ただし、何らかの理由によってトランザクションが完了しない場合があります。たとえば、ネットワークの問題が原因で、プレーヤーによるメータリング応答の受信が妨げられる場合があります。この場合、サービスに送信された次のメータリング チャレンジに直前のトランザクション ID が含まれ、メータリング データに直前の試行以降のすべてのカウントが含まれます。また、その時点で格納されている新しいデータもメータリング データに含まれます。つまり、複製ではないことを確認するために、メータリング集計サービスは常にトランザクション ID をチェックする必要があります。トランザクション ID が複製である場合、直前のトランザクションから格納されたすべてのデータをロール バックし、新しい値で置換する必要があります。
コンピュータを使用したメータリング データの報告
要件:
- Windows Media DRM 10 for Portable Devices ポーティング キット (デバイスからのメータリング用)
- Windows Media Device Manager 10 SDK (Windows Media Format 9.5 SDK に付属)
メータリングが必要なコンテンツをエンド ユーザーが取得すると、コンテンツ プロバイダ サービスは、定期的にメータリング データを収集し、メータリング集計サービスに報告を行うメータリング プラグインまたはアプリケーションをエンド ユーザーに提供する必要があります。
重要 メータリング データの収集をユーザーに通知することをマイクロソフトは推奨します。
Windows Media Device Manager 10 SDK の IWMDRMDeviceApp および IWMDRMDevice インターフェイスは、メータリング データを要求し、メータリング集計サービスからのメータリング応答を処理するメソッドを提供します。
プラグインまたはアプリケーションがメータリング データを要求すると、プレーヤー内の DRM コンポーネントによってデータ ストアから特定のメータリング ID のデータが取得されます。プラグインまたはアプリケーションは、このデータをメータリング チャレンジとして、対応するメータリング集計サービスに転送します。
次の例コードでは、メータリング チャレンジを生成する関数を作成します。この関数は、引数としてデバイスの正規名をとり、出力パラメータを介してメータリング集計サービスの URL およびメータリング チャレンジを返します。コンピュータのデータ ストアからメータリング チャレンジを要求する関数を使用するには、1 番目のパラメータに空の BSTR を渡すだけです。これで、NULL デバイス ポインタの結果となります。したがって、コンピュータのデータ ストアからチャレンジが生成されます。
HRESULT GetMeteringChallenge(BSTR bstrCanonicalName,
BSTR *pbstrMeterURL,
BSTR *pbstrMeteringChallenge)
{
HRESULT hr = S_OK;
CComPtr<IWMDRMDeviceApp> spDeviceApp;
CComPtr<IWMDeviceManager> spDevMgr;
CComPtr<IWMDeviceManager2> spDevMgr2;
CComPtr<IWMDMDevice> spDevice;
CComBSTR bstrDeviceName;
CComBSTR bstrMeterCert;
// 文字列定数 METERCERT は、この関数の
// 外部で定義されます。これにはメータリング
// 証明書が含まれます。
hr = bstrMeterCert.Append(METERCERT);
if(SUCCEEDED(hr))
{
bstrDeviceName.Append(bstrCanonicalName);
}
if(SUCCEEDED(hr))
{
// WMDRMDeviceApp オブジェクトを作成します。
hr = spDeviceApp.CoCreateInstance(CLSID_WMDRMDeviceApp, 0,
CLSCTX_ALL);
}
// デバイス名が存在するかどうかをテストします。
if(SUCCEEDED(hr) &&
bstrDeviceName.Length() > 0)
{
// Device Manager オブジェクトを作成します。
hr = spDevMgr.CoCreateInstance(CLSID_MediaDevMgr, 0, CLSCTX_ALL);
if(SUCCEEDED(hr))
{
// IWMDeviceManager2 の QI
hr = spDevMgr.QueryInterface(&spDevMgr2);
}
if(SUCCEEDED(hr))
{
// デバイスにポインタを取得します。
hr = spDevMgr2->GetDeviceFromCanonicalName(bstrDeviceName,
&spDevice);
}
if(SUCCEEDED(hr) && spDevice)
{
// メータリング サブシステムを初期化します。
CComPtr<IWMDMDevice2> spDevice2;
DWORD dwFlags = 0;
hr = spDevice->QueryInterface(&spDevice2);
if(SUCCEEDED(hr))
{
hr = spDeviceApp->QueryDeviceStatus(spDevice2, &dwFlags);
}
if(SUCCEEDED(hr))
{
if(!(dwFlags & WMDRM_DEVICE_ISWMDRM))
{
hr = NS_E_DEVICE_NOT_WMDRM_DEVICE;
}
}
}
}
if(SUCCEEDED(hr))
{
// NULL デバイス ポインタは PC ライセンス ストアをメータリングします。
hr = spDeviceApp->GenerateMeterChallenge(spDevice,
bstrMeterCert,
&bstrMeterURL,
pbstrMeteringChallenge);
}
return hr;
}
メータリング チャレンジをメータリング集計サービスに転送し、応答を受信するために、ユーザーが選択する任意のテクノロジを使用できます。転送中にデータが変更されないように注意します。
Web 対応のデバイスを使用したメータリング データの報告
ポータブル メディア プレーヤーなどの Web 対応のデバイス上でメータリング データを記録するプロセスは、コンピュータ上でのプロセスと類似しています。つまり、デバイスではメータリングがサポートされたメディア プレーヤーを使用する必要があり、メータリング データはプレーヤーの DRM コンポーネントによって自動的に記録されます。メータリングをサポートするには、デバイスが Windows Media DRM 10 for Portable Devices のポーティング キット上に構築されている必要があります。
Web 対応のデバイスは、メータリング データを報告するためにメータリング集計サービスに直接接続できます。このプロセスには次の 2 つの手順が含まれます。
- Windows Media DRM 10 for Portable Devices ポータブル キットの DRM_MGR_GenerateMeterChallenge 関数を使用して、デバイスはメータリング チャレンジを作成し、メータリング集計サービスに送信します。
- メータリング集計サービスはメータリング データを処理した後、デバイスにメータリング応答を送信します。デバイスはメータリング応答を処理し、DRM_MGR_ProcessMeterResponse 関数を使用してそのデータ ストアをクリアします。
メータリング チャレンジからのデータの処理
要件: Windows Media Rights Manager 10 SDK
メータリング集計サービスは、メータリング証明書の公開鍵を使用して暗号化されたメータリング チャレンジを受信します。サービスは、そのメータリング証明書の秘密鍵を使用して、メータリング チャレンジの暗号化を解除します。これでメータリング データを XML 文字列またはオブジェクトに抽出できます。データはコンテンツ アイテムごと (曲など) のコレクションにグループ化され、その後、アクション タイプやカウントごとにさらにグループ化されます。たとえば、サービスでは、曲 A が 10 回再生され、1 回コピーされたことや、曲 B が 20 回再生されたことなどを判断できます。
メータリング データが収集された後、メータリング集計サービスは、報告されたばかりのアイテムのデータ ストアに対するクリアをプレーヤーに指示する応答を返します。メータリング集約サービスは、この応答を生成するために WMRMMetering オブジェクトを使用します。
次の例コード例では、メータリング データを処理する Active Server Page (ASP) を作成します。この例では、メータリング情報を格納するカスタム関数を呼び出す状況を示すために、プレースホルダ関数である AggregateData を呼び出すことに注意してください。
<%@ LANGUAGE="VBScript"%>
<%
Response.Buffer = True
Response.Expires = 0
Do
On Error Resume Next
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' 変数を宣言します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Dim MObj ' WMRMMetering オブジェクト
Dim MDataObj ' WMRMMeteringData オブジェクト
Dim MContentCollObj ' WMRMMeteringContentCollection オブジェクト
Dim MContentObj ' WMRMMeteringContent オブジェクト
Dim MActionCollObj ' WMRMMeteringActionCollection オブジェクト
Dim MActionObj ' WMRMMeteringAction オブジェクト
Dim MeterChallenge ' クライアントのチャレンジのメータリング
Dim MASPrivateKey ' 秘密鍵
Dim MeterCert ' 証明のメータリング
Dim MeterID ' メータリングID
Dim TransID ' トランザクション ID
Dim ContentCollLength ' コンテンツ コレクション内の
' アイテム数
Dim ContentKeyID ' コンテンツ アイテムの鍵 ID
Dim ActionCollLength ' アクション コレクション内のアイテム数
Dim ActionName ' アクション名
Dim ActionValue ' アクション カウント
Dim MeterResponseString ' 応答ストリングのメータリング
Dim x, y, a, b ' カウンタ
Dim ActionPlay ' メータリングされた再生のカウント
Dim ActionCopy ' メータリングされたコピーのカウント
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' 変数を設定します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' この例では、名前 "mchall" を使用してメータリング チャレンジが
' 送信されたと仮定します。
MeterChallenge = Request.form("mchall")
MeterCert = "<Replace this with the metering certificate>"
MASPrivateKey = "<Replace this with the private key.>"
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' WMRMMeteringData オブジェクトおよび文字列としてメータリング データを抽出します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set MObj = Server.CreateObject("WMRMObjs.WMRMMetering")
MObj.ServerPrivateKey = MASPrivateKey
MObj.Challenge = MeterChallenge
Set MDataObj = MObj.GetMeteringData
MeterID = MDataObj.MeteringId
TransID = MDataObj.TransactionId
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' コンテンツ アイテムのコレクションを取得します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
Set MContentCollObj = MDataObj.ContentCollection
ContentCollLength = MContentCollObj.length
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' 各コンテンツ アイテムの鍵 ID およびアクション データを取得します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
For x = 0 To (ContentCollLength - 1)
ActionPlay = 0
ActionCopy = 0
Set MContentObj = MContentCollObj.item(x)
ContentKeyID = MContentObj.KeyID
' ' 最新のコンテンツ アイテムのコレクションを取得します。
Set MActionCollObj = MContentObj.Actions
ActionCollLength = MActionCollObj.length
' 各アクションおよびその値を取得します。
For y = 0 To ActionCollLength - 1
Set MActionObj = MActionCollObj.item(y)
ActionName = MActionObj.Name
ActionValue = MActionObj.Value
If (ActionName = "Play") then ActionPlay = ActionValue
If (ActionName = "Copy") then ActionCopy = ActionValue
Next
' AggregateData() は、この例では実装されていない
' カスタム関数です。実際には、この関数は
' 再生カウントを増加させ、データベース内にカウント値をコピーします。
' トランザクション ID を含めることで、アクションが
' 複数回カウントされることがなくなります。
' カウントを調整し、任意のトランザクション ID
' の最新の合計回数を使用する必要があります。
AggregateData(ContentKeyID, TransID, ActionPlay, ActionCopy)
Next
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
' メータリング応答を生成します。
'"""""""""""""""""""""""""""""""""""""""""""""""""""""
MObj.MeteringCertificate = MeterCert
MeterResponseString = MObj.GetMeteringResponse
response.write MeterResponseString
Loop while false
%>
メータリング応答の処理
要件:
- Windows Media DRM 10 for Portable Devices ポーティング キット (デバイスからのメータリング用)
- Windows Media Device Manager 10 SDK (Windows Media Format 9.5 SDK に付属)
メータリング集計サービスは、プラグインまたはアプリケーションにメータリング応答を返す必要があることに注意します。この応答には、どのアイテムが正常に報告されたのかについての情報が含まれます。プラグインまたはアプリケーションは Windows Media Device Manager 10 SDK メソッドである IWMDRMDeviceApp::ProcessMeterResponse を使用して、データ ストアからこれらのアイテムをクリアします。
次の例コードでは、メータリング応答を処理する関数を作成します。関数は、引数としてデバイスおよびメータリング応答文字列にポインタをとります。応答が部分的であるかどうかを示す出力パラメータを介して、関数はブール値を返します。部分的な応答の場合、コードはメータリングを再度実行し、セッションのすべてのメータリングが完了するまでチャレンジおよび応答の処理を続行する必要があります。
HRESULT DoMeteringResponse(IWMDMDevice *pDevice, BSTR bstrMeterResponse,
BOOL *pbPartial)
{
HRESULT hr = S_OK;
CComPtr<IWMDRMDeviceApp> spDeviceApp;
CComPtr<IWMDMDevice> spDevice = pDevice;
DWORD dwProcessFlags = 0;
CComBSTR bstrResponse;
hr = bstrResponse.Append(bstrMeterResponse);
ATLASSERT(bstrResponse.Length());
if(SUCCEEDED(hr))
{
// WMDRMDeviceApp オブジェクトを作成します。
hr = spDeviceApp.CoCreateInstance(CLSID_WMDRMDeviceApp, 0,
CLSCTX_ALL);
}
if(SUCCEEDED(hr))
{
hr = spDeviceApp->ProcessMeterResponse(spDevice,
(BYTE*)bstrResponse.m_str,
bstrResponse.ByteLength(),
&dwProcessFlags);
}
// フラグを検証し、出力パラメータ値を設定します。
if(SUCCEEDED(hr))
{
if(WMDRM_METER_RESPONSE_PARTIAL & dwProcessFlags)
{
*pbPartial = TRUE;
}
else
{
*pbPartial = FALSE;
}
}
return hr;
}
関連情報
- Windows Media テクノロジの一般的な情報については、Windows Media Web ページ (http://www.microsoft.com/japan/windows/windowsmedia/default.mspx) を参照してください。
- Windows Media 10 SDK のコンポーネントの詳細については、Windows Media SDK コンポーネント Web ページ (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/wmsdk.asp) (英語) を参照してください。
- Windows Media Rights Manager 10 SDK または Windows Media DRM 10 for Portable Devices ポーティング キットをダウンロードするには、Windows Media ライセンス申し込みフォームの Web ページ (http://wmlicense.smdisp.net/licenserequest/) (英語) にアクセスし、ライセンス申し込みフォームをオンラインで提出してください。マイクロソフトから使用許諾契約書が電子メールで送信されます。契約書に署名し、返送してください。その後、SDK またはポーティング キットをダウンロードするためのパスワードおよびリンクが送信されます。
- Windows Media Device Manager 10 SDK が含まれた Windows Media Format 9.5 SDK をダウンロードするには、Windows Media ダウンロード Web ページ (http://msdn.microsoft.com/downloads/list/winmedia.asp) (英語) にアクセスしてください。
|