Digital Measurement SEI Streaming Content Viewing: Difference between revisions

From Engineering Client Portal

 
(23 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Breadcrumb|}} {{Breadcrumb|Digital}} {{CurrentBreadcrumb}}
{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|Digital Streaming Measurement}} {{CurrentBreadcrumb}}
[[Category:Digital]]
[[Category:Digital]]


This interface specification depicts the file schema required to supply Nielsen with response-level Viewing data in a “Server-to-Server” relationship for incorporation into the Nielsen One Content and/or Nielsen One Ads products.
This interface specification depicts the file schema required to supply Nielsen with response-level Viewing data in a “Server-to-Server” relationship for incorporation into the Nielsen One Content and/or Nielsen One Ads products.
This document describes the log file exposures, to be used in conjunction with [[Digital Measurement Content Audit Beacon]]


== Delivery Specifications ==
== Delivery Specifications ==
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.  
Files should be delivered at a fixed cadence in a dedicated S3 bucket the following prefix and object naming conventions and data formats.  


* All prefix labels and file names should be lowercase except for app ids.  
* All prefix labels and file names should be lowercase except for app ids.  
* Supported format are:
* Supported format are:
** Apache Parquet format with snappy compression; (preferred)
** Text files with utf-8 encoding in JSON Lines format;
** Text files with utf-8 encoding in JSON Lines format;
** Apache Parquet format with snappy compression;
* All data files have extensions to indicate the file format (.json | .parquet)
* All data files have extensions to indicate the file format (.json | .parquet)
* Data file can be partitioned into multiple parts with min size of 256MB
* Data file can be partitioned into multiple parts with min size of 256MB
Line 16: Line 18:


=== S3 Bucket and Prefix Naming Convention ===
=== S3 Bucket and Prefix Naming Convention ===
<code>useast1-nlsn-w-dig-sei-<'''partnerid'''>-feeds-'''<env>/<filetype>/<split>/yyyy/mm/dd/hh/<object>'''</code>
<code>useast1-nlsn-w-dig-sei-<'''partnerid'''>-feeds-'''<env>'''/'''<filetype>'''/'''<split>'''/'''yyyy/mm/dd/hh'''/'''<object>'''</code>
{| class="wikitable"
{| class="wikitable"
!'''Name'''
!'''Name'''
Line 25: Line 27:
|-
|-
|env
|env
|"test" or "prod"
|<code>test</code> or <code>prod</code>
|-
|-
|filetype
|filetype
|exposure, dcr-exposure, dar-exposure, audio-exposure, etc., where:
|<code>exposure</code>, <code>dcr-exposure</code>, <code>dar-exposure</code>, <code>audio-exposure</code>, etc., where:


* exposure is reserved for multi-product files
* exposure is reserved for multi-product files
* <product>-exposure is for single product files, where <product> is [dar|dcr|dtvr|ctvc|audio]
* <product>-exposure is for single product files, where <product> is [<code>dar</code>|<code>dcr</code>|<code>dtvr</code>|<code>ctvc</code>|<code>audio</code>]
|-
|-
|split
|split
Line 45: Line 47:


=== S3 Bucket and Prefix Naming Convention ===
=== S3 Bucket and Prefix Naming Convention ===
<code>'''<partnerid>'''_'''<filetype>_<intid>_<appid>_<starttime>_<endtime>.[json|parquet]'''</code>
<code><'''partnerid'''>_<'''filetype'''>_<'''intid'''>_<'''appid'''>_<'''starttime'''>_<'''endtime'''>.['''json'''|'''parquet''']</code>
{| class="wikitable"
{| class="wikitable"
!'''Name'''
!'''Name'''
Line 77: Line 79:


=== Success File ===
=== Success File ===
Empty '''_SUCCESS''' file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split).
Empty <code>'''_SUCCESS'''</code> file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split).


=== Manifest File ===
=== Manifest File ===
A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in .json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the '''_manifest''' suffix.
A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in .json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the <code>'''_manifest'''</code> suffix.


Example:
Example:
Line 97: Line 99:
      "start_time": "1710154800",
      "start_time": "1710154800",
      "end_time": "1710158399",
      "end_time": "1710158399",
      "record_count": 55
      "record_count": 31337
    }
    }
  }
  }
Line 115: Line 117:
|Yes
|Yes
|Nielsen
|Nielsen
|S2SV1.7.0
|<code>S2SV1.7.0</code>
|String
|String
|-
|-
Line 122: Line 124:
|No
|No
|Client
|Client
|MRC = 1
|<code>MRC = 1</code>
|String
|String
|-
|-
Line 130: Line 132:
|Client
|Client
|Format:32-bit unsigned int Unix time in seconds
|Format:32-bit unsigned int Unix time in seconds
Example: <code>1710154800</code>
|String
|String
|-
|-
Line 137: Line 140:
|Client
|Client
|Format:32-bit unsigned int Unix time in seconds
|Format:32-bit unsigned int Unix time in seconds
Example: <code>1710158399</code>
|String
|String
|-
|-
Line 143: Line 147:
|Yes
|Yes
|Client
|Client
|Example: 31337
|Example: <code>31337</code>
|Number
|Number
|}
|}


