將計時的中繼資料物件傳送至時儲存

您的應用程式必須在適當的時間使用適當的PTTimedMetadata物件。

在內容剖析期間(在播放之前),TVSDK會識別已訂閱的標籤,並通知您的應用程式這些標籤。 與每個PTTimedMetadata相關聯的時間是播放時間軸上的絕對時間。

您的應用程式必須完成下列工作:

  1. 追蹤目前的播放時間。

  2. 將當前播放時間與已調度的PTTimedMetadata對象匹配。

  3. 使用PTTimedMetadata,其中開始時間等於目前播放時間。

    注意

    下面的代碼假定一次只有一個PTTimedMetadata實例。 如果有多個例項,應用程式必須將它們正確儲存在字典中。 一種方法是在給定時間建立陣列,並將所有實例儲存在該陣列中。

    以下示例說明如何按每個timedMetadata的開始時間將PTTimedMetadata對象保存在NSMutableDictionary (timedMetadataCollection)鍵中。

    NSMutableDictionary *timedMetadataCollection; 
    
    - (void)onMediaPlayerSubscribedTagIdentified:(NSNotification *)notification 
    { 
        if (!timedMetadataCollection) 
        { 
            timedMetadataCollection = [[NSMutableDictionary alloc] init]; 
        } 
        NSDictionary *userInfo = [notification userInfo]; 
        PTTimedMetadata *timedMetadata = [(PTTimedMetadata *)[userInfo objectForKey:PTTimedMetadataKey] retain]; 
        if ([timedMetadata.name  isEqualToString: @"#EXT-OATCLS-SCTE35"]) 
        { 
             NSLog(@"Adding timedMetadata %@ to timedMetadataCollection with time                      
                     %f",timedMetadata.name,CMTimeGetSeconds(timedMetadata.time)); 
    
            NSNumber *timedMetadataStartTime = [NSNumber numberWithInt:(int)CMTimeGetSeconds(timedMetadata.time)]; 
            [timedMetadataCollection setObject:timedMetadata forKey:timedMetadataStartTime]; 
        } 
        [timedMetadata release]; 
    }
    

剖析Nielsen ID3標籤

若要擷取ID3標籤以進行剖析,請在onMediaPlayerSubscribedTagIdentified方法上使用下列:

(void)onMediaPlayerSubscribedTagIdentified:(NSNotification *)notification 
{ 
NSDictionary *userInfo = [notification userInfo]; 
PTTimedMetadata *timedMetadata = (PTTimedMetadata *)[userInfo objectForKey:PTTimedMetadataKey]; 
if (timedMetadata.type == PTTimedMetadataTypeID3) 
Unknown macro: { PTMetadata *metadata = (PTMetadata *)timedMetadata; NSString * nstr = [[NSString alloc] initWithFormat} 
 
}

剖析ID3標籤後,請使用下列方式擷取Nielsen特定中繼資料:

    (NSString *)parseNielsenUrlFromID3Tag:(NSString *)str 
    { 
    /* ID3 tag <AVMetadataItem: 0x15e58e60, identifier=id3/PRIV, keySpace=org.id3, key class = __NSCFString, key=PRIV, commonKey=(null), extendedLanguageTag=(null), dataType=(null), time= {110265598/4410000 = 25.004} 
 
    , duration= 
    {INVALID} 
 
    , startDate=(null), extras= 
    { info = "www.nielsen.com/X100zdCIGeIlgZnkYj6UvQ==/pI-X5FFk07770SXf2ZbI6g==/CE0C6​1TsDo0jIrNn9N2yTPe6nVG3dHZHfgS52fJeQjf9fJCga9tj4OW4NXPZ9fI1mx0gfYUPBXnjqolHemZPtn_FCoNg​8Dqw8-Auruf15fU04pJfXTTN0IgZ4iWBmeRiPpS9X100zdCIGeIlgZnkYj6UvVjmPIdY5jyRQTA=/00000/21778/00"; } 
 
    , value length=1> 
    */ 
 
NSString *nielsenStr = nil; 
for (NSString *keyValuePairString in [str componentsSeparatedByString:@", "]) 
{ 
if([keyValuePairString rangeOfString:@"nielsen.com"].location != NSNotFound) 
{ // Nielsen NSRange start = [keyValuePairString rangeOfString:@"\""]; NSRange end = [keyValuePairString rangeOfString:@"\";"]; nielsenStr = [keyValuePairString substringWithRange:NSMakeRange(start.location + 1, end.location-start.location)]; } 
 
} 
return nielsenStr; 
}

本頁內容