<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nielsentest.mywikis.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WilsonQ</id>
	<title>Engineering Client Portal - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://nielsentest.mywikis.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WilsonQ"/>
	<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/wiki/Special:Contributions/WilsonQ"/>
	<updated>2026-08-30T13:20:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7142</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7142"/>
		<updated>2026-06-24T15:18:19Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* query param list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
The following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.imrworldwide.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.imrworldwide.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.imrworldwide.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7141</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7141"/>
		<updated>2026-06-24T15:17:54Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Ping Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
The following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.imrworldwide.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7140</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7140"/>
		<updated>2026-06-24T15:15:30Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
The following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7139</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7139"/>
		<updated>2026-06-24T15:15:12Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|S2S Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
The following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7138</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7138"/>
		<updated>2026-06-24T15:14:06Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Metadata based on User Consent in your App */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
The following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7137</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7137"/>
		<updated>2026-06-24T15:13:45Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* SLA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from clients'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7136</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7136"/>
		<updated>2026-06-24T15:11:30Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* OTT, Mirroring, and Casting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7135</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7135"/>
		<updated>2026-06-24T15:10:34Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7134</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7134"/>
		<updated>2026-06-24T15:08:33Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7133</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7133"/>
		<updated>2026-06-24T15:08:16Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7132</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7132"/>
		<updated>2026-06-24T13:17:12Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
| cli_md || mode: allows to know the streaming type || possible values provided by Médiamétrie: &amp;quot;LIVE&amp;quot; &amp;quot;TIMESHIFTING&amp;quot; &amp;quot;TVOD&amp;quot; &amp;quot;VOD&amp;quot; &amp;quot;SVOD&amp;quot; &amp;quot;AOD&amp;quot;|| &lt;br /&gt;
|-&lt;br /&gt;
| cli_ch    || Channel identifier: values decided by Médiamétrie and provided to the broadcaster || sample value: &amp;quot;860&amp;quot; || &lt;br /&gt;
|-&lt;br /&gt;
| cli_cn    || content identifier as used / categorized by the publisher    || custom   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_p0    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character ) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p1    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p2    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p3    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p4    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p5    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p6    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p7    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p8    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p9    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p10   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p11   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p12   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p13   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p14   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p15   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p16   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p17   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p18   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p19   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7131</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7131"/>
		<updated>2026-06-24T13:16:52Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
| cli_md || mode: allows to know the streaming type || possible values provided by Médiamétrie: &amp;quot;LIVE&amp;quot; &amp;quot;TIMESHIFTING&amp;quot; &amp;quot;TVOD&amp;quot; &amp;quot;VOD&amp;quot; &amp;quot;SVOD&amp;quot; &amp;quot;AOD&amp;quot;|| &lt;br /&gt;
|-&lt;br /&gt;
| cli_ch    || Channel identifier: values decided by Médiamétrie and provided to the broadcaster || sample value: &amp;quot;860&amp;quot; || &lt;br /&gt;
|-&lt;br /&gt;
| cli_cn    || content identifier as used / categorized by the publisher    || custom   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_p0    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character ) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p1    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p2    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p3    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p4    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p5    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p6    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p7    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p8    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p9    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p10   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p11   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p12   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p13   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p14   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p15   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p16   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p17   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p18   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p19   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7130</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7130"/>
		<updated>2026-06-24T13:16:30Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product and Tuning data for the Digital Ads Rating (DAR) products.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