=== Data delivery example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC): ===
=== Data delivery example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC): ===
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0000.json
<code>useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0000.json


useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0001.json
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0001.json
Line 158: Line 162:
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_manifest
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_manifest


useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/_SUCCESS
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/_SUCCESS</code>


== SLA ==
== SLA ==
Line 173: Line 177:
[[File:Phone_Playback.png]]
[[File:Phone_Playback.png]]


For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: "secondscr":"MIR" and include in respective mobile platform Viewing file.  
For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: <code>"secondscr":"MIR"</code> and include in respective mobile platform Viewing file.  


For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file.
For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file.
<syntaxhighlight lang="JSON">
<syntaxhighlight lang="JSON">
{ ... "sessionid":"ABC","streamid":"DEF","position":[
{...
{"referencestart":"xxxxxxx123","referenceend":"xxxxxxx183",
  "sessionid":"ABC",
"playheadstart":"0","playheadend":"60"},
  "streamid":"DEF",
{"referencestart":"xxxxxxx243","referenceend":"xxxxxxx303",
  "position":[
"playheadstart":"120","playheadend":"180"}
      {
]}
        "referencestart":"xxxxxxx123",
        "referenceend":"xxxxxxx183",
        "playheadstart":"0",
        "playheadend":"60"
      },
      {
        "referencestart":"xxxxxxx243",
        "referenceend":"xxxxxxx303",
        "playheadstart":"120",
        "playheadend":"180"
      }
  ]
}
</syntaxhighlight>
</syntaxhighlight>




<syntaxhighlight lang="JSON">
<syntaxhighlight lang="JSON">
{ ... "sessionid":"ABC","streamid":"DEF","position":[
{...
{"referencestart":"xxxxxxx183","referenceend":"xxxxxxx243",
  "sessionid":"ABC",
"playheadstart":"60","playheadend":"120"}],
  "streamid":"DEF",
"secondscr":"OTT"}
  "position":[
]}
      {
        "referencestart":"xxxxxxx183",
        "referenceend":"xxxxxxx243",
        "playheadstart":"60",
        "playheadend":"120"
      }
  ],
  "secondscr":"OTT"
}
</syntaxhighlight>
</syntaxhighlight>


Line 204: Line 228:
|Application name
|Application name
|Yes
|Yes
|Format: alphanumeric
|
Format: alphanumeric


Example: BestAppIOS
Example:
<code>BestAppIOS</code>
|-
|-
| colspan="2" |apv
| colspan="2" |apv
|Application version
|Application version
|Yes
|Yes
|Format: alphanumeric
|
Format: alphanumeric


Example: 21.5
Example:
<code>21.5</code>
|-
|-
| colspan="2" |sessionid
| colspan="2" |sessionid
|Unique, client generated value that represents the start of a user session. “Session” is defined as continuous (flexible) interaction with an application that may span multiple streams.
|Unique, client generated value that represents the start of a user session. "Session" is defined as continuous (flexible) interaction with an application that may span multiple streams.
|Yes
|Yes
|Format: alphanumeric
|
Format: alphanumeric


Example: Random GUID: ce6c1c95-de3e-431e-b11e-77…
Example: Random GUID:
<code>cdcde33c-b62f-4f17-a9c8-0db4f78e09d6</code>
|-
|-
| colspan="2" |streamid
| colspan="2" |streamid
|ID for every new instance of exposure to a different asset
|ID for every new instance of exposure to a different asset
|Yes, if no sessionid
|Yes, if no sessionid
|Format: alphanumeric
|
Format: alphanumeric


Example: Random GUID: d7a909f1-5e77-4af7-8a9b-f2…
Example: Random GUID:  
<code>d7a909f1-5e77-4af7-8a9b-f2…</code>
|-
|-
| colspan="2" |streamended
| colspan="2" |streamended
|Stream is known to have ended in this file
|Stream is known to have ended in this file
|Yes
|Yes
|Format: integer,
|
Format: integer


Example: 1 (stream continues in subsequent file), 2 (stream closed)
Example:  
*<code>1</code> (stream continues in subsequent file),
*<code>2</code> (stream closed)
|-
|-
| colspan="2" |publisher_user_id
| colspan="2" |publisher_user_id
|Publisher-specific user ID (must remain persistent indefinitely)
|Publisher-specific user ID (must remain persistent indefinitely)
|No
|No
|Format: alphanumeric
|
Format: alphanumeric


Example: Salted, hashed user ID:  
Example:  
Salted, hashed user ID:  


