|  |   | 
| Line 3: | Line 3: | 
|  | 
 |  | 
 | 
|  | = Digital Metadata = |  | = Digital Metadata = | 
|  | Digital Metadata can passed through key-values using the Nielsen reserved keys. The keys and values are listed by product below. |  | Digital Metadata can pass through key values using the Nielsen reserved keys. The keys and values are listed by the product below.   | 
|  | 
 |  | 
 | 
|  | == Digital ContentRatings (DCR) Metadata == |  | == Content Metadata== | 
|  | === Video Metadata ===
 |  | 
|  | <!--
 |  | 
|  | 
 |  | 
 | 
|  | ==== Example Video Metadata Object ====
 |  | 
|  | <syntaxhighlight lang="javascript">
 |  | 
|  | var contentMetadataObject =
 |  | 
|  | {  
 |  | 
|  |   type:           'content',
 |  | 
|  |   assetid:        'VID-123456',
 |  | 
|  |   program:        'The Big Bang Theory',
 |  | 
|  |   title:          'The Pants Alternative S03E18',  //no abbreviations or shorthand
 |  | 
|  |   length:         '1320',   //lengths in seconds
 |  | 
|  |   airdate:        '2021-03-21T12:00:00Z',
 |  | 
|  |   isfullepisode:  'y',
 |  | 
|  |   adloadtype:     '2',
 |  | 
|  |   segB:           'custom segment B', // optional
 |  | 
|  |   segC:           'custom segment C', // optional
 |  | 
|  |   crossId1:       'Standard Episode ID', // optional
 |  | 
|  |   crossId2:       'Content Originator' //optional
 |  | 
|  | };
 |  | 
|  | </syntaxhighlight>
 |  | 
|  | 
 |  | 
|  | === Ad Metadata ===
 |  | 
|  | The Ad Metadata (if applicable) should be passed for each individual ad.
 |  | 