| cli_md || mode: allows to know the streaming type || possible values provided by Médiamétrie: &amp;quot;LIVE&amp;quot; &amp;quot;TIMESHIFTING&amp;quot; &amp;quot;TVOD&amp;quot; &amp;quot;VOD&amp;quot; &amp;quot;SVOD&amp;quot; &amp;quot;AOD&amp;quot;|| &lt;br /&gt;
|-&lt;br /&gt;
| cli_ch    || Channel identifier: values decided by Médiamétrie and provided to the broadcaster || sample value: &amp;quot;860&amp;quot; || &lt;br /&gt;
|-&lt;br /&gt;
| cli_cn    || content identifier as used / categorized by the publisher    || custom   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_p0    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character ) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p1    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p2    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p3    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p4    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p5    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p6    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p7    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p8    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p9    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p10   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p11   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p12   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p13   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p14   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p15   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p16   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p17   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p18   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p19   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7129</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7129"/>
		<updated>2026-06-24T13:15:28Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Mediametrie Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S(Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (apid)''' || Unique ID assigned to the player/site and configured by product. || Contact Médiamétrie&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.) || Contact Médiamétrie&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Contact Médiamétrie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product and Tuning data for the Digital Ads Rating (DAR) products.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have it’s own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but latest within 3 hour of the start of that hourly&lt;br /&gt;
viewing file interval. For example files from 1:00 AM to 2:00 AM must be delivered latest before 4 AM.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicite request from Médiamétrie.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported format are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delived to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0000_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0001_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0002_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true},&lt;br /&gt;
    {&amp;quot;url&amp;quot;:&amp;quot;s3://bucket/prefix/0003_object_00.snappy.parquet&amp;quot;, &amp;quot;mandatory&amp;quot;:true}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710154800&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| data_start_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1710158399&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 15&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;accreditation_status&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1710154800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1710158399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note:''' ''' Do not include personal data '''in the content metadata.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname   || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || episode name || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen    || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand  || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
✓ &lt;br /&gt;
|-&lt;br /&gt;
| cli_md || mode: allows to know the streaming type || possible values provided by Médiamétrie: &amp;quot;LIVE&amp;quot; &amp;quot;TIMESHIFTING&amp;quot; &amp;quot;TVOD&amp;quot; &amp;quot;VOD&amp;quot; &amp;quot;SVOD&amp;quot; &amp;quot;AOD&amp;quot;|| &lt;br /&gt;
|-&lt;br /&gt;
| cli_ch    || Channel identifier: values decided by Médiamétrie and provided to the broadcaster || sample value: &amp;quot;860&amp;quot; || &lt;br /&gt;
|-&lt;br /&gt;
| cli_cn    || content identifier as used / categorized by the publisher    || custom   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_p0    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character ) &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p1    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p2    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p3    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p4    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p5    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p6    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p7    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p8    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p9    || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p10   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p11   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p12   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p13   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p14   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p15   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p16   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p17   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p18   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| nol_p19   || optional custom field available to publishers to pass client-defined variable    || custom&amp;lt;br&amp;gt;The following characters are not allowed:&amp;lt;br&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;  ( bar character )&amp;lt;br&amp;gt;&lt;br /&gt;
* ~  ( tilde character )    &lt;br /&gt;
|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;program&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;title&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c05&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_md&amp;quot;: &amp;quot;LIVE&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_ch&amp;quot;: &amp;quot;860&amp;quot;,&lt;br /&gt;
    &amp;quot;cli_cn&amp;quot;: &amp;quot;customCuntentIdentifier&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p0&amp;quot;: &amp;quot;p0,optionalValueP0&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p1&amp;quot;: &amp;quot;p1,optionalValueP1&amp;quot;,&lt;br /&gt;
    // ... continued - 20 custom variables&lt;br /&gt;
    &amp;quot;nol_p18&amp;quot;: &amp;quot;p18,optionalValueP18&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_p19&amp;quot;: &amp;quot;p19,optionaValuelP19&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please do not include ZERO DURATION viewing portion in the Asset Viewing File.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || unique ID assigned to asset  || custom&amp;lt;br&amp;gt;(no [[Special Characters]]) || ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''MANDATORY ONLY for android platform.''' Mobile Ad ID IDFA,ADID, Connected Device ID  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping to the Nielsen Server|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|-&lt;br /&gt;
| fpid || First Party ID || created using the UUID Generator code provided / validity time 180 days. || &lt;br /&gt;
|-&lt;br /&gt;
| fpcrtm || Creation Time (UTC) of the First Party ID (Unix Timestamp in milliseconds) || custom || &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha1 ||    hashed (SHA256) value of member id || i.e. for the sample memberID &amp;quot;userMemberID123&amp;quot;, the value to pass is &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uid2 ||    hashed(SHA256) value of UID2 || i.e. for the sample UID2 &amp;quot;userUID2&amp;quot;, the value to pass is i.e. &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|hem_sha256 ||  hashed(SHA256) value of the user email address  ||   i.e. for the sample email address &amp;quot;useremail@company.com&amp;quot;, the value to pass is &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot; ||  &lt;br /&gt;
|-&lt;br /&gt;
|uoo ||  device opt-out status  || &amp;quot;true&amp;quot; for opted out,  &amp;quot;false&amp;quot; for NOT opted out or opted in.  ||  ✓&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;,&lt;br /&gt;
    &lt;br /&gt;
    &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
    &amp;quot;device_id&amp;quot;: &amp;quot;8ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha1&amp;quot;: &amp;quot;9ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
    &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
    &amp;quot;uoo&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
    &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
    &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Metadata based on User Consent in your App =====&lt;br /&gt;
&lt;br /&gt;
In collaboration with Mediametrie, the following user consent use cases need to be implemented in your App.&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly accepts measurement ======&lt;br /&gt;
 All Device/User IDs are captured in the Nielsen S2S Metadata. The Opt-in Flag is set to &amp;quot;false&amp;quot; and all IDs have to be set accordingly:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;7b733f363eb756046bf72bf476d24611e931e763222a7e89537477261f7bae05&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;0da83f9ab3bf59e3638f96d83409878fb507d3edd4d3637ca5eae4ddda5bb969&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;false&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;U4EDwDcpvWIbguYVyjlhzS1v0eaov1631180980&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;1631098029000&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== The user explicitly refuses measurement ======&lt;br /&gt;
The Nielsen S2S is NOT initiated and No Nielsen S2S measurement will occur.&lt;br /&gt;
&lt;br /&gt;
======The user did not explicitly give consent for the measurement(consent neither given nor refused) ======&lt;br /&gt;
 The Nielsen S2S is initiated and no IDs are captured. The Nielsen S2S Opt-out Flag is set to &amp;quot;true&amp;quot; and all Device/User IDs are empty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uid2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;hem_sha256&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;uoo&amp;quot;&amp;quot;: &amp;quot;true&amp;quot;,&lt;br /&gt;
  &amp;quot;fpid&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;fpcrtm&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || devid,  SHA-256 value of Device Id (IDFA, ADID) -  OPTIONAL is passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| uoo || device opt-out status  || &amp;quot;true&amp;quot; for opted out, &amp;quot;false&amp;quot; for NOT opted out or opted in.|| ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;uoo=&amp;lt;Optout Status &amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;uoo=false&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7128</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7128"/>
		<updated>2026-06-23T19:40:24Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from the client'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7127</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7127"/>
		<updated>2026-06-23T19:31:08Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* SLA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from the client'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7126</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7126"/>
		<updated>2026-06-23T19:30:27Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dcr) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from AGF.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7125</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7125"/>
		<updated>2026-06-23T19:29:52Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from AGF.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7124</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7124"/>
		<updated>2026-06-23T19:29:04Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: /* DCR Integration Utilizing S2S */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product and Tuning data for the Digital Ads Rating (DAR) products.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from AGF.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7123</id>
		<title>DCR Poland Video S2S</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=DCR_Poland_Video_S2S&amp;diff=7123"/>
		<updated>2026-06-23T19:28:26Z</updated>

		<summary type="html">&lt;p&gt;WilsonQ: Created page with &amp;quot;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}} Category:Digital  = DCR Integration Utilizing S2S = &amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt; Please contact AGF before you start working on a S2S Integration! &amp;lt;/pre&amp;gt;  This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.  &amp;lt;pre style=&amp;quot;color: orange...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|AGF Implementation Documentation}}  {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
&lt;br /&gt;
= DCR Integration Utilizing S2S =&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: red&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
Please contact AGF before you start working on a S2S Integration!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This guide shows you how to integrate the Nielsen S2S (Server to Server) to enable Digital Content Ratings (DCR), and fuel other measurement products on your Apps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;; font-weight: bold;&amp;gt;&lt;br /&gt;
PLease note that you have to use the Staging S2S Endpoint(&amp;lt;env&amp;gt;=stage)until you get the green light to move to Production, &lt;br /&gt;
you will then get the Production S2S Endpoint!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
To get started, you will need a Nielsen App ID. The App ID is a unique ID assigned to your app. This will be provided to you by your assigned Technical Account Manager upon starting the integration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | Item&lt;br /&gt;
! Description&lt;br /&gt;
! Source&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''App ID (AppID)''' || Unique ID assigned to the player/site and configured by product. || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Integration ID (IntID)''' || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) || Provided by Nielsen&lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
|| '''Partner ID (PartnerID)''' || Partner id provided by Nielsen. Used for the client specific S3 bucket . &lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that the sample PartnerID 'acme' used in all examples is a placeholder to be replaced with your PartnerID. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|| Provided by Nielsen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This interface specification depicts the file format that needs to be used to supply Nielsen with&lt;br /&gt;
end-user viewing data captured by a “Server-to-Server” method for the Nielsen Digital Content&lt;br /&gt;
Ratings (DCR) product and Tuning data for the Digital Ads Rating (DAR) products.&lt;br /&gt;
* The specification is defined using a JSON schema, with each file ideally containing all the&lt;br /&gt;
viewing that has been captured within an hour.&lt;br /&gt;
* In the case of a stream that has one version with blackouts and one without, one with&lt;br /&gt;
mobile and one non-mobile, each stream would have its own unique asset id.&lt;br /&gt;
* The Asset Metadata file should arrive before the viewing data file for the same hour.&lt;br /&gt;
&lt;br /&gt;
==SLA==&lt;br /&gt;
The files must be delivered into the proper S3 bucket '''immediately after each hour of viewing on a device''', but '''latest within 3 hours of the start of that hourly viewing file interval'''. For example, files from '''2:00 AM to 3:00 AM''' must be delivered latest before '''5 AM'''.&lt;br /&gt;
&lt;br /&gt;
'''When SLA for receiving an exposure file for date xx/xx, UTC hour xx has expired. The system will continue to wait for 60 min, after which it will skip the missing file and continue processing subsequent files. Any reprocessing of the missed SLA data will require an explicit request from AGF.'''&lt;br /&gt;
&lt;br /&gt;
==Accuracy of the Measurement==&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time (Video Player Events) At Least Each 10 Seconds To Your Backend====&lt;br /&gt;
Capture content viewing time each second and send the aggregated viewing time at least each 10 seconds to your backend:&lt;br /&gt;
* referencestart : Wall clock reference start time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* referenceend : Wall clock reference end time (In UTC time, 32-bit unsigned int in seconds)&lt;br /&gt;
* playheadstart : Content position start time in seconds&lt;br /&gt;
* playheadend : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
====Send Viewing Time When The Video Playback Is Interrupted====&lt;br /&gt;
 Send the aggregated viewing time to your backend when the video playback is interrupted, i.e. paused.&lt;br /&gt;
&lt;br /&gt;
====Capture Accurately Each Second The Viewing Time When The Network Is Lost And The Video Playback Continues====&lt;br /&gt;
Capture accurately each second the viewing time when the network is lost.&lt;br /&gt;
Send the aggregated viewing time to your backend when the network is back.&lt;br /&gt;
&lt;br /&gt;
====Send The Viewing Time Early On Browser Refreshed/Closed====&lt;br /&gt;
Capture and send the viewing time to your backend by implementing the 2 WINDOWS EVENTS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Please include a logic to make sure that only one of the 2 following event handler is executed '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
window.addEventListener(&amp;quot;pagehide&amp;quot;, function (e) { &lt;br /&gt;
   // SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
window.addEventListener(&amp;quot;beforeunload&amp;quot;, function (e) {&lt;br /&gt;
   // ONLY IF pagehide&amp;quot; was not triggered, SEND THE VIEWING TIME TO YOUR BACKEND&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File Naming Convention and Delivery Specification==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats. &lt;br /&gt;
&lt;br /&gt;
* All prefix labels and file names should be lowercase except for app ids. &lt;br /&gt;
* Supported formats are:&lt;br /&gt;
** Uncompressed text files with utf-8 encoding in:&lt;br /&gt;
***  JSON format(.json);&lt;br /&gt;
***  PARQUET format(.parquet);&lt;br /&gt;
* All files should have extensions to indicate the file format (.json or .parquet)&lt;br /&gt;
* Data file can be partitioned into multiple parts with min size of 128MB - 256MB&lt;br /&gt;
* Data can be delivered separately in multiple splits(platforms), if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the S2S system;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The 4 Different Files to deliver to Nielsen each hour===&lt;br /&gt;
* [Asset Metadata File]&lt;br /&gt;
* [Asset Viewing  File]&lt;br /&gt;
* [Manifest File]&lt;br /&gt;
* [Success File: Indication of a data delivery for a particular hour]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nielsen will move files to indicate they are being processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====S3 bucket and prefix(S3BucketPrefix) for all 4 Files====&lt;br /&gt;
&lt;br /&gt;
All files should be delivered to:&lt;br /&gt;
'''&amp;lt;S3BucketPrefix&amp;gt;:''' euwest1-nlsn-w-dig-sei-'''&amp;lt;PartnerID&amp;gt;'''-feeds-'''&amp;lt;env&amp;gt;'''/ProducType&amp;gt;/&amp;lt;Platform&amp;gt;/yyyy/mm/dd/hh/&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| env  || '''stage''' for Staging or '''prod''' for Production&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| Platform  || '''ios''', '''browser''', '''android''', '''ott'''. Only for the Asset Metadata Optimization use case, '''all''' is used additionally, see [[#Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day|Optimization for all Platforms]]&lt;br /&gt;
|-&lt;br /&gt;
| yyyy/mm/dd/hh || UTC start of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023/02/12/05'''&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
=====Examples for the iOS platform=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Manifest File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
======Success File======&lt;br /&gt;
&amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Name(FileName) format for the Asset Metadata and Asset Viewing Files ====&lt;br /&gt;
&lt;br /&gt;
Asset Metadata and Asset Viewing Files should be delivered to:&lt;br /&gt;
* &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;&amp;lt;FileSuffix&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description''' &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PartnerID || Publisher abbreviation provided by Nielsen for each Publisher or Provider&lt;br /&gt;
|-&lt;br /&gt;
| IntID  || Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewsership pipelines (dar, dtvr, dcr, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| ProductType  || '''dcr-exposure''' for Asset Viewing  File, '''dcr-metadata''' for Asset Metadata File&lt;br /&gt;
|-&lt;br /&gt;
| AppID  || Nielsen provided server application identifier&lt;br /&gt;
|-&lt;br /&gt;
| StartTime  || start date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| EndTime  || end date and hour of the data in the file in GMT: '''yyyymmddhh'''&lt;br /&gt;
|-&lt;br /&gt;
| yyyymmddhh || UTC time of the period of the data in file&lt;br /&gt;
&lt;br /&gt;
* yyyy = Year&lt;br /&gt;
* mm = Month&lt;br /&gt;
* dd = Date padded with 0 example 01, 02,..., 31&lt;br /&gt;
* hh = Hour padded with 0 example 00, 02,..., 23&lt;br /&gt;
&lt;br /&gt;
example: '''2023021205'''&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| FileSuffix  || Uncompressed json lines (no extension) - splittable, ideal for medium size files, '''less than 5 GB''', preferred for metadata. &lt;br /&gt;
'''supported:'''&lt;br /&gt;
* '''.json''' json file &lt;br /&gt;
* '''.parquet''' parquet file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Examples for  Asset Metadata and Asset Viewing Files=====&lt;br /&gt;
======Asset Metadata File======&lt;br /&gt;
Asset Metadata File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Asset Viewing  File======&lt;br /&gt;
Asset Viewing File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
* &amp;lt;code&amp;gt;euwest1-nlsn-w-dig-sei-acme-feeds-stage/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495BBBBA56DEBE9914758F92F034_2022052511_2022052512.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Manifest File for the Asset Metadata and Asset Viewing Files====&lt;br /&gt;
&lt;br /&gt;
The Manifest File should be delivered to: &amp;lt;S3BucketPrefix&amp;gt;'''&amp;lt;FileName&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;FileName&amp;gt;''' : &amp;lt;PartnerID&amp;gt;_&amp;lt;ProductType&amp;gt;_&amp;lt;IntID&amp;gt;_&amp;lt;AppID&amp;gt;_&amp;lt;StartTime&amp;gt;_&amp;lt;EndTime&amp;gt;'''_manifest'''&lt;br /&gt;
&lt;br /&gt;
A manifest contains metadata related to the uploaded file(s). It is a text file in json format that implements the AWS unload manifest file format. It follows the s3 objects naming notation, but has the _manifest suffix. Here’s an example of manifest file contents:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The manifest contains a complete list of all files provided for a given period and platform, as well as a meta data (a.k.a. header) which should include the following attributes:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schema_version || Schema Version || String, i.e. &amp;quot;S2SV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| start_time || Data Start UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653476400&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| end_time || Data End UTC Time (max), 32-bit unsigned int Unix time in seconds || String, i.e. &amp;quot;1653479999&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| record_count || Records Count in data file || Number: i.e. 55 || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If ‘entries’ array is not specified, or manifest file is not available, the system will still attempt to load all data file(s) (.json or .parquet) from the prefix location. Optionally the manifest file can contain the full schema of the data files as shown in the [https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD_command_examples.html#unload-examples-manifest-verbose manifest file format document ].&lt;br /&gt;
&lt;br /&gt;
=====Example for the Manifest File=====&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Metadata File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
======Manifest File for the Asset Viewing File======&lt;br /&gt;
The Manifest File for 11:00:00 AM UTC to 11:59:59 PM UTC the file name would be:&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;url&amp;quot;:&amp;quot;uploaded file url&amp;quot;, &lt;br /&gt;
    &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
  ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Success File: Indication of a data delivery for a particular hour===&lt;br /&gt;
&lt;br /&gt;
An Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and platform is completed successfully. This file should be uploaded last (after all other files). If there is no data data for a particular hour and platform, the _SUCCESS file is still required to indicate that the delivery process for the hour is completed and no data files are expected. This file is only required for integrations that support data partitioned into multiple parts. The name of the file is configurable.&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Viewing Delivery Files====&lt;br /&gt;
&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Example for Asset Metadata Delivery Files====&lt;br /&gt;
'''For hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):'''&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
====Data Delivery Example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):====&lt;br /&gt;
=====Asset Metadata Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
=====Asset Viewing Delivery Files=====&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0000.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0001.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0002.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_0003.json&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/acme_dcr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-exposure/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Asset Metadata Delivery Optimization===&lt;br /&gt;
&lt;br /&gt;
====Optimization when the Asset Metadata File remains unchanged during the whole day per platform====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged during the whole day per platform, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File  Location per platform.&lt;br /&gt;
&lt;br /&gt;
The File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced in the manifest file for the following 23 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the Asset Metadata File for HOUR 00'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the Asset Metadata File for HOUR 00):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052511_2022052512_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Optimization for all Platforms when the Asset Metadata File remains unchanged for all platforms during the whole day====&lt;br /&gt;
&lt;br /&gt;
When the Asset Metadata File remains unchanged for all platforms during the whole day, the hourly manifest File of the Asset Metadata File can be used to link to the Asset Metadata File Location for all platforms.&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File could then be delivered at the first hour of the day(00:00:00 AM UTC to 00:59:59 PM UTC) and it will be referenced hourly in the manifest file for all the 24 hours of the day.&lt;br /&gt;
&lt;br /&gt;
'''The Example below illustrates the use of the manifest file for HOUR 11 , referencing to the global Asset Metadata File'''&lt;br /&gt;
&lt;br /&gt;
=====Asset Metadata File for the hour 11:00:00 AM UTC to 11:59:59 PM UTC=====&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the Asset Metadata File (referencing to the global Asset Metadata File):'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653476400&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653479999&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/ios/2022/05/25/11/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Global Asset Metadata File for the hour 00:00:00 AM UTC to 00:59:59 PM UTC for all Platforms=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File for the global Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501_manifest&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Manifest File Content:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;entries&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
   &amp;quot;url&amp;quot;:&amp;quot;euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/acme_dcr-metadata_a9ddf15ea054ea415718767ea6_2022052500_2022052501.json&amp;quot;, &lt;br /&gt;
   &amp;quot;mandatory&amp;quot;:true&lt;br /&gt;
   }&lt;br /&gt;
 ],&lt;br /&gt;
    &amp;quot;schema_version&amp;quot;: &amp;quot;S2SV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;start_time&amp;quot;: &amp;quot;1653436800&amp;quot;,&lt;br /&gt;
    &amp;quot;end_time&amp;quot;: &amp;quot;1653440399&amp;quot;,&lt;br /&gt;
    &amp;quot;record_count&amp;quot;: 55&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success File for the Asset Metadata File:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
euwest1-nlsn-w-dig-sei-acme-feeds-prod/dcr-metadata/all/2022/05/25/00/_SUCCESS&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== S2S Metadata Specifications for the Asset Metadata and Asset Viewing Files ==&lt;br /&gt;
&lt;br /&gt;
=== Asset Metadata File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Metadata File contains 1 Header Record  followed by Body Records &lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| mvpdid || mvpd ID specified ny Nielsen || String, i.e. &amp;quot;NLSN&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| creationtime ||  File creation time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  ||String, i.e. &amp;quot;1&amp;quot; for only 1 Record || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SAssetMetaDataDCRV2.09&amp;quot;,&lt;br /&gt;
    &amp;quot;mvpdid&amp;quot;: &amp;quot;NLSN&amp;quot;,&lt;br /&gt;
    &amp;quot;creationtime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;pre style=&amp;quot;color: red&amp;quot;&amp;gt;NOTE:&amp;lt;/pre&amp;gt;'''&lt;br /&gt;