8f434346648f6b96d9dda901c5…
<code>8f434346648f6b96d9dda901c5…</code>
|-
|-
| colspan="2" |provider_user_id
| colspan="2" |provider_user_id
|Provider-specific user ID (must remain persistent indefinitely)
|Provider-specific user ID (must remain persistent indefinitely)
|No
|No
|Format: alphanumeric
|
Format: alphanumeric


Example: Salted, hashed user ID:  
Example: Salted, hashed user ID:  


2cf24dba5fb0a30e26e83b2ab9…
<code>2cf24dba5fb0a30e26e83b2ab9…</code>
|-
|-
| colspan="2" |assetid
| colspan="2" |assetid
|In-house id used for a video asset (TMS ID if available)
|In-house id used for a video asset (TMS ID if available)
|Yes
|Yes
|Format: alphanumeric
|
Format: alphanumeric


Example: VID123456789
Example:  
<code>VID123456789</code>
|-
|-
| colspan="2" |nielsen_id3_tag
| colspan="2" |nielsen_id3_tag
|Encrypted Nielsen ID3 Tag. Contains SID (Source Identifier) codes (PC - Program Content  &  FD - Final Distributor).
|Encrypted Nielsen ID3 Tag. Contains SID (Source Identifier) codes (PC - Program Content  &  FD - Final Distributor).
|Optional
|Optional
|Format: alphanumeric;  
|
Format: alphanumeric;  


Example:  
Example:  


www.nielsen.com/0UQ1mB-DRZMCTQ3Fr9zLjw==/EnVp4bRmgPx7KDNctoTVpQ==/AAcCEP7hk_DDqQuocAM3JRHB7raS8j8yKAM2b3Na2F9Po4yWm87KA6Ubefb3Hb6Fj_GOijXnlXw1yzgKzpc0J-cCEFEQqjGD2HHpSj5upGJyz6V0lx5j64rfFd4jyv3cxHGz_UKb-yJdHKTHKB11Iv_LJls1P1xbNT9iOo8=/29100/36900/00
<code>www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/X100zdCIGeIlgZnkYj6UvQ==<wbr />/AAAB2Jz2_k74GXSzx4npHuI<wbr />_JwJd3QSUpW30rDkGTcbHEzIMWleCzM-uvNOP9fzJcQMWQLJqzXMCAxParOb5sGijSV9dNM3QiBniJYGZ5GI<wbr />-lL1fXTTN0IgZ4iWBmeRiPpS9AAAAAAAAAAAAAAAAAAAAAFJWFM5SVhTONNU=<wbr />/00000/00000/00</code>


Note: Only Data Tags should be included, INFO Tags should not.  
Note: Only Data Tags should be included, INFO Tags should not.  
Line 276: Line 317:
Example INFO Tag (not desired):
Example INFO Tag (not desired):


www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/X100zdCIGeIlgZnkYj6UvQ==/AAICoyitYqlxT7n6aZ0oMCGheFi4CXFp46AMUPZz1lMr_M9tr3_cjee1SHqxrOiVerMDLeyn9xzocZSKwi746Re8vNOtpNCAZjYABs_J0R25IHpvOc1HS8QHGgD5TgOJeS6gX100zdCIGeIlgZnkYj6UvVJWFNhSVhTiPE0=/00000/46016/00
<code>www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/X100zdCIGeIlgZnkYj6UvQ==/<wbr />AAICoyitYqlxT7n6aZ0oMCGheFi4CXFp46AMUPZz1lMr_M9tr3<wbr />_cjee1SHqxrOiVerMDLeyn9xzocZSKwi746Re8vNOtpNCAZjYABs_<wbr />J0R25IHpvOc1HS8QHGgD5TgOJeS6gX100zdCIGeIlgZnkYj6UvVJWFNhSVhTiPE0=<wbr />/00000/46016/00</code>
|-
|-
| colspan="2" |gracenote_id
| colspan="2" |gracenote_id
|Gracenote TMS ID (If available) should be passed for all telecasted content.
|Gracenote TMS ID (If available) should be passed for all telecasted content.
|Required if id3 not provided
|Required if id3 not provided
|Format: 14 character string. Normally leading with 2 alpha characters ('EP', 'MV', 'SH' or 'SP'), followed by 12 numbers.
|
Format: 14 character string. Normally leading with 2 alpha characters ('EP', 'MV', 'SH' or 'SP'), followed by 12 numbers.


Example: SH009311820022
Example:  
<code>SH009311820022</code>
|-
|-
| colspan="2" |station_id
| colspan="2" |station_id
|GraceNote station ID that identifies the station
|GraceNote station ID that identifies the station
|Required if id3 not provided
|Required if id3 not provided
|Format: alphanumeric
|
Format: alphanumeric
|-
|-
| colspan="2" |program_name
| colspan="2" |program_name
|Name of program
|Name of program
|Required if id3 not provided
|Required if id3 not provided
|Format: alphanumeric, Max 25 characters; no special characters.
|
Format: alphanumeric, Max 25 characters; no special characters.