|  | {| class="wikitable" |  | {| class="wikitable" | 
|  | |- |  | |- | 
|  | ! Keys	!! Description	!! Values	!! Required |  | ! Nielsen Key !! MMS Attribute Name/Field Name !! Description !! Values !! Required | 
|  | |- |  | |- | 
|  | | type 	|| type ofAd	|| <code>'preroll'</code>,  <code>'midroll'</code>,  <code>'postroll'</code> <br> <code>'ad'</code>  - If specific type can not be identified.||✓ |  | | type ||  || type of asset || "content" || yes | 
|  | |- |  | |- | 
|  | | assetid ||	unique ID assigned to Ad	||custom <br>(no [[Special Characters]])	|| ✓ |  | | assetid || Content ID, mms_tid || unique ID assigned to an asset within the same media house. || "For content on simulcast channels, this has a standard format: simulcast_channelnumber (e.g. for Channel TV4, the expected value is: simulcast_29). | 
|  | |}
 |  | A complete list of channel reference libraries with channel numbers is on the  [https://mms.se/?page_id=108 MMS homepage] | 
|  | 
 |  | 
 | 
|  | ==== Example Ad Object ====
 |  | For VoDs, it does not need to follow the simulcast_channelnumber format. | 
|  | <syntaxhighlight lang="javascript">
 |  | 
|  | var adMetadataObject = 
 |  | 
|  | {  
 |  | 
|  |   type:    'preroll',
 |  | 
|  |   assetid: 'AD-1'
 |  | 
|  | };
 |  | 
|  | </syntaxhighlight>
 |  | 
|  | 
 |  | 
 | 
|  | === Static Metadata ===
 |  | Length limit: 20 characters | 
|  | {|class="wikitable"
 |  | [https://engineeringportal.nielsen.com/docs/Special_Characters no special characters] || yes || | 
|  |  | |- | 
|  |  | | length || Clip Length, ns_st_cl || length of content in seconds || Length of content in seconds.  | 
|  |  | - for 24/7 live stream, 86400 | 
|  |  | - for event-Live streams, the planned length | 
|  |  | - for VoD, video length || yes | 
|  |  | |- | 
|  |  | | client_passthrough_parameters || MMS Values, mms_values || pass-through parameters || Example || mandatory for clients that have DAI service (Telia, Telenor, Canal-digital, Comhem, Boxer, Sappa, Discovery, Cmore) | 
|  |  | |- | 
|  |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | ! Key !! Description !! Data Type !! Value !! Required?
 |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | type ||asset type ||fixed ||<code>'static'</code> ||Yes |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | assetid ||Unique ID for each article ||dynamic ||custom <br>(no [[Special Characters]]) ||Yes |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | section ||section of each site (e.g. section value should be first level in page URL: website.com/section). Limit to 25 unique values ||dynamic ||custom <br>(no [[Special Characters]]) ||Yes |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | segA ||custom segment for reporting: Limit to 25 unique values across custom segments (segA + segB + segC) ||dynamic ||custom ||No |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | segB ||custom segment for reporting: Limit to 25 unique values across custom segments (segA + segB + segC) ||dynamic ||custom ||No |  | | Example || Example || Example || Example || Example | 
|  | |- |  | |- | 
|  | | segC ||custom segment for reporting: Limit to 25 unique values across custom segments (segA + segB + segC) ||dynamic ||custom ||No |  | | Example || Example || Example || Example || Example | 
|  | |} |  | |} | 
|  | 
 |  | 
 | 
|  | The values passed through the Nielsen keys will determine the breakouts that are seen in reporting. The custom segments (A, B & C) will roll into the sub-brand. To not use custom segments A, B and C, do not pass any value in these keys.
 |  | 
|  | 
 |  | 
 | 
|  | ==== Example Static Metadata Object ====
 |  |   | 
|  |  |   | 
|  |  |   | 
|  |  |   | 
|  |  | example of metadata object for content | 
|  |  |   | 
|  | <syntaxhighlight lang="javascript"> |  | <syntaxhighlight lang="javascript"> | 
|  | var contentMetadataObject = |  | var contentMetadataObject = { | 
|  | {   |  |    "assetid": "cz-500358-98731568435405", | 
|  |    type:'static', |  |    "type": "content", | 
|  |    assetid:'HHF887465-9486',// *DYNAMIC METADATA*: unique ID for each article **REQUIRED** |  |    "program": "Vítejte na svobodě", | 
|  |    section:'SPORTS',// *DYNAMIC METADATA*: section of site **REQUIRED** |  |    "title": "2. díl - 20.6.2018 20:00", | 
|  |    segA:'HD Videos',// *DYNAMIC METADATA*: custom segment |  |    "length": "3359", | 
|  |    segB:'',// *DYNAMIC METADATA*: custom segment |  |    "airdate": "20180620 20:00:00", | 
|  |    segC:''  // *DYNAMIC METADATA*:custom segment |  |   "isfullepisode": "y", | 
|  | };
 |  |   "crossId1": "915 954 39504", | 
|  | </syntaxhighlight>
 |  |   "nol_c1": "p1,", | 
|  |   |  |   "nol_c2": "p2, 651678089925925", | 
|  | == Digital TV Ratings (DTVR) Metadata ==
 |  |   "segB": "011", | 
|  | === Content Metadata ===
 |  |   "segC": "", | 
|  | {| class="wikitable"
 |  |    "adloadtype": "2", | 
|  | |-
 |  |    "hasAds": "1" | 
|  | ! Key !! Description !!	Values	 !! Required
 |  | 
|  | |-
 |  | 
|  | | type ||	type of asset	|| "content"|| ✓
 |  | 
|  | |-
 |  | 
|  | | adModel	|| linear vs dynamic ad model	|| * 1) - Linear – matches TV ad load * 2) Dynamic – Dynamic Ad Insertion (DAI)     || ✓
 |  | 
|  | |-
 |  | 
|  | |}
 |  | 
|  | ====Example Content Object====
 |  | 
|  | <syntaxhighlight lang="javascript"> var contentMetadataObject =
 |  | 
|  | {  
 |  | 
|  |    type:'content', |  | 
|  |    adModel:'1' |  | 
|  | }; |  | }; | 
|  | </syntaxhighlight> |  | </syntaxhighlight> | 
|  | ==== Custom Variables Extension ====
 |  | 