* All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
* '''For the correct filling of the metadata fields and custom variables, please make sure to follow the detailed information and specifications regarding the permitted characters and formats, field length and other limitations in the AGF metadata convention for video measurement, see:'''&lt;br /&gt;
** '''[[AGF Metadata Convention#Video Measurement|AGF Metadata Convention for Video Measurement]]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! AGF Metadata Convention Name - &amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Only for your Reference&lt;br /&gt;
&amp;lt;/pre&amp;gt;  !! Description  !! Values   !! Required&lt;br /&gt;
|-&lt;br /&gt;
| assetid  || assetid|| Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| programname  || program || name of program  || custom   || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodetitle || title || episode name || custom -  no backslash allowed in string (because of 3rd party data processing)  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| episodelen   || length || length of content in seconds || Length of content in seconds (86400 seconds for live stream (24/7). For Event-Live streams planned length. For VoD video length)||   ✓&lt;br /&gt;
|-&lt;br /&gt;
|islivestn  || N/A|| Indicates if a stream is playing on a live channel&lt;br /&gt;
||&lt;br /&gt;
:&lt;br /&gt;
* &amp;quot;y&amp;quot; playing on a live channel&lt;br /&gt;
* &amp;quot;n&amp;quot; otherwise i.e. VoD&lt;br /&gt;
||&lt;br /&gt;
✓&lt;br /&gt;
|-&lt;br /&gt;
| subbrand ||  subbrand (vcid) || vcid/sub-brand/Channel  ID – value is automatically populated through provided AppID. In order to override the sub-brand configured to the App ID, value can be passed here (e.g. multiple sub-brands/Channels in the App)   &lt;br /&gt;
||&lt;br /&gt;
provided by Nielsen &lt;br /&gt;
||&lt;br /&gt;
 &lt;br /&gt;
|-&lt;br /&gt;
| nol_c0   || nol_c0 || number of episode part (Sendungsteilenummer)   || custom, if a content is not divided into several episode parts, set &amp;quot;0&amp;quot; as value.  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c2   || nol_c2 || web only  || custom. The custom variable &amp;quot;web-only&amp;quot; specifies whether the streaming content is made available exclusively on the internet (web-only, &amp;quot;Y&amp;quot;) or also made available on linear TV (web-only, &amp;quot;N&amp;quot;)|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c5  || nol_c5   || page URL   || custom, The “Page URL” custom variable is reserved for sending the video’s server address.  ||  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c7  || nol_c7  || Video ID. This variable is applicable in case the video asset is broken into multiple files each with their own asset ID. If a client has a single asset for a given episode/program, the value here should be identical to the assetid already provided in the viewership file. &lt;br /&gt;
  || custom || ✓&lt;br /&gt;
|-&lt;br /&gt;
| nol_c9  || nol_c9  || episode title   || custom - no backslash allowed in string (because of 3rd party data processing). if no further differentiation, then use &amp;quot;episodetitle&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c10  || nol_c10  || publisher   || custom, used to differentiate different publishers   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c12  || nol_c12  || type of asset   || &amp;quot;Trailer&amp;quot; or &amp;quot;Content&amp;quot;   || ✓  &lt;br /&gt;
|-&lt;br /&gt;
| nol_c15  || nol_c15   || format ID   || If nol_c2 is always Yes, then it can stay blank &amp;quot;&amp;quot;   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c16  || nol_c16   || content-ID (Combines different videos to a common category, content-wise, a content-ID is available for content, trailer and ads)   || custom, i.e. 'dVxRcCpOqKyFz02fuss', 'dvrsowf_ten_rtlibes&amp;quot;, etc   || &lt;br /&gt;
|-&lt;br /&gt;
| nol_c18  || nol_c18  || is a live stream    || &amp;quot;Y&amp;quot; for live stream otherwise &amp;quot;N&amp;quot;  || ✓  &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c8   || nol_c8 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c13   || nol_c13  || custom variable   || custom   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c14   || nol_c14 || not in use   || leave blank &amp;quot;&amp;quot;, reserved for AGF   || &lt;br /&gt;
|-style=&amp;quot;background-color:#d0f6f8;&amp;quot;&lt;br /&gt;
| nol_c19   || nol_c19  || custom variable   || custom   || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;programname&amp;quot; : &amp;quot;program name&amp;quot;,&lt;br /&gt;
    &amp;quot;episodetitle&amp;quot; : &amp;quot;episode title&amp;quot;,&lt;br /&gt;
    &amp;quot;length&amp;quot; : &amp;quot;length in seconds&amp;quot;,&lt;br /&gt;
    &amp;quot;islivestn&amp;quot;: &amp;quot;y&amp;quot;,&lt;br /&gt;
    &amp;quot;subbrand&amp;quot;: &amp;quot;c02&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c0&amp;quot;: &amp;quot;p0,3&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c2&amp;quot;: &amp;quot;p2,Y&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c7&amp;quot;: &amp;quot;p7,videoid123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c9&amp;quot;: &amp;quot;p9,VideoTitle123&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c10&amp;quot;: &amp;quot;p10,publisherName&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c12&amp;quot;: &amp;quot;p12,Content&amp;quot;,&lt;br /&gt;
    &amp;quot;nol_c18&amp;quot;: &amp;quot;p18,N&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asset Viewing File ===&lt;br /&gt;
&lt;br /&gt;
The Asset Viewing File contains 1 Header Record  followed by Body Records &lt;br /&gt;
'''Note:''' All metadata values should be passed as '''UTF-8 strings'''.&lt;br /&gt;
&lt;br /&gt;
====Header Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
&lt;br /&gt;
'''Parameter Description'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| schemaversion || Json Schema Version || String, &amp;quot;S2SViewingDataV1.7.0&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| appid || Nielsen provided server application identifier || String, i.e. &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| type || Type of the data || String, &amp;quot;content&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| producttype || Product Type || String, &amp;quot;DCR&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| starttime ||  Viewing Data Start Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473781507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| endtime ||  Viewing Data End Time (UTC time in 32-bit unsigned int UTC in seconds) || String, i.e. &amp;quot;1473791507&amp;quot;|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| recordcount || Records Count in body of file  || String, i.e. &amp;quot;100&amp;quot; for only 100 Records || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;schemaversion&amp;quot;: &amp;quot;S2SViewingDataV1.7.0&amp;quot;,&lt;br /&gt;
    &amp;quot;appid&amp;quot;: &amp;quot;P47C2495B-XXXX-56DE-BE99-14758F92F034&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
    &amp;quot;producttype&amp;quot;: &amp;quot;DCR&amp;quot;,&lt;br /&gt;
    &amp;quot;starttime&amp;quot;: &amp;quot;1473781507&amp;quot;,&lt;br /&gt;
    &amp;quot;endtime&amp;quot;: &amp;quot;1473791507&amp;quot;,&lt;br /&gt;
    &amp;quot;recordcount&amp;quot;: &amp;quot;100&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Body Record====&lt;br /&gt;