Example: Nightly News  
Example:  
<code>Nightly News</code>


See below for more specific guidance on Program Name.
See below for more specific guidance on Program Name.
Line 302: Line 348:
|Network affiliation of a station
|Network affiliation of a station
|Required if id3 not provided
|Required if id3 not provided
|Format: alphanumeric
|
Format: alphanumeric


Example: xyz
Example:  
<code>xyz</code>
|-
|-
| colspan="2" |channel_id
| colspan="2" |channel_id
|ID of channel
|ID of channel
|Required if id3 not provided
|Required if id3 not provided
|Format: integer
|
Format: integer
|-
|-
| colspan="2" |channel_name
| colspan="2" |channel_name
|Name of channel
|Name of channel
|Required if id3 not provided
|Required if id3 not provided
|Format: alphanumeric
|
Format: alphanumeric
|-
|-
| colspan="2" |callsign
| colspan="2" |callsign
| FCC assigned unique identifier for a transmitter station
| FCC assigned unique identifier for a transmitter station
|Required if id3 not provided
|Required if id3 not provided
|Format: alphanumeric
|
Format: alphanumeric
|-
|-
| colspan="2" |dma
| colspan="2" |dma
|Designated Market Area where viewing occurred
|Designated Market Area where viewing occurred
|Yes
|Yes
|501
|<code>501</code>
|-
|-
| colspan="2" |ad_load_flag
| colspan="2" |ad_load_flag
|linear or dynamic ad load
|linear or dynamic ad load
|Yes
|Yes
|Format: integer;
|
Format: integer;


0 = Default / Unknown  
*<code>0</code> = Default / Unknown  
 
*<code>1</code> = linear ad load
1 = linear ad load
*<code>2</code> = dynamic ad load
 
2 = dynamic ad load
|-
|-
| colspan="2" |ad_support_flag
| colspan="2" |ad_support_flag
|Intended method of monetizing the content
|Intended method of monetizing the content
|Yes
|Yes
|Format: integer;
|
Format: integer;


0 = (no ad's),
*<code>0</code> = (no ads),
*<code>1</code> = (content is supported by ads)
*<code>2</code> = (not known)


1 = (content is supported by ad’s),
Note: set to "<code>1</code>" if content ad support was intended but did not occur
 
2 = (not known)
 
Note: set to "1" if content ad support was intended but did not occur
|-
|-
| colspan="2" |position
| colspan="2" |position
Line 357: Line 406:
See below for additional details on position array parameters
See below for additional details on position array parameters
|Yes
|Yes
|Format:  
|
Format:  


<syntaxhighlight lang="JSON">
"position": [{
"position": [{
 "referencestart":"[timestamp]",
 "referencestart":"[timestamp]",
 
 "referenceend":"[timestamp]"
 "referenceend":"[timestamp]",
 
 "playheadstart":"[playhead position]",
 "playheadstart":"[playhead position]",
 "playheadend":"[playhead position]"
 "playheadend":"[playhead position]"
}]
}]
</syntaxhighlight>
|-
|-
|{
|{
Line 375: Line 422:
|Wall clock reference start time
|Wall clock reference start time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds
|
Format: Unix timestamp in 32-bit unsigned int in seconds


Example: 1577858505
Example:  
<code>1577858505</code>
|-
|-
|
|
Line 383: Line 432:
|Wall clock reference end time
|Wall clock reference end time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds
|
Format: Unix timestamp in 32-bit unsigned int in seconds


Example: 1577858775
Example:  
<code>1577858775</code>
|-
|-
|
|
Line 391: Line 442:
|Content position start time
|Content position start time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)
|
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)


Example: 1577858515
Example:  
<code>1577858515</code>
|-
|-
|<nowiki>}</nowiki>
|<nowiki>}</nowiki>
Line 399: Line 452:
|Content position end time
|Content position end time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)
|
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)


Example: 1577858785
Example:  
<code>1577858785</code>
|-
|-
| colspan="2" |viewedads
| colspan="2" |viewedads
Line 408: Line 463:
See below for additional details on position array parameters
See below for additional details on position array parameters
|Yes
|Yes
|Format:  
|
 