|  | If you are looking for additional reporting options, reach out to us. We have a [[Custom Variables Extension]] and can work with you to obtain your desired reporting.
 |  | 
|  | 
 |  | 
|  | 
 |  | 
|  | 
 |  | 
 | 
|  |  | == Ad Metadata== | 
|  | 
 |  | 
 | 
|  | {| class="wikitable" |  | {| class="wikitable" | 
|  | |- |  | |- | 
|  | ! Key |  | ! Nielsen Key !! MMS Attribute Name/Field Name !! Description !! Values !! Required   | 
|  | ! Description |  | 
|  | ! style="width: 14%;" | Values |  | 
|  | ! style="width: 12%;" | Required for Audio/Video? |  | 
|  | ! style="width: 12%;" | Required for Static (page)? |  | 
|  | ! Reported for
 |  | 
|  | |-
 |  | 
|  | | clientid || Brand value is automatically populated through the App ID provided. The value passed here will override the default value. (e.g. Multiple brands in App) || custom || Optional || Optional || Audio / Video and Static Measurement
 |  | 
|  | |-
 |  | 
|  | | subbrand || VCID value is automatically populated through the App ID provided. This value passed here will override the default value. (e.g. Multiple Sub-brands in App) || custom || Optional || Optional || Audio / Video and Static Measurement
 |  | 
|  | |-
 |  | 
|  | | type ||
 |  | 
|  | Type of measurement:
 |  | 
|  | *audio / video – "content"
 |  | 
|  | *page – "static"
 |  | 
|  | *ad – "preroll", "midroll" or "postroll"
 |  | 
|  | || "content", "static" || Mandatory || Mandatory || 
 |  | 
|  | |-
 |  | 
|  | | assetid || ID assigned to content. '''Must be unique and consistent''' across all content at the episode level, as well as across platforms (e.g. iOS and Android use the same ID). || custom<br>(no [[Special Characters]]) || Mandatory || Not Required || 
 |  | 
|  | |-
 |  | 
|  | | section || Section of site || custom || Not Required || Mandatory || 
 |  | 
|  | |-
 |  | 
|  | | isfullepisode || Full episode flag ||
 |  | 
|  | *"y" or "lf" - full episode
 |  | 
|  | *"n" or "sf" - short form
 |  | 
|  | || Mandatory || Not Required ||
 |  | 
|  | |-
 |  | 
|  | | program || Program name || custom || Mandatory || Not Required || Audio / Video Measurement
 |  | 
|  | |-
 |  | 
|  | | title || Episode title || custom || Mandatory || Not Required || Audio / Video Measurement
 |  | 
|  | |-
 |  | 
|  | | length || Length of content in seconds for VOD. 0 may be used for Live content if the exact content length is not known.  || custom || Mandatory || Not Required||
 |  | 
|  | |- |  | |- | 
|  | | segA ||Segment A (this is not available for audio / video Measurement reporting as the episode title is reported) ||custom ||Not Required ||Not Required ||Static Measurement |  | | assetid || Co || d  || d ||  yes ||   | 
|  | |- |  | |- | 
|  | | segB ||Segment B ||custom ||Not Required ||Not Required ||Audio / Video and Static Measurement |  | | type || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | |- |  | |- | 
|  | | segC ||Segment C ||custom ||Not Required ||Not Required ||Audio / Video and Static Measurement |  | | program || 0 || “1”  || “1”  ||  = 2 ||    | 
|  | |- |  | |- | 
|  | | crossId1 ||Standard episode ID. Gracenote/TMS ID should be used when available. Must be unique per episode. ||custom ||Optional ||Not Required || |  | | title || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | |- |  | |- | 
|  | | crossId2 ||Content originator (required only for distributors) ||custom ||Optional ||Not Required || |  | | length || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | |- |  | |- | 
|  | | airdate || Original (local) air date and time (Eastern Time for US) ||YYYYMMDD HH24:MI:SS ||Mandatory ||Not Required || |  | | airdate || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | |- |  | |- | 
|  | | pipmode || |  | | isfullepisode || 0 || “1”  || “1”  ||  = 2 ||    | 
|  | Current state of picture-in-picture (PIP) mode on device.
 |  | 
|  | *"true" if audio / video measurement is displayed in PIP mode
 |  | 
|  | *"false" if audio / video measurement is displayed in regular mode
 |  | 
|  | || "true", "false" ||Optional ||Not Required ||Audio / Video Measurement |  | 
|  | |- |  | |- | 
|  | | adloadtype || |  | | crossId1 || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | Type of ad load:
 |  | 
|  | #Linear - matches TV ad load
 |  | 
|  | #Dynamic - Dynamic Ad Insertion (DAI)
 |  | 
|  | || "1" - Linear |  | 
|  | "2" - Dynamic
 |  | 
|  | || Mandatory for DCR ||Not Required ||DCR  |  | 
|  | |- |  | |- | 
|  | | adModel || |  | | c1 || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | Type of ad model:
 |  | 
|  | #Linear - matches TV ad load
 |  | 
|  | #Dynamic - Dynamic Ad Insertion (DAI)
 |  | 
|  | || "1" - Linear |  | 
|  | "2" - Dynamic
 |  | 
|  | || Mandatory for DTVR ||Not Required ||DTVR |  | 
|  | |- |  | |- | 
|  | | progen ||Genre (required only for non-TV originated content). See [[DCR OTT Genre List]] for acceptable values. ||e.g. DD for Daytime Drama ||Required for non-TV content ||Not Required |  | | c2 || 0 || “1”  || “1”  ||  = 2 ||    | 
|  | |} |  | 
|  |   |  | 
|  | '''clientid & subbrand (vcid)'''
 |  | 
|  | By default, clientid and subbrand are setup in Nielsen backend configuration to capture brand and sub-brand information. The fields get populated from backend for a registered client appid. But if an app contains multiple brands and sub-brands and client is willing to give credit to another brand or sub-brand then :
 |  | 
|  | *Client app developer can override the clientid and subbrand (brand and sub-brand info.) in [[loadMetadata]] call to get a proper measurement for a desired brand and sub-brand.
 |  | 
|  | **If no clientid and subbrand are specified in CMS of a content and an ad, default values reported in the Configuration will be reported.
 |  | 
|  | **If clientid and subbrand are specified in CMS of the content or ad, the most recent clientid and subbrand will be reported in subsequent pings. To report with a different clientid and subbrand, include the new values for the keys in their subsequent [[loadMetadata]] call.
 |  | 
|  | '''Picture-in-picture (PIP) mode'''
 |  | 
|  | Once the app detects PIP mode, call [[loadMetadata]] with the same set of assetids, values and with one additional parameter "pipmode": "true". Once PIP mode is disabled in the device, call [[loadMetadata]] again with "pipmode":"false".
 |  | 
|  |   |  | 
|  | ==== Custom Variables Extension ====
 |  | 
|  | Contact Nielsen Technical Account Manager (TAM) to configure any custom variables, as needed for implementing the application.
 |  | 
|  |   |  | 
|  | See [[Custom Variables Extension]] for more information.
 |  | 
|  |   |  | 
|  | ==== Advertisement Metadata ====
 |  | 
|  | {|class="wikitable"
 |  | 
|  | |- |  | |- | 
|  | ! Key !! Description !! Values !! Required for Audio / Video? !! Required for Static (page)
 |  | | segB || 0 || “1”  || “1”  ||  = 2 ||  | 
|  | |- |  | |- | 
|  | | type ||Type of ad ||"preroll" |  | | segC || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | "midroll"
 |  | 
|  | "postroll" 
 |  | 
|  | || Mandatory ||Not Required |  | 
|  | |- |  | |- | 
|  | | assetid ||An ID assigned to the advertisement. Can be an internal ID, an ID provided by the ad server, or a randomly generated ID. Must be unique across all ads ||custom ||Mandatory ||Not Required |  | | adloadtype || 0 || “1”  || “1”  ||  = 2 ||   | 
|  | |- |  | |- | 
|  | | title ||Title of the advertisement ||"MyAdName" ||Mandatory ||Not Required |  | | hasAds || P|| zí) || “0”  || =1  | 
|  | |} |  | |} | 
|  | 
 |  | 