&lt;br /&gt;
=====Description=====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apn || app name || i.e. &amp;quot;BestAppIOS&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| apv || app build version || i.e. &amp;quot;1.3&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid || Unique, client generated value that represents the start of a user session. Must match sessionid in Audit Ping. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || streamid ID for every new instance of an asset || created using the UUID Generator code provided || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| streamended   || Stream is known to have ended in this file   || &lt;br /&gt;
* &amp;quot;1&amp;quot; (stream will continue in next file) &lt;br /&gt;
* &amp;quot;2&amp;quot; (stream closed) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| secondscr || Second Screen Indicator. For Mirroring &amp;amp; Extended Screen via OTT device scenarios  || &lt;br /&gt;
* &amp;quot;&amp;quot; (empty String if viewed directly on the device)&lt;br /&gt;
* &amp;quot;MIR&amp;quot; (Mirroring)&lt;br /&gt;
* &amp;quot;OTT&amp;quot; (Extended Screen via OTT device) &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| assetid   || Unique ID assigned to the video asset corresponding to the combination of the 2 AGF custom variables (c7 and c0) separated by an underscore character ('''&amp;lt;c7_c0&amp;gt;''').&lt;br /&gt;
|| &lt;br /&gt;
* custom (no [[Germany Special Characters|Special Characters]]) &lt;br /&gt;
* 24/7 livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Event livestream: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Video on demand: &amp;lt;c7_c0&amp;gt;&lt;br /&gt;
* Trailer: &amp;lt;c7_c0&amp;gt; &lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| position  || Array of contiguous content viewing in utc (UTC time in 32-bit unsigned int in seconds)  ||&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
&amp;quot;referencestart&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;referenceend&amp;quot;:&amp;quot;utc time&amp;quot;,&lt;br /&gt;
&amp;quot;playheadstart&amp;quot;:&amp;quot;playhead start position&amp;quot;,&lt;br /&gt;
&amp;quot;playheadend&amp;quot;:&amp;quot;playhead end position&amp;quot;&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Description:'''&lt;br /&gt;
* '''referencestart''' : Wall clock reference start time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''referenceend''' : Wall clock reference end time (In UTC time,  32-bit unsigned int in seconds)&lt;br /&gt;
* '''playheadstart''' : Content position start time in seconds&lt;br /&gt;
* '''playheadend''' : Content position end time in seconds&lt;br /&gt;
&lt;br /&gt;
'''For Content position start and end time(playheadstart, playheadend):'''&lt;br /&gt;
* For VoD stream use the player position for Content as the playhead position in seconds.  At playback start of a content from the begin,  playheads will then be 0,1,2,3,....&lt;br /&gt;
* For Live streams, use Unix Time (in seconds) matching the broadcast time as the playhead position in seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Additional Notes:'''&lt;br /&gt;
* For viewing gaps &amp;lt; than 1 second, the gap can be smoothed over&lt;br /&gt;
* For playouts that are abandoned before the first whole second of viewing is rendered, a position record of zero duration should be created. IF an audit ping has already been fired See below for additional details on position array parameters&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| device_id || '''ONLY for''' '''android''' platform, DO NOT pass device_id for '''ios''', '''browser''' and '''ott''' platforms.  Mobile Ad ID ,  unique Device ID of a user device (e.g. SHA-256 hashed value of i.e. Advertising ID, Roku Device ID). Please verify your implemented SHA-256 by passing &amp;quot;00000000-0000-0000-0000-000000000000&amp;quot; which should return &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; - OPTIONAL if passed in the Audit Ping|| i.e &amp;quot;12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&amp;quot; || ✓&lt;br /&gt;
|-&lt;br /&gt;
| xdua || Device HTTP raw User Agent string  - OPTIONAL if passed in the Audit Ping|| Example: &amp;quot;Apple-iPhone1C2/801.293&amp;quot; || ✓ &lt;br /&gt;
|-&lt;br /&gt;
| xff || IP address - OPTIONAL if passed in the Audit Ping|| Format: &amp;quot;xxx.xxx.xxx.xxx&amp;quot; or &amp;quot;xxx.xxx.xxx.000&amp;quot; &lt;br /&gt;
Examples :&lt;br /&gt;
* IPV4:  &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
* IPV6: &amp;quot;2600:6c58:7900:33f2:2505:42b9:5a34:0000&amp;quot;&lt;br /&gt;
|| ✓ &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;apn&amp;quot;: &amp;quot;BestAppiOS&amp;quot;,&lt;br /&gt;
    &amp;quot;apv&amp;quot;: &amp;quot;1.3&amp;quot;,&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xxxjavd6wzirm93xb95uxjy1ac5wu1627638609&amp;quot;, // create and pass a unique sessid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xxxsavd6wzirm93xb95uxjy1ac5wu1627638655&amp;quot;, // create and pass a unique streamid for each video play using UUID Generator code provided&lt;br /&gt;
    &amp;quot;streamended&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
    &amp;quot;assetid&amp;quot;: &amp;quot;VA12345&amp;quot;,&lt;br /&gt;
    &amp;quot;secondscr&amp;quot;: &amp;quot;MIR&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;1628735452&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;1628736052&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
            &amp;quot;playheadend&amp;quot;: &amp;quot;600&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;xdua&amp;quot;: &amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130Safari/537.36&amp;quot;,&lt;br /&gt;
    &amp;quot;xff&amp;quot;: &amp;quot;4.12.345.67&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Android Platform : Example Metadata with &amp;quot;device_id&amp;quot;  =====&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;7ed2155ee9964d69ca425b0aceccda25d5462e06228a40d0da4dce5a4eb3e826&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== &amp;quot;device_id&amp;quot; not available ======&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OTT, Mirroring, and Casting==&lt;br /&gt;
&lt;br /&gt;
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple&lt;br /&gt;
TV, audit ping should fire from OTT device, and Viewing data should reside in OTT Viewing file.&lt;br /&gt;
For mirroring, where video playback occurs on the mobile device and OTT device, only one&lt;br /&gt;
Viewing file row is necessary where, if possible to determine, set: &amp;quot;secondscr&amp;quot;:&amp;quot;MIR&amp;quot; and&lt;br /&gt;
include in respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
For a casting scenario where content is controlled via the mobile device, but displayed only on&lt;br /&gt;
the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile&lt;br /&gt;
device before the casting occurs and at the end of playback from the mobile device only.&lt;br /&gt;
Viewing data resides in the respective mobile platform Viewing file.&lt;br /&gt;
&lt;br /&gt;
Casting Viewing file example:&lt;br /&gt;
&lt;br /&gt;
[[File:France MM S2S casting example.png|France MM S2S casting example.png]]&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx123&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;0&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;60&amp;quot;'''&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx303&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;120&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;180&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{ // ...&lt;br /&gt;
    &amp;quot;sessionid&amp;quot;: &amp;quot;xx..xxxABC&amp;quot;,&lt;br /&gt;
    &amp;quot;streamid&amp;quot;: &amp;quot;xx..xxxDEF&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;referencestart&amp;quot;: &amp;quot;xxxxxxx183&amp;quot;,&lt;br /&gt;
            &amp;quot;referenceend&amp;quot;: &amp;quot;xxxxxxx243&amp;quot;,&lt;br /&gt;
            '''&amp;quot;playheadstart&amp;quot;: &amp;quot;60&amp;quot;,'''&lt;br /&gt;
            '''&amp;quot;playheadend&amp;quot;: &amp;quot;120&amp;quot;'''&lt;br /&gt;
        }&lt;br /&gt;
    ],&lt;br /&gt;
    '''&amp;quot;secondscr&amp;quot;: &amp;quot;OTT&amp;quot;'''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==S2S Audit Ping Specifications==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