Format:  
"viewedads": [{"adpod":"0","adposition":"0","adid":"0","isdarid":"0","adstart":"utc","adend":"utc","advisible":"0","adfocus":"0","adaudio":"0"}]
<syntaxhighlight lang="JSON">
"viewedads":  
[
  {
      "adpod":"0",
      "adposition":"0",
      "adid":"0",
      "isdarid":"0",
      "adstart":"utc",
      "adend":"utc",
      "advisible":"0",
      "adfocus":"0",
      "adaudio":"0"
  }
]
</syntaxhighlight>
|-
|-
|{
|{
|adpod
|adpod
|AdPod sequence number.
|AdPod sequence number.</code>


Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played.
Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played.
|Yes
|Yes
|Format: Integer
|
Format: Integer


Example: 2
Example:  
<code>2</code>
|-
|-
|
|
Line 428: Line 500:
Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played
Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played
|Yes
|Yes
|Format: Integer
|
Format: Integer


Example: 1
Example:  
<code>1</code>
|-
|-
|
|
Line 436: Line 510:
| The unique identifier for this Ad
| The unique identifier for this Ad
|No
|No
|Format: alphanumeric
|
Format: alphanumeric


In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID
In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID
Line 444: Line 519:
|Is the AdId being passed a Nielsen DAR placement ID
|Is the AdId being passed a Nielsen DAR placement ID
|Required if AdID
|Required if AdID
|Format: integer
|
 
Format: integer
0 = is NOT DAR ID; 1 = is a DAR ID
*<code>0</code> = is NOT DAR ID;
*<code>1</code> = is a DAR ID
|-
|-
|
|
Line 452: Line 528:
|Wall clock reference start time
|Wall clock reference start time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds
|
Format: Unix timestamp in 32-bit unsigned int in seconds
|-
|-
|<nowiki>}</nowiki>
|<nowiki>}</nowiki>
Line 458: Line 535:
|Wall clock reference end time
|Wall clock reference end time
|Yes
|Yes
|Format: Unix timestamp in 32-bit unsigned int in seconds
|
Format: Unix timestamp in 32-bit unsigned int in seconds
|-
|-
| colspan="2" |device_id
| colspan="2" |device_id
Line 465: Line 543:


available
available
|A487421B-XXXX-YYYY-8343-E3BBB66E44F2
|<code>A487421B-XXXX-YYYY-8343-E3BBB66E44F2</code>
|-
|-
| colspan="2" |hem_sha256
| colspan="2" |hem_sha256
Line 472: Line 550:
Note: email normalization rules applied before hashing
Note: email normalization rules applied before hashing
|Strongly Preferred
|Strongly Preferred
|55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC…
|<code>55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC…</code>
|-
|-
| colspan="2" |luid
| colspan="2" |luid
|Living Unit ID - Experian Household ID
|Living Unit ID - Experian Household ID
|Yes, for CTV if available
|Yes, for CTV if available
|B0EOFEDgD
|<code>B0EOFEDgD</code>
|-
|-
| colspan="2" |uoo
| colspan="2" |uoo
|User opt out flag for demographic measurement
|User opt out flag for demographic measurement
|Yes
|Yes
|Format: integer
|
 
Format: integer
0 = not opt-out, 1 = opt-out
*<code>0</code> = not opt-out
*<code>1</code> = opt-out
|-
|-
| colspan="2" |xdua
| colspan="2" |xdua
|Device HTTP User Agent string
|Device HTTP User Agent string
|Yes
|Yes
|Format: alphanumeric,  
|
Format: alphanumeric,  


Example: Apple-iPhone1C2/801.293
Example:  
<code>Apple-iPhone1C2/801.293</code>
|-
|-
| colspan="2" |xff
| colspan="2" |xff
|IP address
|IP address
|Yes
|Yes
|Format: xxx.xxx.xxx.xxx
|
Format: xxx.xxx.xxx.xxx
|-
|-
| colspan="2" |psudo_id_sha256
| colspan="2" |psudo_id_sha256
|Hashed Device User Agent string + IP address
|Hashed Device User Agent string + IP address
|No
|No
|421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173…
|<code>421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173…</code>
|-
|-
| colspan="5" | The following 4 parameters become mandatory if Device User Agent String (UAS) is not available
| colspan="5" | The following 4 parameters become mandatory if Device User Agent String (UAS) is not available
Line 508: Line 590:
|Device platform(mobile, desktop, connected device)
|Device platform(mobile, desktop, connected device)
|Required if no UAS
|Required if no UAS
|DSK, MBL, OTT
|<code>DSK</code>, <code>MBL</code>, <code>OTT</code>
|-
|-
| colspan="2" |device_type
| colspan="2" |device_type
|Device type for connected devices
|Device type for connected devices
|Required if no UAS
|Required if no UAS
|AMN, APL, DVD, GGL, PSX, RKU, STB, STV, XBX
|<code>AMN</code>, <code>APL</code>, <code>DVD</code>, <code>GGL</code>, <code>PSX</code>, <code>RKU</code>, <code>STB</code>, <code>STV</code>, <code>XBX</code>
|-
|-
| colspan="2" |os_group
| colspan="2" |os_group
|Operating system of mobile devices. All other device should be NA
|Operating system of mobile devices. All other device should be NA
|Required if no UAS
|Required if no UAS
|IOS, DROID, NA
|<code>IOS</code>, <code>DROID</code>, <code>NA</code>
|-
|-
| colspan="2" |device_group
| colspan="2" |device_group
|Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown
|Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown
|Required if no UAS
|Required if no UAS
|DSK, PHN, TAB, STV, DVD, PMP, OTHER, STB, XBX, PSX, AMN, APL, GGL, RKU, UNWN
|<code>DSK</code>, <code>PHN</code>, <code>TAB</code>, <code>STV</code>, <code>DVD</code>, <code>PMP</code>, <code>OTHER</code>, <code>STB</code>, <code>XBX</code>, <code>PSX</code>, <code>AMN</code>, <code>APL</code>, <code>GGL</code>, <code>RKU</code>, <code>UNWN</code>
|-
|-
| colspan="5" | The following 4 parameters become mandatory if IP Address is not available
| colspan="5" | The following 4 parameters become mandatory if IP Address is not available
Line 531: Line 613:
|Required if no IP
|Required if no IP
|Format: integer
|Format: integer
 