|  | === Passing Metadata ===
 |  | 
|  | The required metadata can be passed as key values through the loadMetadata method. The sample code below shows a metadata objects for various assets.
 |  | 
|  | '''Audio / Video Measurement Asset'''
 |  | 
|  | Type should be "content"
 |  | 
|  | <syntaxhighlight lang="json">    {
 |  | 
|  |        "type": "content",
 |  | 
|  |        "assetName": "myassetName",
 |  | 
|  |        "length": "300.0",
 |  | 
|  |        "title": "myTitle",
 |  | 
|  |        "program": "myProgram",
 |  | 
|  |        "censuscategory": "myCensusCategory",
 |  | 
|  |        "assetid": "myAssetId",
 |  | 
|  |        "channelName": "myChannel",
 |  | 
|  |        "adloadtype": "2",
 |  | 
|  |        "segB": "segmentB",
 |  | 
|  |        "segC": "segmentC",
 |  | 
|  |        "isfullepisode":"y",
 |  | 
|  |        "crossId1": "Reference11",
 |  | 
|  |        "crossId2": "Reference22",
 |  | 
|  |        "airdate": "20161013 20:00:00"
 |  | 
|  |     }</syntaxhighlight>
 |  | 
|  | 
 |  | 
|  | '''Static (Page) Measurement Asset'''
 |  | 