The Nielsen server to server solution needs audit pings to validate audience reach and video viewing duration, one '''start''' and one '''end''' for each video stream playback. These pings will go from the end user device to Nielsen Collections servers. &lt;br /&gt;
&lt;br /&gt;
'''start audit ping(“Startstream = 1”)'''&lt;br /&gt;
* A start audit ping is sent when the stream starts(playback start).&lt;br /&gt;
* Also a new start audit ping is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping. &lt;br /&gt;
'''end audit ping(“Endstream = 3”)'''&lt;br /&gt;
* An end audit ping is sent when the stream ends(either playback completed or switch to another stream).&lt;br /&gt;
* Also an end audit ping is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ping Structure ===&lt;br /&gt;
Ping should be named with following convention structure:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp; query param list (see table below)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color: orange&amp;quot;&amp;gt;&lt;br /&gt;
Please note that you have to send the Audit Ping in real time on the device running your App.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Please note that this URL could change as we respond to security upgrades in the market.)&lt;br /&gt;
The Start Audit Ping will carry all parameters in the matrix below. The End Audit Ping will carry a subset of the parameters in the matrix below as denoted in the mandatory column.  &lt;br /&gt;
Under normal operating circumstances, the Nielsen collection system will return return codes:&lt;br /&gt;
* For security reasons, downstream servers reject cross-origin HTTP requests with preflight. To ensure that audit ping requests are accepted, allowable Content-Types like &amp;quot;text/plain&amp;quot; in simple GET requests ensure that preflight requests are not invoked, which is the preferred behavior.&lt;br /&gt;
* 200: The ping was successfully received, inspect traffic to ensure no CORS errors&lt;br /&gt;
&lt;br /&gt;
=== Ping Session &amp;amp; Stream Details ===&lt;br /&gt;
&lt;br /&gt;
==== Sessions ====&lt;br /&gt;
* a) When a new player is created a session id is also created.&lt;br /&gt;
* b) If you have more than one video player within the same App (e.g. picture in picture) you must use a different session id for each.&lt;br /&gt;
&lt;br /&gt;
==== Streams ====&lt;br /&gt;
* a) The Distributor must generate a new UNIQUE stream id with every video stream playback.&lt;br /&gt;
* b)  If two people watch the same show, they would have different stream id's as Nielsen would expect the stream id(“streamid”) to be a random GUId generated by the client device.&lt;br /&gt;
* c) If one person watches a show, and FF, rewind, playout, pause, play, RW, play - they would keep the same stream id(“streamid”) throughout the entire playout of that video asset (stream).&lt;br /&gt;
* d) If a stream play out is suspended for 30 mins or more (paused or background):&lt;br /&gt;
** An end audit ping(“Endstream = 3”) is sent when the stream playback after a playback interruption for more than 30 minutes, typically playback  paused.&lt;br /&gt;
** A new start audit ping(“Startstream = 1”) is sent when the stream playback resumes after a playback interruption for more than 30 minutes, typically playback  paused. PLEASE note that a new “streamid” parameter has to be created before sending a new start audit ping.&lt;br /&gt;
* e) If the user reaches the very end of the stream (content complete), and then starts to play again (replay from anywhere in the stream), then a new “streamid” should be created and a start audit ping should be sent. Also an end audit should be sent when the stream replay  is completed or the user switches to another stream.&lt;br /&gt;
&lt;br /&gt;
====Audit Pings ====&lt;br /&gt;
* a) Audit pings should be fired at the '''beginning''' and '''end''' of a stream. These will be referred to as the Audit Start Ping and the Audit End Ping.&lt;br /&gt;
&lt;br /&gt;
==== query param list ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
'''Required S2S Audit Ping Query String Parameters - Note: All parameters are case sensitive'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keys !! Description !! Values !! Required&lt;br /&gt;
|-&lt;br /&gt;
| apid  ||  Unique ID assigned to the player/site and configured by your Nielsen Technical Account Manager.&lt;br /&gt;
 || Example: '''FC984EC1-E044-B465-E040-070AAD3173A1''' || ✓&lt;br /&gt;
|-&lt;br /&gt;
| intid  ||  Integration id provided by Nielsen. Used to link different integration inputs, ex. associate single audit ping integration with different viewership pipelines (dar, dtvr, dcr, etc.) ||  || ✓&lt;br /&gt;
|-&lt;br /&gt;
| sessionid  || Unique, client-generated value that represents the start of a user browsing session. Must match sessionid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| streamid || Unique Id for every new instance of a client video asset playout.  Must match streamid in the Exposure file. || created using the UUID Generator code provided || ✓&lt;br /&gt;
|-&lt;br /&gt;
| pingtype || pingtype Indicator for state type: “start” or “end” audit ping &amp;amp; if the ping is for a stream  ||&lt;br /&gt;
* Startstream = 1&lt;br /&gt;
* Startsession=0&lt;br /&gt;
* Endstream = 3&lt;br /&gt;
* Endsession=2&lt;br /&gt;
|| ✓&lt;br /&gt;
|-&lt;br /&gt;
| product || Indicates which Nielsen product the audit ping corresponds to. || dcr || ✓&lt;br /&gt;
|-&lt;br /&gt;
| createtm || Time the ping was fired: utc (in seconds) If server time available, use it instead of device time || || ✓&lt;br /&gt;
|-&lt;br /&gt;
| devid || '''ONLY for''' '''android''' platform, DO NOT pass devid for '''ios''', '''browser''' and '''ott''' platforms. devid,  SHA-256 value of Device Id (ADID) -  OPTIONAL if passed in the Asset Viewing File  || || ✓&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Generic Ping Format:'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=&amp;lt;App id&amp;gt;&amp;amp;intid=&amp;lt;Integration ID&amp;gt;&amp;amp;sessionid=&amp;lt;Session Id&amp;gt;&amp;amp;streamid=&amp;lt;Stream Id&amp;gt;&amp;amp;pingtype=&amp;lt;Ping Type&amp;gt;&amp;amp;product=&amp;lt;dcr or dtvr&amp;gt;&amp;amp;createtm=&amp;lt;Session Start or End time&amp;gt;&amp;amp;devid=&amp;lt;Android ADID&amp;gt;'''&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Audit Ping Examples:''' &lt;br /&gt;
&lt;br /&gt;
* '''End Audit Ping Example (Startsession)'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
https://audit.nmrodam.com/cgi-bin/gn?prd=audit&amp;amp;apid=FC984EC1-E044-B465-E040-070AAD3173A1&amp;amp;&amp;amp;intid=xxxxxxxx&amp;amp;sessionid=2576459933726989&amp;amp;streamid=3679422587354472&amp;amp;pingtype=0&amp;amp;product=dcr&amp;amp;createtm=1476459970&amp;amp;devid=12b9377cbe7e5c94e8a70d9d23929523d14afa954793130f8a3959c7b849aca8&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UUID Generator Code ==&lt;br /&gt;
&lt;br /&gt;
/ ID example: LsTYTmZQPwdchsNZkdtJp9lErjgAp1632729088&lt;br /&gt;
&lt;br /&gt;
''' Create random GUID'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function buildGUID() {&lt;br /&gt;
    var UAIDbase62Characters = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&amp;quot;;&lt;br /&gt;
    var UAIDpayloadLength = 29;&lt;br /&gt;
&lt;br /&gt;
    function UAIDgetRandom62() {&lt;br /&gt;
        var r1;&lt;br /&gt;
        do {&lt;br /&gt;
            r1 = Math.floor(Math.random() * (16 * 62));&lt;br /&gt;
        } while (r1 &amp;gt; 61); &lt;br /&gt;
        return r1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var uid = '';&lt;br /&gt;
    for (var a = 0; a &amp;lt; UAIDpayloadLength; a++) {&lt;br /&gt;
        uid += UAIDbase62Characters.charAt(UAIDgetRandom62());&lt;br /&gt;
    }&lt;br /&gt;
    var timestamp_ms = new Date().getTime();&lt;br /&gt;
    uid += String(timestamp_ms).substring(3);&lt;br /&gt;
    return uid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>WilsonQ</name></author>
	</entry>
</feed>