Pre-Certification Checklist - VOD with Ads
Before starting the certification process, please verify the following steps have been completed.
- Your Client Service representative should have already discussed a reporting hierarchy with you -- along with a Parent, Brand, and Sub-brand/Channel
- Your Technical Account Manager should have:
- provided you with an APID
- informed you of our Opt-Out requirement to be included in your Privacy Policy section of your site
- informed you to add the Static Queue Snippit on each page you wish to enable video measurement
- informed you that the apid, 'instanceName', and ‘nol_sdkDebug’ : ‘DEBUG’ should be present in the SDK initialization
Initialization
The first step in the Certification process is to ensure that the Nielsen SDK is initializing on page load, and that the global metadata values are present.
Keys |
Value
|
apid |
PXXXXX-XXXXXX-XXXXX-XXXXX
|
instanceName |
'nlsnInstance'
|
nol_sdkDebug |
debug
|
Browser SDK Queue Snippit & Initialization Example
NSDictionary* appInformation = @
<script type="text/javascript">
// Add Static Queue Snippet
!function(t,n)
{
t[n]=t[n]||{nlsQ:function(e,o,c,r,s,i)
{
return s=t.document,
r=s.createElement("script"),
r.async=1,
r.src=("http:"===t.location.protocol?"http:":"https:")+"//cdn-gl.imrworldwide.com/conf/"+e+".js#name="+o+"&ns="+n,
i=s.getElementsByTagName("script")[0],
i.parentNode.insertBefore(r,i),
t[o]=t[o]||{g:c,ggPM:function(n,e,c,r,s){(t[o].q=t[o].q||[]).push([n,e,c,r,s])}},
t[o]
}
}
}
(window,"NOLBUNDLE");
// Created SDK Instance
var nSdkInstance = NOLBUNDLE.nlsQ("XXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX","nlsnInstance", {nol_sdkDebug: "debug"});
</script>
Test Cases
The following lists the test cases along with the Expected results:
Test Case |
Param |
Expected Result |
Pass/Fail
|
SDK Initialized |
apid |
Correct APID |
|
|
instanceName |
SDK Instance Name |
|
|
nol_sdkDebug |
'DEBUG |
|
loadMetadata() - Content
- Called at beginning of content, or when resuming content from interruption
Test |
Param |
Example Value |
Accepted Values |
Pass/Fail
|
loadMetadata |
type |
"content" |
"content" |
|
|
assetid |
"unique_id_500291" |
(unique per asset) |
|
|
length |
"600" |
length in seconds (int or float) |
|
|
title |
"Episode Title" |
(any non-empty value) |
|
|
program |
"Show Name" |
(any non-empty value) |
|
|
segB |
"Primetime" |
(any value), used for optional breakdown |
|
|
segC |
"Comedy" |
(any value), used for optional breakdown |
|
|
crossId1 |
"EP018S9S290015" |
Gracenote ID |
|
|
crossId2 |
"ABC" |
Network Name |
|
|
isfullepisode |
"y" |
("y" or "n" ) ("Y" or "N" ) |
|
|
airdate |
"20160206 23:00:00 |
"YYYYMMDD[space]HH:MM:SS" -- note: HH=24 hour time |
|
|
adloadtype |
"1" |
"1" for linear ads, "2" for DAI |
|
|
hasAds |
"1" |
"0" for no ads, "1" for has ads |
|
loadMetadata() - ad
- Called at beginning of ad, or when resuming ad from interruption
Test |
Param |
Example Value |
Accepted Values |
Pass/Fail
|
loadMetadata |
assetid |
"ad_2201343201" |
(any non-empty value) |
|
|
type |
"midroll" |
"preroll" , "midroll" , "postroll" |
Example
|
setPlayheadPosition() - Preroll ad
- Track current position of playhead
- Starts at 0 at the beginning of ad
- Updated at least once per second
- Separate playhead position for ads and content, should accurately reflect current position in either ads or content
Test Case |
Test Condition |
Pass/Fail
|
setPlayehadPosition |
Called every second |
|
stop() |
Called at the end of Ad |
|
loadMetadata() - Content
- Test is to validate Content metadata is the same as original metadata passed during initial loadMetadata call.
Test |
Param |
Example Value |
Accepted Values |
Pass/Fail
|
loadMetadata |
type |
"content" |
"content" |
|
|
assetid |
"unique_id_500291" |
(unique per asset) |
|
|
length |
"600" |
length in seconds (int or float) |
|
|
title |
"Episode Title" |
(any non-empty value) |
|
|
program |
"Show Name" |
(any non-empty value) |
|
|
segB |
"Primetime" |
(any value), used for optional breakdown |
|
|
segC |
"Comedy" |
(any value), used for optional breakdown |
|
|
crossId1 |
"EP018S9S290015" |
Gracenote ID |
|
|
crossId2 |
"ABC" |
Network Name |
|
|
isfullepisode |
"y" |
("y" or "n" ) ("Y" or "N" ) |
|
|
airdate |
"20160206 23:00:00 |
"YYYYMMDD[space]HH:MM:SS" -- note: HH=24 hour time |
|
|
adloadtype |
"1" |
"1" for linear ads, "2" for DAI |
|
|
hasAds |
"1" |
"0" for no ads, "1" for has ads |
|
setPlayheadPosition() - Content
- Track current position of playhead
- Starts at 0 at the beginning of content
- Starts at 0 at the beginning of each ad
- Updated at least once per second
- Separate playhead position for ads and content, should accurately reflect current position in either ads or content
- Final playhead position for content must equal the length specified in loadMetadata(), followed by end() call
Test Case |
Test Condition |
Pass/Fail
|
setPlayehadPosition |
Called every second |
|
stop() |
Called at the end of each asset before transition ie. content to ad, ad to content, ad to ad |
|
stop()
- Indicates one of the following:
- Playback of content or ad was interrupted
- Reached end of ad
end()
- Reached the end of content
Interruptions
- All interruptions to playback of content or ads should trigger a call to stop(). Once the interruption is over, loadMetadata() with the same metadata should be called, followed by playheadPosition resuming from where it left off.
- Interruptions include:
- user-induced pause
- screen turned off
- refresh page
- internet connection lost (n.b. cached playback plays as normal until it expires)
Test Case |
Test Condition |
Pass/Fail
|
user-induced pause |
stop() , loadMetadata() & playheadPosition |
|
screen turned off |
stop() , loadMetadata() & playheadPosition |
|
app sent to background |
stop() , loadMetadata() & playheadPosition |
|
headphones removed |
stop() , loadMetadata() & playheadPosition |
|
alarm/call interruption |
stop() , loadMetadata() & playheadPosition |
|
internet connection lost |
stop() , loadMetadata() & playheadPosition |
|
content paused |
playheadPosition is not passed |
|
resume content |
loadMetadata() is called for content |
|
|
loadMetadataM is the same as original |
|
|
playheadPosition continues from resumed position |
|
Expected SDK behavior for all interruptions:
- interruption triggers stop() call
- when content resumes, loadMetadata() is called with the same metadata that was playing previously (ad or content)
- playheadPosition() resumes from the same position before the interruption
Example session:
- 5 minutes of content played, call interruption, content resumes until end of 15 min video
Scrubbing
Test Case |
Test Condition |
Pass/Fail
|
Scrub Backward |
new playhead position is accurate |
|
|
new playhead continues from new position |
|
Scrub Forward |
new playhead position is accurate |
|
|
new playhead continues from new position |
|
Scrub to end |
final playhead position is passed |
|
|
end event called at completion of content playback |
|
Scrub past midroll |
Playhead for content stops |
|
Midroll & Postroll Ads
Test Case |
Test Condition |
Pass/Fail
|
loadMetadata() |
Called for each Ad |
|
|
Required Metadata is accurate |
|
playheadPosition |
Passed every second |
|
stop() |
called for each ad |
|
loadMetadata() , playheadPosition , stop() |
correct sequence for each ad |
|
Opt-Out
The site must provide a means for the user to opt-out of or opt back into Nielsen measurement. Include the following two items in the site’s Privacy Policy:
- A notice that the player includes proprietary measurement software that allows users to contribute to market research (such as Nielsen TV Ratings)
- A link to the Nielsen Digital Measurement Privacy Policy at http://www.nielsen.com/digitalprivacy
The following paragraph is a template for an opt-out statement
Our properties may feature Nielsen proprietary measurement software, which will allow you to contribute to market research, such as Nielsen TV Ratings. To learn more about the information that Nielsen software may collect and your choices with regard to it, refer to Nielsen Digital Measurement Privacy Policy at http://www.nielsen.com/digitalprivacy.