*<code>0</code> = not bot,
0 = not bot, 1 = bot
*<code>1</code> = bot
|-
|-
| colspan="2" |zip_code
| colspan="2" |zip_code
| ZIP code where viewing occurred
| ZIP code where viewing occurred
|Required if no IP
|Required if no IP
|10001
|<code>10001</code>
|-
|-
| colspan="2" |country
| colspan="2" |country
|Country ISO 3166 ALPHA-2
|Country ISO 3166 ALPHA-2
|Required if no IP
|Required if no IP
| US, CA, etc.
| <code>US</code>, <code> CA</code>, etc.
|}
|}
Note: All parameters are case sensitive.
Note: All parameters are case sensitive.

Latest revision as of 18:52, 14 August 2024

Engineering Portal / Digital / Digital Streaming Measurement / Digital Measurement SEI Streaming Content Viewing

This interface specification depicts the file schema required to supply Nielsen with response-level Viewing data in a “Server-to-Server” relationship for incorporation into the Nielsen One Content and/or Nielsen One Ads products.

This document describes the log file exposures, to be used in conjunction with Digital Measurement Content Audit Beacon

Delivery Specifications

Files should be delivered at a fixed cadence in a dedicated S3 bucket the following prefix and object naming conventions and data formats.

  • All prefix labels and file names should be lowercase except for app ids.
  • Supported format are:
    • Apache Parquet format with snappy compression; (preferred)
    • Text files with utf-8 encoding in JSON Lines format;
  • All data files have extensions to indicate the file format (.json | .parquet)
  • Data file can be partitioned into multiple parts with min size of 256MB
  • Data can be delivered separately in multiple splits, 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 SEI system

S3 Bucket and Prefix Naming Convention

useast1-nlsn-w-dig-sei-<partnerid>-feeds-<env>/<filetype>/<split>/yyyy/mm/dd/hh/<object>

Name Description
partnerid Abbreviation provided by Nielsen for each provider or publisher
env test or prod
filetype exposure, dcr-exposure, dar-exposure, audio-exposure, etc., where:
  • exposure is reserved for multi-product files
  • <product>-exposure is for single product files, where <product> is [dar|dcr|dtvr|ctvc|audio]
split a separate data split, can be by platform (ex.: ios, browser, android, ctv), by country (us, ca, jp, etc.), by publisher, by team, etc. or “all” (if data is provided in one split).
yyyy/mm/dd/hh
  • yyyy - year
  • mm - month
  • dd - date padded with 0 example 01, 02,..., 31
  • hh - hour padded with 0 example 00, 02,..., 23

S3 Bucket and Prefix Naming Convention

<partnerid>_<filetype>_<intid>_<appid>_<starttime>_<endtime>.[json|parquet]

Name Description
partnerid Abbreviation provided by Nielsen for each provider or publisher
filetype exposure, dcr-exposure, dar-exposure, audio-exposure, etc., where:
  • exposure is reserved for multi-product files
  • <product>-exposure is for single product files, where <product> is [dar|dcr|dtvr|ctvc|audio]
initid integration id: unique identifier provided by Nielsen
appid Nielsen-provided server application identifier
starttime start date and hour of the data in the file in UTC
  • Example format: yyyymmddhh
endtime end date and hour (not inclusive)  of the data in the file in UTC
  • Example format: yyyymmddhh

Success File

Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split).

Manifest File

A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in .json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the _manifest suffix.

Example:

 {
   "entries": [
     {"url":"s3://bucket/prefix/0000_object_00.snappy.parquet", "mandatory":true},
     {"url":"s3://bucket/prefix/0001_object_00.snappy.parquet", "mandatory":true},
     {"url":"s3://bucket/prefix/0002_object_00.snappy.parquet", "mandatory":true}
     {"url":"s3://bucket/prefix/0003_object_00.snappy.parquet", "mandatory":true}
   ],

   "meta": {
     "schema_version": "S2SV1.7.0",
     "accreditation_status": "0",
     "start_time": "1710154800",
     "end_time": "1710158399",
     "record_count": 31337
   }
 }