|  | Type should be "static"
 |  | 
|  | <syntaxhighlight lang="json">    {
 |  | 
|  |        "type": "static",
 |  | 
|  |        "assetid": "static123",
 |  | 
|  |        "section": "siteSection",
 |  | 
|  |        "segA": "segmentA",
 |  | 
|  |        "segB": "segmentB",
 |  | 
|  |        "segC": "segmentC"
 |  | 
|  |     }</syntaxhighlight>
 |  | 
|  | 
 |  | 
|  | '''For any of the ad types'''
 |  | 
|  | <syntaxhighlight lang="json">    {
 |  | 
|  |         "type": "midroll",
 |  | 
|  |         "length": "30.0",
 |  | 
|  |         "assetid": "myMidrollAssetId",
 |  | 
|  |         "adloadtype": "2",
 |  | 
|  |         "tv": "true",
 |  | 
|  |         "dataSrc": "cms"
 |  | 
|  |     }</syntaxhighlight>
 |  | 
|  | <blockquote>'''Note''': In case the individual ad details are not available, send ad pod (presence) details through the <code>loadMetadata</code> and playhead position through <code>setPlayheadPosition</code>.</blockquote>
 |  | 
|  | 
 |  | 
|  | '''loadMetadata'''
 |  | 
|  | The object can then be passed when calling [[loadMetadata]].
 |  | 
|  | <syntaxhighlight lang="java">    loadMetadata(jsonMetadataObject);</syntaxhighlight>
 |  | 
|  | 
 |  | 
|  | -->
 |  |