


{"id":11025,"date":"2017-09-08T20:24:16","date_gmt":"2017-09-08T20:24:16","guid":{"rendered":"https:\/\/expressplay.local\/?page_id=11025"},"modified":"2021-02-10T11:26:20","modified_gmt":"2021-02-10T19:26:20","slug":"advanced-test-tool","status":"publish","type":"page","link":"https:\/\/www.expressplay.com\/ko\/developer\/advanced-test-tool\/","title":{"rendered":"Advanced Test Tool Guide"},"content":{"rendered":"<style>\nh2,h3 {\n    margin: 20px 0;\n}<\/p>\n<p>code {\n    word-break: break-all;\n    white-space: pre-wrap;\n    font-size: 14px;\n    color: #555;\n    margin: 20px 0;\n    background-color: #f5f5f5;\n    padding: 20px;\n}\n<\/style>\n<h2>Advanced Test Tool Guide<\/h2>\n<h3>Introduction<\/h3>\n<p>The ExpressPlay Advanced Test Tool (ATT) is a suite of command-line debugging tools for advanced Marlin BB use cases. In such cases you may need to examine the license data from a particular token or check that the content key or content ID is correct. The ATT provides such tools to run Marlin client functions in order to debug this information. The ATT is available to download from the ExpressPlay Admin site (https:\/\/admin.expressplay.com).<\/p>\n<p>This document is a guide describing usage of various command-line media file-handling tools provided by ExpressPlay for validating tokens acquired via the ExpressPlay REST API and licenses obtained as a result of processing tokens. These tools are provided to illustrate the functions of an ExpressPlay client application, such as those used to manage Marlin Broadband and MS3 licenses, to evaluate such licenses to determine whether they allow playback of specified Marlin content, to process Marlin action tokens to acquire licenses and to perform registrations of devices to users, etc. This guide assumes you are already familiar with the Marlin and other concepts, content file formats, etc. that are referenced by the tools, other than providing a very brief overview below of the main Marlin-protected content formats.<\/p>\n<p>NOTE: It is recommended that you use Marlin MS3 tokens wherever possible as this format is much simpler and sufficient for all streaming use cases, but there are advanced cases such as download and playback offline, were Marlin BB tokens must be used. Those use cases may require the help of the ATT to confirm that your storefront hookup is correct. The ExpressPlay ATT can be obtained from the ExpressPlay Admin web console with a valid ExpressPlay account.<\/p>\n<h3>Summary of Tools<\/h3>\n<table cellspacing=\"0\" cellpadding=\"0\" class=\"t1\">\n<tbody>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">Ms3SampleClient<span class=\"Apple-converted-space\">&nbsp;<\/span><\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Parses and validates  a specific MS3 URL. Returns hash of the content ID and the content key in clear as well as other optional elements: the authenticator, flags, the output control and extensions.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiDashInfo<span class=\"Apple-converted-space\">&nbsp;<\/span><\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Parses a specified DASH MPD file and outputs content information<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiDashToMp4<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Downloads the content referenced by an MPD and creates an MP4 file containing the content.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiDashToMpeg2Ts<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">A command line example to download clear or protected DASH presentation.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiDashTrace<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p3\">Downloads the MPD and its media segments and prints information based on the same.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiDbWiper<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Deletes the Sushi and License Store databases used by Wasabi.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiFile<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Returns information about a specified media file (MP4,, DCF, MPEG-2 TS, BBTS,&#8230;). Includes the content type, protection type (if any), the track numbers and types, file or track content IDs (as relevant), and file metadata. Specifies whether there is an embedded license, and lists Silent License Acquisition URLs (if any).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiLicenseStore<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Manages a database of Marlin Broadband licenses.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiMp4Decrypt<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Given a URL (which may optionally be an MS3 URL) referencing PDCF content, this tool downloads the content (if it is not local), decrypts it, and produces an MP4 file with the clear content.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiMp4License<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Used to insert a license into an MP4-based media file, or to obtain the license embedded within an MP4-based media file.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiSushiAction<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Used to obtain a description of license requirements, or to determine whether a requested action (typically \u2018Play\u2019) on particular Marlin content is allowed, given a specified license.<span class=\"Apple-converted-space\">&nbsp;<\/span><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiSushiInfo<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Provides information about Sushi Marlin DRM Engine (the core component of Wasabi) versions, property settings, and Nodes, Links, etc. currently in the Sushi database. Also indicates whether or not the device this is run on has been personalized.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiSushiPersonalize<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Personalizes the device on which it is run, obtaining keys, certificates, etc. necessary to provide a unique identity required for interactions with other Marlin entities.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"middle\" class=\"td1\">\n<p class=\"p1\">WasabiSushiProcessToken<\/p>\n<\/td>\n<td valign=\"middle\" class=\"td2\">\n<p class=\"p1\">Processes an \u201caction token\u201d XML document and sends appropriate requests to a Marlin Broadband Server in order to request acquisition of a license or to perform a registration, such as registering a device to a user or registering a user as a subscriber of a subscription.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<h2>Tool Details<\/h2>\n<p>Each of the following sections provides documentation for a single tool. Each contains a tool description, a usage statement, information about all the parameters, and one or more example calls.<\/p>\n<p>How to interpret the usage statements:<\/p>\n<ul>\n<li>Items in angle brackets represent placeholders for actual values. For example, one of the options for the mp4dump tool is shown as<\/li>\n<p><span class=\"courier\">&#8211;verbosity &lt;n&gt;<\/span><\/p>\n<p>Here, &lt;n&gt; is a placeholder for a number between 0 and 3, so the option specified in an actual call would look something like the following:<\/p>\n<p><span class=\"courier\">&#8211;verbosity 2<\/span><\/p>\n<li>Items in square brackets are optional. For example, the usage statement for  WasabiSushiPersonalize has the following at the end:<\/li>\n<p><span class=\"courier\">[&lt;personalization-token-filename&gt;]<\/span><\/p>\n<p>This indicates that you can optionally include the name of a personalization token file.<\/p>\n<li>In many cases, the usage statement includes [options], indicating that one or more options are allowed at that position. The subsequent Parameters subsection lists all the possible options.<\/li>\n<li>You can see the usage statement for each of the mp4* and Ts2* tools by calling the tool with no parameters. This is not the case for the tools whose names start with \u201cWasabi\u201d. Some of those tools do not have any parameters, or have parameters that can all be defaulted. If you call such a tool without parameters, it simply executes.<\/li>\n<li>Currently, if you call a tool (that has parameters) whose name starts with WasabiSushi and you pass it &#8211;help (or don\u2019t specify any parameters), the usage statement that is displayed erroneously starts with \u201cSushi\u201d instead of \u201cWasabiSushi\u201d. For example, here is a call to WasabiSushiAction with the &#8211;help option, and the resulting printout:<\/li>\n<p><span class=\"courier\"><b>WasabiSushiAction &#8211;help<\/b><br \/>\nSushiAction [&#8211;accept] [&#8211;parameters &lt;filename&gt; ] &lt;operation&gt;<br \/>&lt;action-name&gt; &lt;license-data-file&gt; &lt;content-id&gt; [&lt;content-id&gt; &#8230;]<\/span><\/p>\n<p>As you can see, the usage statement starts with SushiAction, but any calls you make should actually start with WasabiSushiAction, as shown in the example in 4.33.<\/p>\n<li>Many example calls are longer than can fit on a single line. For each of these, each line contains the maximum number of characters that will fit on the line, and the subsequent line(s) contain the rest of the call. All this should be concatenated together (without extra spaces) into a single \u201cline\u201d in order to make an actual call with the specified parameters.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ms3SampleClient<\/h3>\n<h4>Description<\/h4>\n<p>Given a MS3 URL returns hash of the content ID and the content key in clear as well as other optional elements: the authenticator, flags, the output control and extensions. The Ms3 URL may be an SAS url, an SAS compound URL, an SAD url or the name of a file containing an SAD.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">Ms3SampleClient [options] &lt;url-or-filename&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;help<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Print usage information.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;accept-self-signed-certs<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Accept self-signed server certificates.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\"> &#8211;accept-hostname-mismatch <\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Allow certs with a mismatched hostname.<\/p>\n<h4>Examples<\/h4>\n<p>The following command causes Ms3SampleClinet to parse the specified Ms3 compound URL and output the URL information. Please note that the URL used in this example is not longer valid.<\/p>\n<p><b style=\"word-wrap:break-word; font-size: 15px;\"><br \/>\n  Ms3SampleClient https:\/\/ms3.eval.hostedmarlin.com:8443\/hms\/ms3\/rights\/?b=ABEAAwAAAasAB3dzYnRlc3RYIgAQ1-2TdoUVIckPJZ1UxTQt7QCA1706lA44YQfJmSC7haOeylltKaEniwGPehRta0Dx-Yc0A-3cSJuztYg4XcaI9qyShzJUeq1G0NamOtv9t_2cvu17y3ApiA5quVyPAuP5fDJA9UZ1yCr83xnavUD18LVsu20EQtdAYMT0tpPB3cic016uyfPR-AbLXzO7zYSQZwIAAAAUr0ll_<br \/>\n7p2tfkApkyiHD807OgkuMI#http%3A%2F%2Fcontent.intertrust.com%2Fexpress%2Fdash%2Fmpd.xml<br \/>\n<\/b><\/p>\n<div><code>--- MS3 Client 1.0 ---<br \/>\nRetrieving URL https:\/\/ms3.eval.hostedmarlin.com:8443\/hms\/ms3\/rights\/?b=ABEAAwAAAasAB3dzYnRlc3RYIgAQ1-2TdoUVIckPJZ1UxTQt7QCA1706lA44YQfJmSC7haOeylltKaEniwGPehRta0Dx-Yc0A-3cSJuztYg4XcaI9qyShzJUeq1G0NamOtv9t_2cvu17y3ApiA5quVyPAuP5fDJA9UZ1yCr83xnavUD18LVsu20EQtdAYMT0tpPB3cic016uyfPR-AbLXzO7zYSQZwIAAAAUr0ll_7p2tfkApkyiHD807OgkuMI#http%3A%2F%2Fcontent.intertrust.com%2Fexpress%2Fdash%2Fmpd.xml<br \/>\nSAS:<br \/>\nKey 1:<br \/>\n  Content ID Hash: 1c7ef96d87458bd453cb846d217027fae6ead5de<br \/>\n  Key Value:       a0a1a2a3a4a5a6a7a8a9aaabacadaeaf<br \/>\nAuthenticator:<br \/>\nFlags: (none)<br \/>\nOutput Control: (0,0 hex)<br \/>\nExtension 1: (NON-CRITICAL) type=7775646f, payload=00000000<\/p>\n<p>Content URL: http:\/\/content.intertrust.com\/express\/dash\/mpd.xml<br \/>\n<\/code><\/div>\n<h3>WasabiDashInfo<\/h3>\n<h4>Description<\/h4>\n<p>Given an MPD DASH manifest file, WasabiDashInfo parses the file and outputs information about the content, either to the console or to a specified text file.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiDashInfo [options]<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;pretty-print &lt;url&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">This option is required. It specifies the URL (local or remote) to the MPD file.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;output-file &lt;filename&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">If included, this option specifies the name of the output file to be used to store the tool output. If this option is not included, the tool output will be written to the console\/stdout.<\/p>\n<h4>Example<\/h4>\n<p>The following command causes WasabiDashInfo to parse the specified MPD file and output content information. Some of the output is shown.<\/p>\n<p><b>WasabiDashInfo &#8211;pretty-print http:\/\/content.acme.com\/dash\/cleartext-split\/mpd.xml<\/b><\/p>\n<div><code>MPD:<br \/>\n    Document Base URL:            http:\/\/content.acme.com\/dash\/ cleartext-split\/<br \/>\n    @id:<br \/>\n    @profiles:                    urn:mpeg:dash:profile:isoff-live:2011<br \/>\n    @type:                        MPD_STATIC<br \/>\n    @availabilityStartTime:       Thu Jan  1 00:00:00 1970<br \/>\n    @availabilityEndTime:         Thu Jan  1 00:00:00 1970<br \/>\n    @mediaPresentationDuration:   888<br \/>\n    @minimumUpdatePeriod:         0<br \/>\n    @minBufferTime:               3<br \/>\n    @timeShiftBufferDepth:        0<br \/>\n    @suggestedPresentationDelay:  0<br \/>\n    @maxSegmentDuration:          0<br \/>\n    @maxSubSegmentDuration:       0<br \/>\n    # of ProgramInformations: 0<br \/>\n    # of BaseUrls: 0<br \/>\n    # of Locations: 0<br \/>\n    # of Periods: 1<br \/>\n    Period(1):<br \/>\n        @id:<br \/>\n        @start:                 0<br \/>\n        @duration:              0<br \/>\n        @bitstreamSwitching:    false<br \/>\n        # of BaseUrls: 0<br \/>\n        SegmentBase:<br \/>\n        SegmentList:<br \/>\n        SegmentTemplate:<br \/>\n        # of AdaptationSets: 2<br \/>\n        AdaptationSet(1):<br \/>\n            @profiles:<br \/>\n            @width:                 0<br \/>\n            @height:                0<br \/>\n            @sar:<br \/>\n            @frameRate:<br \/>\n            @audioSamplingRate:<br \/>\n            @mimeType:              audio\/mp4<br \/>\n            @segmentProfiles:<br \/>\n            @codecs:<br \/>\n            @maximumSAPPeriod:      0.000000<br \/>\n            @startWithSAP:          0<br \/>\n            @maxPlayoutRate:        0.000000<br \/>\n            @codingDependency:      false<br \/>\n            @scanType:              UNKNOWN<br \/>\n            # of FramePackings: 0<br \/>\n            # of AudioChannelConfigurations: 0<br \/>\n            # of ContentProtections: 0<br \/>\n            @id:                        0<br \/>\n            @group:                     0<br \/>\n..............<\/code><\/div>\n<h3>WasabiDashToMp4<\/h3>\n<h4>Description<\/h4>\n<p>Given a URL to an MPEG DASH MPD (Media Presentation Description), WasabiDashToMp4 creates an MP4 file containing the content referenced by the MPD.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiDashToMp4 [options] &lt;url&gt; &lt;mp4file&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;skip-to-ms &lt;ms&gt;<\/span> \u2013 number of milliseconds of input content to skip before adding content to the output MP4 file. If this option is not specified, all the content will be included in the output file.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;extract-upto &lt;seconds&gt;<\/span> \u2013 The number of seconds (in real-time) that the MPD will be processed and written to the mp4file. Typically used in the case of dynamic MPDs where the MPD does not necessarily end and to exit out of this tool after gathering enough output.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;accept-all-codecs<\/span> \u2013 if this option is specified, codec filtering is not used and the client will accept all codecs that are in the MPD. If this option is not specified, the default codec filter will ingest only avc1 and mp4a content and write that to the mp4file.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;key &lt;kid&gt;:&lt;key&gt;<\/span> \u2013 decryption key ID and key, where both are 32 hex characters (16 bytes). There can be more than one &#8211;key option specified.<\/p>\n<p>&lt;url&gt; \u2013 URL to the MPD specifying the input content. This URL can start with http:\/\/ (or, equivalently, dash:\/\/) or https:\/\/ (or equivalently, dashs:\/\/).<\/p>\n<p>&lt;mp4file&gt; \u2013 The MP4 file created.<\/p>\n<h4>Examples<\/h4>\n<p>The following outputs the clear DASH content specified in the <i>mpd.xml<\/i> file to the MP4 output file <i>output.mp4<\/i>, skipping the first 10 seconds of input content:<\/p>\n<p><b>WasabiDashToMp4 &#8211;skip-to-ms 10000 http:\/\/localhost\/acme\/mpd.xml output.mp4<\/b><\/p>\n<p><b>WasabiDashToMp4 &#8211;accept-all-codecs http:\/\/www.somecompany.com\/somecontent\/test.mpd ~\/movies\/test.mp4<\/b><\/p>\n<p>The example above makes use of the accept-all-codecs option.<\/p>\n<p><b>WasabiDashToMp4 &#8211;extract-upto 30 http:\/\/www.comecompany.com\/somecontent\/dynamic.mpd ~\/movies\/test.mp4<\/b><\/p>\n<p>The example above makes use of the extract-upto option.<\/p>\n<h3>WasabiDashToMpeg2TS<\/h3>\n<h4>Description<\/h4>\n<p>WasabiDashToMpeg2Ts is a command line example to download clear or encrypted DASH presentation with MPEG-2 TS segments of different bitrate depending on available bandwidth and save it to a MPEG-2 transport stream file.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiDashToMpeg2TS [options] &lt;url&gt; &lt;mpeg2tsfile&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;skip-to-ms &lt;ms&gt;<\/span> \u2013 (Only for static MPD.) Number of milliseconds of input content to skip before adding content to the output file. If this option is not specified, all the content will be included in the output file.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;extract-up &lt;seconds&gt;<\/span> \u2013 Seconds of time to extract<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;accept-all-codecs<\/span> \u2013 if this option is specified, codec filtering is not used and the client will accept all codecs that are in the MPD. If this option is not specified, the default codec filter will ingest only avc1 and mp4a content and write that to the mp4file.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;key &lt;kid&gt;:&lt;key&gt;<\/span> \u2013 Content id and decryption key ID. Each consists of 32 hex characters (16 bytes). There can be more than one &#8211;key option specified.<\/p>\n<h3>WasabiDashTrace<\/h3>\n<h4>Description<\/h4>\n<p>Given a URL to DASH MPD (Media Presentation Description), WasabiDashTrace downloads the MPD and its media segments and prints information based on the same. The WasabiDashTrace implementation uses the Wasabi MediaAccess SDK API&#8217;s and callbacks. This example can be used to implement a custom solution.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiDashTrace [options] &lt;url&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;audio-codec &lt;codec&gt;<\/span> \u2013 Default value: mp4a<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;video-codec &lt;codec&gt;<\/span> \u2013 Default value: avc1<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;audio-representation-id &lt;id&gt;<\/span> \u2013 By default, the value is set to the first audio representation that matches the default audio codec.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;video-representation-id &lt;id&gt;<\/span> \u2013 By default, the value is be set to the first video representation that matches the default video codec.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;audio-language &lt;language&gt;<\/span> \u2013 By default, the value is set to whatever language the matched audio representation has.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;video-role &lt;role&gt;<\/span> \u2013 Will be defaulted to urn:mpeg:dash:role:2011 (based on requirements of HbbTV spec).<\/p>\n<p>If any of these options are given, only the stream matching these criteria will be considered for download.<\/p>\n<p><span class=\"courier\">&#8211;key &lt;kid&gt;:&lt;key&gt;<\/span> \u2013key ID and key. Required for decryption of encrypted streams<\/p>\n<h4>Example<\/h4>\n<p><b>WasabiDashTrace<\/b> http:\/\/content.intertrust.com\/dash_examples\/bunny.mpd<\/p>\n<p>In this example, WasabiDashTrace takes only a URL and no options. Therefore, only the defaults are used.<\/p>\n<h3>WasabiDbWiper<\/h3>\n<h4>Description<\/h4>\n<p>Deletes the Sushi and License Store databases used by Wasabi.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiDbWiper<\/span><\/p>\n<h4>Parameters<\/h4>\n<p>None.<\/p>\n<h4>Example<\/h4>\n<p><b>#WasabiDbWiper<\/b><\/p>\n<h3>WasabiFile<\/h3>\n<h4>Description<\/h4>\n<p>Returns information about a specified media file (MP4, PDCF, DCF, MPEG-2, BBTS,&#8230;). Includes the content type, protection type (if any), the track numbers and types, file or track content IDs (as relevant), and file metadata. Specifies whether there is an embedded license, and lists Silent License Acquisition URLs (if any).<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiFile &lt;input&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">&lt;input&gt;<\/span> \u2013 The media file whose information will be returned.<\/p>\n<h4>Examples<\/h4>\n<p>Here is an example of calling WasabiFile to obtain information about an MP4 file:<\/p>\n<p><b>#WasabiFile bigbucksbunny-trailer.mp4<\/b><\/p>\n<div><code>Content type: video\/mp4<br \/>\nProtection: 1: CLEAR-TEXT<br \/>\nFile Content ID: (nil)<br \/>\nTrack count: 2<br \/>\nINDEX   TYPE    ID      CONTENT ID<br \/>\n0       AUDIO   1       (nil)<br \/>\n1       VIDEO   2       (nil)<br \/>\nmetadata = [L] 1:<br \/>\n  protection = [S] none<br \/>\nNo license<br \/>\nNo SLA URLs<\/code><\/div>\n<p>Here is an example of calling WasabiFile on a PDCF file created from the above MP4 file, for example by calling mp4encrypt (\u00a74.10):<\/p>\n<p><b>#WasabiFile bigbucksbunny-trailer.mlv<\/b><\/p>\n<div><code>Content type: video\/mp4<br \/>\nProtection: 3: PDCF<br \/>\nFile Content ID: (nil)<br \/>\nTrack count: 2<br \/>\nINDEX   TYPE    ID      CONTENT ID<br \/>\n0       AUDIO   1       urn:marlin:intertrust:test-webstore:0001<br \/>\n1       VIDEO   2       urn:marlin:intertrust:test-webstore:0001<br \/>\nmetadata = [L] 1:<br \/>\n  protection = [S] PDCF<br \/>\nNo license<br \/>\nSilentLicenseAcquisitionUrls = [L] 1:<br \/>\n  urn:marlin:intertrust:test-webstore:0001 = [S] http:\/\/localhost:8000\/transact?guid=urn:marlin:intertrust:test-webstore:0001&amp;user_octopus_id={m:type=user}&amp;device_octopus_id={m:type=personality}<\/code><\/div>\n<p>Here are sample calls on an MPEG-2 TS file and a corresponding BBTS file (e.g., created from the MPEG-2 TS file using Ts2Encrypt, \u00a74.19), respectively:<\/p>\n<p><b>#WasabiFile bigbucksbunny-trailer.ts<\/b><\/p>\n<div><code>Content type: video\/MP2T<br \/>\nProtection: 1: CLEAR-TEXT<br \/>\nFile Content ID: (nil)<br \/>\nTrack count: 2<br \/>\nINDEX   TYPE    ID      CONTENT ID<br \/>\n0       AUDIO   257     (nil)<br \/>\n1       VIDEO   258     (nil)<br \/>\nNo metadata<br \/>\nNo license<br \/>\nNo SLA URLs<\/code><\/div>\n<p><b>#WasabiFile bigbucksbunny-trailer.bbts<\/b><\/p>\n<div><code>Content type: video\/MP2T<br \/>\nProtection: 5: BBTS<br \/>\nFile Content ID: cid:marlin#Suniversal@deadbeef<br \/>\nTrack count: 2<br \/>\nINDEX   TYPE    ID      CONTENT ID<br \/>\n0       AUDIO   257     (nil)<br \/>\n1       VIDEO   258     (nil)<br \/>\nNo metadata<br \/>\nNo license<br \/>\nNo SLA URLs<\/code><\/div>\n<h3>WasabiLicenseStore<\/h3>\n<h4>Description<\/h4>\n<p>Manages a database of Marlin Broadband licenses.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiLicenseStore [options]<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;help<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Outputs the usage statement for this tool.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;list<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Lists the license number and license ID for all the licenses in the License Store.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;insert &lt;license-file-name&gt; [tag]<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Inserts the license from the specified file into the License Store. Returns a license ID assigned by the License Store to the license that was added. If you include an optional string tag, that tag will be associated with the license in the License Store.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;enumerate &lt;flag&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Enumerates all the licenses in the License Store, and for each includes the license number and the type of information signaled by the flag. The possible flag values are the following:<\/p>\n<p style=\"text-indent: 6em\" ;=\"\">. LD specifies inclusion of license data, that is, the XML specifying the license that was previously passed to the &#8211;insert option.<\/p>\n<p style=\"text-indent: 6em\" ;=\"\">. ED specifies inclusion of expiration dates, that is, the date each license expired (in minutes since midnight January 1, 1970), with -1 signaling that a license has not yet expired.<\/p>\n<p style=\"text-indent: 6em\" ;=\"\">. ID specifies inclusion of insertion dates, the date each license was inserted into the store, in minutes since midnight January 1, 1970.<\/p>\n<p style=\"text-indent: 6em\" ;=\"\">. LT specifies inclusion of the license tag (if any) assigned to each license when it was inserted.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;find &lt;content-ID&gt;&#8230;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Finds and lists all the licenses in the License Store referencing the specified content ID(s). If there is more than one content ID, the IDs should be separated by whitespace (such as one or more spaces).<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;get &lt;license-ID&gt; &lt;output-filename&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Finds the license in the License Store with the specified license ID, and stores the license in a file with the specified output filename.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;remove &lt;license-ID&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Removes from the License Store the license with the specified license ID.<\/p>\n<h4>Examples<\/h4>\n<p>The following call inserts into the License Store the license in the file saved-license.xml, and returns the license ID assigned by the License Store to the newly inserted license.<\/p>\n<p><b>#WasabiLicenseStore &#8211;insert saved-license.xml<\/b><\/p>\n<div><code>license id=1<\/code><\/div>\n<p>Here is an example of what a call with the &#8211;list option would return if the License Store was empty before the previous call. The &#8211;list option results in the listing of one line per license, and for each license it shows the license number and the license ID.<\/p>\n<p><b>#WasabiLicenseStore &#8211;list<\/b><\/p>\n<div><code>license 0: id=1<\/code><\/div>\n<p>Suppose you insert another license, and for this license you specify a tag <i>(BigBuckyLicense)<\/i> to be associated with it:<\/p>\n<p><b>#WasabiLicenseStore &#8211;insert license2.xml BigBuckyLicense<\/b><\/p>\n<div><code>license id=2<\/code><\/div>\n<p>Now the &#8211;list option will return information about two licenses:<\/p>\n<p><b>#WasabiLicenseStore &#8211;list<\/b><\/p>\n<div><code>license 0: id=1<br \/>\nlicense 1: id=2<\/code><\/div>\n<p>and the &#8211;enumerate LT option will show that the first license inserted did not have a tag, but the second license inserted was assigned the tag <i>BigBuckyLicense<\/i>:<\/p>\n<p><b>#WasabiLicenseStore &#8211;enumerate LT<\/b><\/p>\n<div><code>license 0: license tag=<br \/>\nlicense 1: license tag=BigBuckyLicense<\/code><\/div>\n<p>You can store a copy of the license with ID 1 in a file named <i>license-1.xml<\/i> via the following:<\/p>\n<p><b>#WasabiLicenseStore &#8211;get 1 license-1.xml<\/b><\/p>\n<p>You can find all the licenses in the License Store that reference the content ID urn:marlin:intertrust:test-webstore:0001 via the following. If that is the content ID for a media file whose license is specified in saved-license.xml (the license first stored as shown above in the License Store), the result will be the following:<\/p>\n<p><b>#WasabiLicenseStore &#8211;find urn:marlin:intertrust:test-webstore:0001<\/b><\/p>\n<div><code>license 0: id=1<\/code><\/div>\n<p>The following shows an example of enumerating license expiration dates, for a situation where the license with license number 0 has not yet expired (signaled by a value of -1) but the one with license number 1 has:<\/p>\n<p><b>#WasabiLicenseStore &#8211;enumerate ED<\/b><\/p>\n<div><code>license 0: expire date=-1<br \/>\nlicense 1: expire date=21024000<\/code><\/div>\n<p>The following shows removing the license with license ID 2, and the subsequent License Store listing.<\/p>\n<p><b>#WasabiLicenseStore &#8211;remove 2<\/b><\/p>\n<p><b>#WasabiLicenseStore &#8211;list<\/b><\/p>\n<div><code>license 0: id=1<\/code><\/div>\n<h3>WasabiMp4Decrypt<\/h3>\n<h4>Description<\/h4>\n<p>Given a URL (which may optionally be an MS3 URL) referencing PDCF content, this tool downloads the content (if it is not local), decrypts it, and produces an MP4 file with the clear content.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiMp4Decrypt &lt;input&gt; &lt;output&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">&lt;input&gt;<\/span> \u2013 The MS3 compound URI referencing PDCF or DCF content.<\/p>\n<p><span class=\"courier\">&lt;output&gt;<\/span> \u2013 The MP4 file produced by WasabiMp4Decrypt.<\/p>\n<h4>Example<\/h4>\n<p>The following command redeems the MS3 compound URI specified in the file <i>ms3_dcf_compound_uri.txt<\/i>, retrieves the associated content file, decrypts it, and stores the result in <i>decrypted.mp4<\/i>. Please note that the use of text within backtick characters (`) referencing a subcommand to be executed prior to the top-level command is available for shells like bash, sh, csh, and so on. In the Windows default shell (the Command Prompt window), the command line should contain the MS3 compound URI itself, instead of `cat ms3_dcf_compound_uri.txt`.<\/p>\n<p><b>WasabiMp4Decrypt `cat ms3_dcf_compound_uri.txt` decrypted.mp4<\/b><\/p>\n<h3>WasabiMp4License<\/h3>\n<h4>Description<\/h4>\n<p>This tool is used to insert a license into an MP4-based media file, or to output to stdout the license embedded within such a media file.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiMp4License [&lt;license-filename&gt;] &lt;mp4-filename&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">&lt;license-filename&gt;<\/span><\/p>\n<p>If this parameter is specified, WasabiMp4License embeds the license from the specified file into the MP4 file, replacing any license that is already embedded.<\/p>\n<p><span class=\"courier\">&lt;mp4-filename&gt;<\/span><\/p>\n<p>The MP4 file into which a license should be embedded (if a license file is specified), or from which the embedded license bytes (if any) should be obtained and output to stdout.<\/p>\n<h4>Example<\/h4>\n<p>The following embeds the license from <i>license-to-insert.xml<\/i> into <i>magicalevent.mp4<\/i>.<\/p>\n<p><b>WasabiMp4License license-to-insert.xml magicalevent.mp4<\/b><\/p>\n<h3>WasabiSushiAction<\/h3>\n<h4>Description<\/h4>\n<p>Used to obtain a description of the control program code in a license (that is, the license requirements), or to determine whether a requested action (typically \u2018Play\u2019) on particular Marlin content is allowed, given a specified license. The exact behavior depends on the specified operation and action name. If the operation is Describe, then the license requirements description is returned, specifying the set of all conditions checked. If the operation is Check or Perform, then the license is examined to determine whether the requested action is allowed. If it is not, then these specify which condition(s) failed. If the action is allowed, and the operation is Perform, this tool returns the content key(s) required to decrypt the content.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiSushiAction [options] &lt;operation&gt; &lt;action-name&gt; &lt;license-data-filename&gt; &lt;content-ID&gt; [&lt;content-ID&gt; &#8230;]<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;accept<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Blindly accept all obligations and callbacks. This option is only useful for the Perform operation. It will be ignored for all other operations.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;parameters &lt;filename&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Read the action parameter block from &lt;filename&gt;. This option can only be used for actions that expect parameters.<\/p>\n<p><span class=\"courier\">&lt;operation&gt;<\/span> \u2013 One of the following: Describe, Check, or Perform.<\/p>\n<p><span class=\"courier\">&lt;action-name&gt;<\/span> \u2013 The possible action names depend on the control in the license. The Play action is most commonly used, but others such as Export may also be available.<\/p>\n<p><span class=\"courier\">&lt;license-data-filename&gt;<\/span> \u2013 The name of the license file.<\/p>\n<p><span class=\"courier\">&lt;content-ID&gt;<\/span> \u2013 A content ID. There may be more than one, separated by whitespace.<\/p>\n<h4>Examples<\/h4>\n<p>The following is an example of calling WasabiSushiAction with the Describe operation and the Play action to find out the constraints of a particular license. In this example, there is a single Node Reachability constraint that indicates that the Play action on the content will be allowed only if the specified Node representing the user is \u201creachable.\u201d A Node is considered reachable if there is a Link (or multiple Links) from the Node representing the device on which the tool is run to the specified Node. There is a Link from the device Node to the user Node if the device has been registered to the user.<\/p>\n<p><b>WasabiSushiAction Describe Play permanent-user-bound-license.xml urn:m arlin:intertrust:test-webstore:0001<\/b><\/p>\n<div><code>==== Sushi Action V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nLicense Info Details:<br \/>\n  [L] 1:<br \/>\n    GenericConstraints = [L] 1:<br \/>\n      NodeReachabilityRequired = [S] urn:marlin:organization:service-provider-v:8pususer:8<\/code><\/div>\n<p>The following two example calls are the same as the previous example, except for the operation being Check and Perform, respectively, instead of Describe. As you can see, both of these indicate that the Play action is granted, and when the specified operation is Perform, the key needed to decrypt the content is also returned.<\/p>\n<p><b>WasabiSushiAction Check Play permanent-user-bound-license.xml urn:marl in:intertrust:test-webstore:0001<\/b><\/p>\n<div><code>==== Sushi Action V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nAction Result: GRANTED<br \/>\nAction Result Info Flag(s):<br \/>\n======================================================================<\/code><\/div>\n<p><b>WasabiSushiAction Perform Play permanent-user-bound-license.xml urn:ma rlin:intertrust:test-webstore:0001<\/b><\/p>\n<div><code>==== Sushi Action V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nAction Result: GRANTED<br \/>\nAction Result Info Flag(s):<br \/>\nKEY 0 = 000102030405060708090a0b0c0d0e0f<br \/>\n======================================================================<\/code><\/div>\n<p>Here is another example of calling WasabiSushiAction with the Describe operation. In this example, the specified license has both a device constraint (indicating that the license allows the content to be played only on the specified device) and temporal constraints indicating that the content can be played only between midnight January 1, 2009 and the end of 2010.<\/p>\n<p><b>WasabiSushiAction Describe Play old-license.xml urn:marlin:intertrust: test-webstore:0001<\/b><\/p>\n<div><code>==== Sushi Action V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nLicense Info Details:<br \/>\n  [L] 2:<br \/>\n    DeviceConstraints = [L] 1:<br \/>\n      DeviceIdRequired = [S] urn:marlin:organization:seacert:companya:8pusperso:012f3a<br \/>\n    TemporalConstraints = [L] 2:<br \/>\n      NotBefore = [D] 01\/01 2009 00:00:00<br \/>\n      NotAfter = [D] 31\/12 2010 23:59:00<br \/>\n======================================================================<\/code><\/div>\n<p>If you make the same call to WasabiSushiAction, this time specifying the Check or Perform operation, the output shows that the Play action is denied, and the reason it is denied (failure of the NotAfter condition) is displayed:<\/p>\n<p><b>WasabiSushiAction Perform Play old-license.xml urn:marlin:intertrust:t est-webstore:0001<\/b><\/p>\n<div><code>==== Sushi Action V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nAction Result: DENIED<br \/>\nAction Result Info Flag(s):<br \/>\nDetails:<br \/>\n    [L] 1:<br \/>\n      TemporalConstraints = [L] 1:<br \/>\n        NotAfter = [D] 31\/12 2010 23:59:00<br \/>\n======================================================================<\/code><\/div>\n<h3>WasabiSushiInfo<\/h3>\n<h4>Description<\/h4>\n<p>Provides information about Sushi version numbers, property settings, Nodes, Links, etc., and indicates whether or not the device this is run on has been personalized.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiSushiInfo<\/span><\/p>\n<h4>Parameters<\/h4>\n<p>There are no parameters.<\/p>\n<h4>Example<\/h4>\n<p><b>WasabiSushiInfo<\/b><\/p>\n<div><code>==== Sushi Info V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040300<br \/>\nSDK IMP Build:   0<br \/>\nSDK IMP Details: (c) 2005-2011 Intertrust Technologies \/ Revision 0000<br \/>\n============= Engine Info ===============<br \/>\nEngine Version: 00.01.02.00<br \/>\nTrusted Time: 2011:05:04 20:33:05 UTC<br \/>\n15 properties:<br \/>\n  Version = 66048 [00010200]<br \/>\n  BuildDate = 'May  4 2011 00:09:24'<br \/>\n  IsPersonalized = false<br \/>\n  Personality = attribute(null)<\/p>\n<p>  HttpProxyHostname = ''<br \/>\n  HttpProxyPort = 0 [00000000]<br \/>\n  HttpProxyEnabled = false<br \/>\n  HttpProxySystemDefault = true<br \/>\n  HttpsProxyHostname = ''<br \/>\n  HttpsProxyPort = 0 [00000000]<br \/>\n  HttpConnectionTimeout = 30000 [00007530]<br \/>\n  HttpIOTimeout = 30000 [00007530]<br \/>\n  PreferredLanguages = 1 entries:<br \/>\n  'en'<\/p>\n<p>  CachePolicy = 1 [00000001]<br \/>\n  Nemo = attribute(null)<br \/>\nEngine not personalized<br \/>\n======================================================================<\/code><\/div>\n<h3>WasabiSushiPersonalize<\/h3>\n<h4>Description<\/h4>\n<p>Personalizes the device on which it is run, obtaining credentials (keys, certificates, etc.) necessary to provide a unique identity required for interactions with other Marlin entities. Personalization is described in detail in the <i>Sushi Deployment Guide<\/i>.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiSushiPersonalize [&#8211;update] [&#8211;config &lt;filename&gt;] [&lt;personalization-token-filename&gt;]<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">&#8211;update<\/span><\/p>\n<p>If specified, this option causes an update of the public credential of existing personality using the renewal action token from personalization-token-filename argument.  If no personalization token filename is specified, a default personalization token is used, supplying the device with credentials suitable only for testing purposes.<\/p>\n<p>If the &#8211;update option is not specified, personalization is performed as before.<\/p>\n<p><span class=\"courier\">&#8211;config &lt;filename&gt;<\/span><\/p>\n<p>Specifies a configuration file setting Sushi and\/or Wasabi properties, with each property name and value specified as a name=value pair, one per line.<\/p>\n<p><span class=\"courier\">&lt;personalization-token-filename&gt;<\/span><\/p>\n<p>Specifies an XML file containing a personalization token. If no personalization token filename is specified, a default personalization token is used, supplying the device with credentials suitable only for testing purposes.<\/p>\n<h4>Example<\/h4>\n<p><b>WasabiSushiPersonalize<\/b><\/p>\n<div><code>==== Sushi Personalizer V1.0 =========================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nOnEvent - &gt; BEGIN [SHI_TRANSACTION_TYPE_PERSONALIZATION]<br \/>\nOnEvent - &gt; PROGRESS: 0 of 4<br \/>\nOnEvent - &gt; PROGRESS: 1 of 4<br \/>\nOnEvent - &gt;&gt; BEGIN [SHI_TRANSACTION_TYPE_PERSONALIZATION]<br \/>\nOnEvent - &gt;&gt; PROGRESS: 0 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 1 of 2<br \/>\nOnEvent - &gt;&gt; PROGRESS: 2 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 3 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 4 of 4<br \/>\nOnEvent - &gt;&gt; END: code=0, message=''<br \/>\nOnEvent - &gt; PROGRESS: 2 of 4<br \/>\nOnEvent - &gt; PROGRESS: 3 of 4<br \/>\nOnEvent - &gt; PROGRESS: 4 of 4<br \/>\nOnEvent - &gt; END: code=0, message=''<br \/>\nOnEvent - DONE<br \/>\n======================================================================<\/code><\/div>\n<h3>WasabiSushiProcessToken<\/h3>\n<h4>Description<\/h4>\n<p>Processes an \u201caction token\u201d XML document, and sends appropriate requests to a Marlin Broadband Server in order to request acquisition of a license or to perform a registration, such as registering a device to a user (represented by a Link from the device Personality Node to the User Node) or registering a user as a subscriber of a subscription (represented by a Link from the User Node to the Subscription Node).<\/p>\n<p>An action token may be sent by a web store to a Marlin Broadband Client application whenever the client (Sushi) needs to interact with a Marlin Broadband Server (which, in turn, interacts with the web store backend) in order to perform operations and obtain objects required to implement DRM functionality necessary to satisfy a user request.<\/p>\n<h4>Usage<\/h4>\n<p><span class=\"courier\">WasabiSushiProcessToken [options] &lt;token-filename&gt;<\/span><\/p>\n<h4>Parameters<\/h4>\n<p><span class=\"courier\">[options]:<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;config &lt;filename&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">Specifies a configuration file setting Sushi and\/or Wasabi properties, with each property name and value specified as a name=value pair, one per line.<\/p>\n<p style=\"text-indent: 3em\" ;=\"\"><span class=\"courier\">&#8211;save-license &lt;filename&gt;<\/span><\/p>\n<p style=\"text-indent: 3em\" ;=\"\">For a license acquisition, this specifies the name of the file into which the license should be stored.<\/p>\n<p><span class=\"courier\">&lt;token-filename&gt;<\/span> \u2013 The action token XML document.<\/p>\n<h4>Examples<\/h4>\n<p>Here is a sample license acquisition action token for acquiring a device-bound license:<\/p>\n<div><code>&lt;ActionToken xmlns='urn:marlin:broadband:1-2:nemo:services:action-token'<br \/>\n             xmlns:xsi='http:\/\/www.w3.org\/2001\/XMLSchema-instance'&gt;<br \/>\n    &lt;ConfigurationInfo broadbandServiceId='urn:marlin:organization:service-provider-v:marlin-service:e71e5866' configVersion='1'&gt;<br \/>\n        &lt;ResourceLocation&gt;http:\/\/bb-test.intertrust.com:8080\/ws\/ConfigurationToken.jsp&lt;\/ResourceLocation&gt;<br \/>\n    &lt;\/ConfigurationInfo&gt;<br \/>\n    &lt;LicenseAcquisition&gt;<br \/>\n        &lt;Type&gt;personality&lt;\/Type&gt;<br \/>\n        &lt;BusinessToken&gt;FHIX7fJnVFoUq2qhKhZHAFIgGuQBAAAAAAAAAJEGAAAAAAAAAwAAAAAAAAA=<br \/>\n        &lt;\/BusinessToken&gt;<br \/>\n    &lt;\/LicenseAcquisition&gt;<br \/>\n&lt;\/ActionToken&gt;<\/code><\/div>\n<p>The following command processes the license acquisition action token specified in <i>license-a-t.xml<\/i>, and saves the acquired license in a file named <i>license.xml<\/i>.<\/p>\n<p><b>WasabiSushiProcessToken &#8211;save-license license.xml license-a-t.xml<\/b><\/p>\n<div><code>==== Sushi Token Processor V1.0 ======================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nOnEvent - &gt; BEGIN [SHI_TRANSACTION_TYPE_SERVICE_TOKEN_PROCESSING]<br \/>\nOnEvent - &gt; PROGRESS: 0 of 3<br \/>\nOnEvent - &gt; PROGRESS: 1 of 3<br \/>\nOnEvent - &gt;&gt; BEGIN [SHI_TRANSACTION_TYPE_LICENSE_ACQUISITION]<br \/>\nOnEvent - &gt;&gt; PROGRESS: 0 of 2<br \/>\nOnEvent - &gt;&gt; PROGRESS: 1 of 2<br \/>\nOnEvent - &gt;&gt; EVENT: event type 9<br \/>\nOnEvent - &gt;&gt; PROGRESS: 2 of 2<br \/>\nOnEvent - &gt;&gt; END: code=0, message=''<br \/>\nOnEvent - &gt; PROGRESS: 2 of 3<br \/>\nOnEvent - &gt; PROGRESS: 3 of 3<br \/>\nOnEvent - &gt; END: code=0, message=''<br \/>\nOnEvent \u2013 DONE<br \/>\n======================================================================<\/code><\/div>\n<p>The following is an example of a registration action token for registering a device to a particular user:<\/p>\n<div><code>&lt;?xml version='1.0' encoding='UTF-8' standalone='yes'?&gt;<\/p>\n<p>&lt;ActionToken xmlns='urn:marlin:broadband:1-2:nemo:services:action-token'<br \/>\n             xmlns:xsi='http:\/\/www.w3.org\/2001\/XMLSchema-instance'&gt;<br \/>\n    &lt;ConfigurationInfo broadbandServiceId='urn:marlin:organization:service-provider-v:marlin-service:e71e5866' configVersion='1'&gt;<br \/>\n        &lt;ResourceLocation&gt;http:\/\/bb-test.intertrust.com:8080\/ws\/ConfigurationToken.jsp&lt;\/ResourceLocation&gt;<br \/>\n    &lt;\/ConfigurationInfo&gt;<br \/>\n    &lt;NodeAcquisition&gt;<br \/>\n        &lt;BusinessToken&gt;QlbvkAQ3LHh33JsEeehsI49fXy0BAAAAAAAAAJ0BAAAAAAAAAQAAAAAAAAA=<br \/>\n        &lt;\/BusinessToken&gt;<br \/>\n    &lt;\/NodeAcquisition&gt;<br \/>\n    &lt;LinkAcquisition&gt;<br \/>\n        &lt;Type&gt;personality&lt;\/Type&gt;<br \/>\n        &lt;Uid&gt;urn:marlin:organization:service-provider-v:8pususer:8&lt;\/Uid&gt;<br \/>\n        &lt;BusinessToken&gt;PfagqZNezsxkItnaNvBw3cKuKScBAAAAAAAAAJ4BAAAAAAAAAgAAAAAAAAA=<br \/>\n        &lt;\/BusinessToken&gt;<br \/>\n    &lt;\/LinkAcquisition&gt;<br \/>\n&lt;\/ActionToken&gt;<\/code><\/div>\n<p>Here is an example of calling WasabiSushiProcessToken with the above registration action token, in a file named bb-registration-action-token.xml:<\/p>\n<p><b>#WasabiSushiProcessToken bb-registration-action-token.xml<\/b><\/p>\n<p>The output will look like the following:<\/p>\n<div><code>==== Sushi Token Processor V1.0 =============================================<br \/>\nSDK API Version: 0.1.1.6<br \/>\nSDK IMP Version: 1040000<br \/>\nSDK IMP Build:   7157<br \/>\nSDK IMP Details: (c) 2005-2010 Intertrust Technologies \/ Revision 7157<br \/>\nOnEvent - &gt; BEGIN [SHI_TRANSACTION_TYPE_SERVICE_TOKEN_PROCESSING]<br \/>\nOnEvent - &gt; PROGRESS: 0 of 4<br \/>\nOnEvent - &gt; PROGRESS: 1 of 4<br \/>\nOnEvent - &gt;&gt; BEGIN [SHI_TRANSACTION_TYPE_USER_REGISTRATION]<br \/>\nOnEvent - &gt;&gt; PROGRESS: 1 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 2 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 3 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 4 of 4<br \/>\nOnEvent - &gt;&gt; END: code=0, message=''<br \/>\nOnEvent - &gt; PROGRESS: 2 of 4<br \/>\nOnEvent - &gt;&gt; BEGIN [SHI_TRANSACTION_TYPE_LINK_ACQUISITION]<br \/>\nOnEvent - &gt;&gt; PROGRESS: 0 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 1 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 2 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 3 of 4<br \/>\nOnEvent - &gt;&gt; PROGRESS: 4 of 4<br \/>\nOnEvent - &gt;&gt; END: code=0, message=''<br \/>\nOnEvent - &gt; PROGRESS: 3 of 4<br \/>\nOnEvent - &gt; PROGRESS: 4 of 4<br \/>\nOnEvent - &gt; END: code=0, message=''<br \/>\nOnEvent - DONE<br \/>\n======================================================================<\/code><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Advanced Test Tool Guide Introduction The ExpressPlay Advanced Test Tool (ATT) is a suite of command-line debugging tools for advanced Marlin BB use cases. In such cases you may need to examine the license data from a particular token or check that the content key or content ID is correct. The ATT provides such tools [&hellip;]<\/p>\n","protected":false},"author":124,"featured_media":0,"parent":10924,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-expressplay-developer.php","meta":{"_acf_changed":false,"footnotes":""},"tax_page_type":[512],"coauthors":[621],"class_list":["post-11025","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/pages\/11025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/users\/124"}],"replies":[{"embeddable":true,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/comments?post=11025"}],"version-history":[{"count":0,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/pages\/11025\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/pages\/10924"}],"wp:attachment":[{"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/media?parent=11025"}],"wp:term":[{"taxonomy":"tax_page_type","embeddable":true,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/tax_page_type?post=11025"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.expressplay.com\/ko\/wp-json\/wp\/v2\/coauthors?post=11025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}