The manifest contains a complete list of all files provided for a given period and split, as well as a meta data (a.k.a. header) which should include the following attributes:

Parameter Description Required Specified Format / Example Type
schema_version Schema Version Yes Nielsen S2SV1.7.0 String
accreditation_status Accreditation Status No Client MRC = 1 String
data_start_time Data Start Time (min) Yes Client Format:32-bit unsigned int Unix time in seconds

Example: 1710154800

String
data_end_time Data Start Time (max) Yes Client Format:32-bit unsigned int Unix time in seconds

Example: 1710158399

String
record_count Number of records in data file Yes Client Example: 31337 Number

Data delivery example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0000.json

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0001.json

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0002.json

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0003.json

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_manifest

useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/_SUCCESS

SLA

The files must be delivered into the proper S3 bucket within 3 hours of the start of that hourly viewing file interval. For example, files from 1:00 AM to 2:00 AM must be delivered before 4 AM.

Accuracy of Measurement

The reported “wall clock” time of viewing needs to be within 25 seconds of the actual viewing time.

The reported content “reference” time needs to match the actual content that was played out with plus/minus 10 seconds (for clarity: start and end times can each be off by up to 10 seconds, so the combined under/over reporting for each individual viewing segment should be no greater than 20 seconds)

CTV, Mirroring, and Casting

For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple TV), audit ping should fire from the OTT device, and Viewing data should reside in OTT Viewing file.

Phone Playback.png

For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: "secondscr":"MIR" and include in respective mobile platform Viewing file.

For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file.

{...
   "sessionid":"ABC",
   "streamid":"DEF",
   "position":[
      {
         "referencestart":"xxxxxxx123",
         "referenceend":"xxxxxxx183",
         "playheadstart":"0",
         "playheadend":"60"
      },
      {
         "referencestart":"xxxxxxx243",
         "referenceend":"xxxxxxx303",
         "playheadstart":"120",
         "playheadend":"180"
      }
   ]
}


{...
   "sessionid":"ABC",
   "streamid":"DEF",
   "position":[
      {
         "referencestart":"xxxxxxx183",
         "referenceend":"xxxxxxx243",
         "playheadstart":"60",
         "playheadend":"120"
      }
   ],
   "secondscr":"OTT"
}

Schema Parameter Definitions

Parameter Description Required Format / Example
apn Application name Yes

Format: alphanumeric

Example: BestAppIOS

apv Application version Yes

Format: alphanumeric

Example: 21.5

sessionid Unique, client generated value that represents the start of a user session. "Session" is defined as continuous (flexible) interaction with an application that may span multiple streams. Yes

Format: alphanumeric

Example: Random GUID: cdcde33c-b62f-4f17-a9c8-0db4f78e09d6

streamid ID for every new instance of exposure to a different asset Yes, if no sessionid

Format: alphanumeric

Example: Random GUID: d7a909f1-5e77-4af7-8a9b-f2…

streamended Stream is known to have ended in this file Yes

Format: integer

Example:

  • 1 (stream continues in subsequent file),
  • 2 (stream closed)
publisher_user_id Publisher-specific user ID (must remain persistent indefinitely) No

Format: alphanumeric

Example: Salted, hashed user ID:

8f434346648f6b96d9dda901c5…

provider_user_id Provider-specific user ID (must remain persistent indefinitely) No

Format: alphanumeric

Example: Salted, hashed user ID:

2cf24dba5fb0a30e26e83b2ab9…

assetid In-house id used for a video asset (TMS ID if available) Yes

Format: alphanumeric

Example: VID123456789

nielsen_id3_tag Encrypted Nielsen ID3 Tag. Contains SID (Source Identifier) codes (PC - Program Content  &  FD - Final Distributor). Optional

Format: alphanumeric;

Example:

www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/X100zdCIGeIlgZnkYj6UvQ==/AAAB2Jz2_k74GXSzx4npHuI_JwJd3QSUpW30rDkGTcbHEzIMWleCzM-uvNOP9fzJcQMWQLJqzXMCAxParOb5sGijSV9dNM3QiBniJYGZ5GI-lL1fXTTN0IgZ4iWBmeRiPpS9AAAAAAAAAAAAAAAAAAAAAFJWFM5SVhTONNU=/00000/00000/00

Note: Only Data Tags should be included, INFO Tags should not.

INFO Tag is characterized by the following CID prefix: X100zdCIGeIlgZnkYj6UvQ==

Example INFO Tag (not desired):

