updateOTT

From Engineering Client Portal

Revision as of 04:09, 21 May 2017 by Admin (talk | contribs) (Created page with "{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|iOS SDK API Reference}} {{CurrentBreadcrumb}} Category:Digital Category:iOS SDK API Reference Use <code>updateOTT<...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Engineering Portal breadcrumbArrow.png Digital breadcrumbArrow.png iOS SDK API Reference breadcrumbArrow.png updateOTT
Use updateOTT method to notify App SDK that the remote OTT device (like Google ChromeCast, Roku, Amazon FireTV, etc.) is connected / disconnected (change of OTT status).

  • When OTT device is connected, call updateOTT with "ottStatus": "1" and a set of OTT device related parameters in ottInfo dictionary.
  • When OTT device is disconnected, call updateOTT with "ottStatus": "0" in ottInfo dictionary.

Syntax

 (void)updateOTT:(id)ottInfo;

Input Parameters

Parameter Description
ottInfo A JSON string with the following parameters:

OTT device is connected

NSDictionary *ottInfo = @
{
   @"ottStatus": @"1",
   @"ottType": @"casting",
   @"ottDevice": @"chromecast",
   @"ottDeviceName": @"Google ChromeCast",
   @"ottDeviceID": @"xxxx-xxxx-xxxx",
   @"ottDeviceManufacturer": @"Google",
   @"ottDeviceModel": @"ChromeCast",
   @"ottDeviceVersion": @"1.0.0"
}

OTT device is disconnected

NSDictionary *ottInfo = @
{
    @"ottStatus": @"0"
}

See International Metadata in International (Germany).

Output Parameters

Parameter Description
Void

Notes

  • Every time when application is launched or moving to foreground, call updateOTT to report the current OTT status to the App SDK.
  • App SDK detects AirPlay and AirPlay mirroring automatically and the application need not report them to App SDK.

Communicating with the Chromecast Receiver App

SDK cannot communicate directly with the Receiver App running on the Chromecast as it needs access to the Google Casting framework. Alternatively, App SDK requires the application to pass the data to the Receiver App. The application should

  • Retrieve the Opt-Out status on the device (using optOutStatus) and its Demographic ID (using demographicId)
  • Relay the retrieved details / values to the Receiver App, as additional parameters in GCKMediaMetadata payload.
    • Create the metadata information for this purpose, using GCKMediaMetadata.

The two custom parameters to be included in GCKMediaMetadata are

  • kGCKMetadataNlsKeyDeviceID for device ID.
  • kGCKMetadataNlsKeyOptout for Opt-out status (0 or 1).

Below is a sample code snippet on how the application should retrieve and relay the information from App SDK to Receiver App.

static NSString * const kGCKMetadataNlsKeyDeviceID = @"kGCKMetadataNlsKeyDeviceID";
static NSString * const kGCKMetadataNlsKeyOptout = @"kGCKMetadataNlsKeyOptout";

GCKMediaMetadata *metadata = [[GCKMediaMetadata alloc] init];
NSUInteger channelIndex = [self.appConfig.channels indexOfObject:self.currentChannel] + 1;
[metadata setString:[NSString stringWithFormat:@"Channel %d", channelIndex] forKey:kGCKMetadataKeyTitle];
[metadata setString:self.currentChannel.urlString forKey:kGCKMetadataKeySubtitle];

// custom parameters
[metadata setString:self.nielsenAppApi.demographicId forKey:kGCKMetadataNlsKeyDeviceID];
[metadata setString:(self.nielsenAppApi.optOutStatus ? @"1": @"0") forKey:kGCKMetadataNlsKeyOptout];

[self logConsole:[NSString stringWithFormat:@"Reporting parameters to receiver. %@: %@, %@: %@", kGCKMetadataNlsKeyDeviceID, self.nielsenAppApi.demographicId, kGCKMetadataNlsKeyOptout, (self.nielsenAppApi.optOutStatus ? @"1": @"0")]];

GCKMediaInformation *mediaInformation =
[[GCKMediaInformation alloc] initWithContentID:self.currentChannel.urlString
                                    streamType:GCKMediaStreamTypeUnknown
                                    contentType:@"video/mp4"
                                    metadata:metadata
                                    streamDuration:0
                                    customData:nil];
[self.chromecastControlChannel loadMedia:mediaInformation autoplay:YES playPosition:0];