Hosting a Metering Aggregation Service
Previous | Next |
Hosting a Metering Aggregation Service
You can host a metering aggregation service to collect metering data as follows:
Create a metering certificate.
To acquire a metering certificate, the metering aggregation service generates a public-private key pair (for example, by using the WMRMKeys.GenerateSigningKeys method) and sends the public key to Microsoft, along with the URL to the service. Microsoft sends back a signed metering certificate, which contains a metering ID and the URL of the metering aggregation service.
The metering aggregation service must keep the private key for the metering certificate secure. Metering data that is collected by a media player is encrypted with the public key from the metering certificate and is reported to the metering aggregation service. Only the private key can decrypt this information.
The metering aggregation service shares the metering certificate with the license issuers who request to use the metering aggregation service.
Provide end users with a metering plug-in for the media player.
Periodically, metering data should be collected and reported to the metering aggregation service. To request metering data, create a media player application or plug-in that is distributed to consumers. The IWMDRMDeviceApp and IWMDRMDevice interfaces of the Windows Media Device Manager 10 SDK (included with Windows Media Format 9.5 SDK) provide methods to request metering data and to process the metering response from the metering aggregation service.
Important Microsoft recommends that you notify end users that you will be collecting metering data.
When the plug-in or application requests metering data, the DRM component in the media player retrieves the data for a specific metering ID from the data store. The plug-in or application forwards this data as a metering challenge to the corresponding metering aggregation service.
When the metering aggregation service has finished processing the data, the service returns a metering response to the plug-in or application, which forwards the response to the media player. This response indicates to the media player which items were successfully reported, and those items are then cleared from the data store.
Collect metering data and issue a response.
The metering aggregation service decrypts the challenge containing metering data using the metering certificate private key. Then, the metering data can be extracted into an XML string or into an object. Each object contains metering data for one metering ID. First, this data is organized into a collection of items corresponding to content. Each content item contains a collection of items that correspond to actions. Each action item contains a name and value, indicating an action and its count, such as PLAY and 10.
The object hierarchy looks like this:
WMRMMetering**
** WMRMMeteringData**
** WMRMMeteringContentCollection**
** WMRMMeteringContent**
** WMRMMeteringActionCollection**
** WMRMMeteringActionAfter metering data has been collected, the metering aggregation service sends back a response, which instructs the media player to clear and reset the data store for the items that were just reported.
Create the metering response as follows:
- Use the WMRMMetering.MeteringCertificate property to specify your metering certificate.
- Use the WMRMMetering.GetMeteringResponse method to generate a response to the client.
Example Code
'""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Declare variables. '""""""""""""""""""""""""""""""""""""""""""""""""""""" Dim MObj ' WMRMMetering object Dim MDataObj ' WMRMMeteringData object Dim MContentCollObj ' WMRMMeteringContentCollection object Dim MContentObj ' WMRMMeteringContent object Dim MActionCollObj ' WMRMMeteringActionCollection object Dim MActionObj ' WMRMMeteringAction object Dim MeterChallenge ' Metering challenge from the client Dim MASPrivateKey ' Private key of the metering aggregation service Dim MeterCert ' Metering certificate Dim MeterXMLString ' Metering data in XML format Dim MeterID ' Metering ID Dim TransID ' Transaction ID Dim ContentCollLength ' Number of items in the content collection Dim ContentKeyID ' Key ID for a content item Dim ActionCollLength ' Number of items in the action collection Dim ActionName ' Action name Dim ActionValue ' Action count Dim MeterResponseString ' Metering response string Dim x, y ' Counters '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Set variables. '""""""""""""""""""""""""""""""""""""""""""""""""""""" MeterChallenge = "<Replace with a metering challenge from the client>" MeterCert = "<Replace with your metering certificate>" MASPrivateKey = "<Replace with the private key for your service>" '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Extract metering data an a WMRMMeteringData object and as an XML string. '""""""""""""""""""""""""""""""""""""""""""""""""""""" Set MObj = Server.CreateObject("WMRMObjs.WMRMMetering") MObj.ServerPrivateKey = MASPrivateKey MObj.Challenge = MeterChallenge Set MDataObj = MObj.GetMeteringData Set MeterXMLString = MObj.GetMeteringDataAsXml MeterID = MDataObj.MeteringId TransID = MDataObj.TransactionId '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Retrieve the collection of content items. '""""""""""""""""""""""""""""""""""""""""""""""""""""" Set MContentCollObj = MDataObj.ContentCollection ContentCollLength = MContentCollObj.length '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Retrieve the key ID and action data for each content item. '""""""""""""""""""""""""""""""""""""""""""""""""""""" For x = 0 To (ContentCollLength - 1) Set MContentObj = MContentCollObj.item(x) ContentKeyID = MContentObj.KeyID '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Retrieve the collection of actions for the current content item. '""""""""""""""""""""""""""""""""""""""""""""""""""""" Set MActionCollObj = MContentObj.Actions ActionCollLength = MActionCollObj.length '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Retrieve each action and its value. '""""""""""""""""""""""""""""""""""""""""""""""""""""" For y = 0 To ActionCollLength - 1 Set MActionObj = MActionCollObj.item(y) ActionName = MActionObj.Name ActionValue = MActionObj.Value Next Next '""""""""""""""""""""""""""""""""""""""""""""""""""""" ' Generate the metering response. '""""""""""""""""""""""""""""""""""""""""""""""""""""" MObj.MeteringCertificate = MeterCert MeterResponseString = MObj.GetMeteringResponse
See Also
Previous | Next |