www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/X100zdCIGeIlgZnkYj6UvQ==/AAICoyitYqlxT7n6aZ0oMCGheFi4CXFp46AMUPZz1lMr_M9tr3_cjee1SHqxrOiVerMDLeyn9xzocZSKwi746Re8vNOtpNCAZjYABs_J0R25IHpvOc1HS8QHGgD5TgOJeS6gX100zdCIGeIlgZnkYj6UvVJWFNhSVhTiPE0=/00000/46016/00

gracenote_id Gracenote TMS ID (If available) should be passed for all telecasted content. Required if id3 not provided

Format: 14 character string. Normally leading with 2 alpha characters ('EP', 'MV', 'SH' or 'SP'), followed by 12 numbers.

Example: SH009311820022

station_id GraceNote station ID that identifies the station Required if id3 not provided

Format: alphanumeric

program_name Name of program Required if id3 not provided

Format: alphanumeric, Max 25 characters; no special characters.

Example: Nightly News

See below for more specific guidance on Program Name.

network_affiliate Network affiliation of a station Required if id3 not provided

Format: alphanumeric

Example: xyz

channel_id ID of channel Required if id3 not provided

Format: integer

channel_name Name of channel Required if id3 not provided

Format: alphanumeric

callsign FCC assigned unique identifier for a transmitter station Required if id3 not provided

Format: alphanumeric

dma Designated Market Area where viewing occurred Yes 501
ad_load_flag linear or dynamic ad load Yes

Format: integer;

  • 0 = Default / Unknown
  • 1 = linear ad load
  • 2 = dynamic ad load
ad_support_flag Intended method of monetizing the content Yes

Format: integer;

  • 0 = (no ads),
  • 1 = (content is supported by ads)
  • 2 = (not known)

Note: set to "1" if content ad support was intended but did not occur

position Array of contiguous content viewing.

For viewing gaps < than 1 second, the gap can be smoothed over

See below for additional details on position array parameters

Yes

Format:

"position": [{
 "referencestart":"[timestamp]",
 "referenceend":"[timestamp]"
 "playheadstart":"[playhead position]",
 "playheadend":"[playhead position]"
}]
{ referencestart Wall clock reference start time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds

Example: 1577858505

referenceend Wall clock reference end time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds

Example: 1577858775

playheadstart Content position start time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)

Example: 1577858515

} playheadend Content position end time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD)

Example: 1577858785

viewedads Array of ads viewed by client.

See below for additional details on position array parameters

Yes

Format:

"viewedads": 
[
   {
      "adpod":"0",
      "adposition":"0",
      "adid":"0",
      "isdarid":"0",
      "adstart":"utc",
      "adend":"utc",
      "advisible":"0",
      "adfocus":"0",
      "adaudio":"0"
   }
]
{ adpod AdPod sequence number.

Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played.

Yes

Format: Integer

Example: 2

adposition Ad sequence number.

Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played

Yes

Format: Integer

Example: 1

adid The unique identifier for this Ad No

Format: alphanumeric

In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID

isdarid Is the AdId being passed a Nielsen DAR placement ID Required if AdID

Format: integer

  • 0 = is NOT DAR ID;
  • 1 = is a DAR ID
adstart Wall clock reference start time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds

} adend Wall clock reference end time Yes

Format: Unix timestamp in 32-bit unsigned int in seconds

device_id Mobile Ad ID (IDFA, ADID), Connected Device ID Yes,if

available

A487421B-XXXX-YYYY-8343-E3BBB66E44F2
hem_sha256 SHA-256 hashed email

Note: email normalization rules applied before hashing

Strongly Preferred 55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC…
luid Living Unit ID - Experian Household ID Yes, for CTV if available B0EOFEDgD
uoo User opt out flag for demographic measurement Yes

Format: integer

  • 0 = not opt-out
  • 1 = opt-out
xdua Device HTTP User Agent string Yes

Format: alphanumeric,

Example: Apple-iPhone1C2/801.293

xff IP address Yes

Format: xxx.xxx.xxx.xxx

psudo_id_sha256 Hashed Device User Agent string + IP address No 421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173…
The following 4 parameters become mandatory if Device User Agent String (UAS) is not available
device_platform Device platform(mobile, desktop, connected device) Required if no UAS DSK, MBL, OTT
device_type Device type for connected devices Required if no UAS AMN, APL, DVD, GGL, PSX, RKU, STB, STV, XBX
os_group Operating system of mobile devices. All other device should be NA Required if no UAS IOS, DROID, NA
device_group Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown Required if no UAS DSK, PHN, TAB, STV, DVD, PMP, OTHER, STB, XBX, PSX, AMN, APL, GGL, RKU, UNWN
The following 4 parameters become mandatory if IP Address is not available
robotic_flag Flag indicating IAB bot rule if IP address present in IAB bot list Required if no IP Format: integer
  • 0 = not bot,
  • 1 = bot
zip_code ZIP code where viewing occurred Required if no IP 10001
country Country ISO 3166 ALPHA-2 Required if no IP US, CA, etc.

Note: All parameters are case sensitive.