2015-10-22 5 views
9

In den integrierten Apps für tvOS, wenn Sie ein Video ansehen, werden Informationen zu diesem Video angezeigt, wenn Sie nach unten wischen. Ich kann keine Informationen darüber finden, wie ein Entwickler das gleiche tun kann. Ich bin mir sicher, dass es möglich ist, wie es heißt "wischen für Informationen" Hat jemand das herausgefunden? Ich verwende AVPlayerViewController. Vielen Dank.tvOS AVPlayerViewController Video Info

+0

Wenn Sie die Protokolle überprüfen, wenn die „Info“ -Ansicht, nachdem Sie nach unten wischen, wird erscheinen, wird eine Warnung angezeigt: Presenting Ansicht-Controller auf getrennte Ansicht Controller abgeraten . Es scheint also, dass sie einen getrennten View-Controller verwenden! – Sylverb

+0

Ich kann nicht den "Info" Abschnitt dieses "wischen" Fenster erscheinen zu sehen. Es zeigt nur den Abschnitt "Audio". Für jedes meiner 'AVPlayerItem's hänge ich' AVMutableMetadataItem' an das 'externalMetadata' Array an, aber es erscheint immer noch nicht. Apple sagt, dass es hier möglich ist: https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayerViewController_Class/ unter "Externe Metadaten". Siehe auch https://developer.apple.com/library/prerelease/tvos/documentation/AVFoundation/Reference/AVPlayerItem_Class/index.html#//apple_ref/occ/instp/AVPlayerItem/externalMetadata –

+0

Ich habe es herausgefunden. Siehe meine Antwort. –

Antwort

16

Um die „Info“ Abschnitt zu erhalten in AVPlayerViewController in der „Swipe nach unten für Info“ klicken, zeigen sich erstellen Sie AVMutableMetadataItem s mit dem AVMetadataKeySpaceCommon Schlüsselraum und jede der folgenden Tasten:

AVMetadataCommonKeyTitle 
AVMetadataCommonKeyDescription 
AVMetadataiTunesMetadataKeyContentRating 
AVMetadataQuickTimeMetadataKeyGenre 

und fügen Sie zum AVPlayerItem 's externalMetadata Array. Damit jede AVMutableMetadataItem angezeigt wird, müssen mindestens die Eigenschaften identifier, extendedLanguageTag und value festgelegt werden. Hier ein Beispiel:

let mediaItem = AVPlayerItem(URL: mediaURL) 

let titleMetadataItem = AVMutableMetadataItem() 
titleMetadataItem.locale = NSLocale.currentLocale() 
titleMetadataItem.key = AVMetadataCommonKeyTitle 
titleMetadataItem.keySpace = AVMetadataKeySpaceCommon 
titleMetadataItem.value = "The Title" 

let descriptionMetadataItem = AVMutableMetadataItem() 
descriptionMetadataItem.locale = NSLocale.currentLocale() 
descriptionMetadataItem.key = AVMetadataCommonKeyDescription 
descriptionMetadataItem.keySpace = AVMetadataKeySpaceCommon 
descriptionMetadataItem.value = "This is the description" 

mediaItem.externalMetadata.append(titleMetadataItem) 
mediaItem.externalMetadata.append(descriptionMetadataItem) 

Dies ist nicht gut dokumentiert. This forum post war entscheidend, um dies herauszufinden.


Objective-C Beispiel für @JenelEjercitoMyers:

AVPlayerItem *mediaItem = [[AVPlayerItem alloc] initWithURL:mediaURL]; 

AVMutableMetadataItem *titleMetadataItem = [[AVMutableMetadataItem alloc] init]; 
titleMetadataItem.locale = NSLocale.currentLocale; 
titleMetadataItem.key = AVMetadataCommonKeyTitle; 
titleMetadataItem.keySpace = AVMetadataKeySpaceCommon; 
titleMetadataItem.value = @"The Title"; 

NSArray *externalMetadata = [[NSArray alloc] initWithObjects:titleMetadataItem, nil]; 

mediaItem.externalMetadata = externalMetadata; 
+0

Danke. Ich konnte nirgends finden, wie ich das machen sollte. Danke für das Teilen. –

+0

Kein Problem, @BrianFLeighty. Froh, dass ich Helfen kann. Ich hatte dieselbe Frage. –

+0

Ich habe ein Problem, bei dem die "info"/Metadaten ausgeblendet werden, nachdem sie in der Ansicht "Nach Informationen wischen" geladen wurden. Irgendeine Idee, was würde das tun? –

1

Neben Jeffs Antwort, das ist die Funktion, die ich verwende repetivity zu vermeiden:

private func setupMetadata(data: String, key: (NSCopying & NSObjectProtocol))->AVMutableMetadataItem{ 

    let metadataItem = AVMutableMetadataItem() 
    metadataItem.locale = NSLocale.current 
    metadataItem.key = key 
    metadataItem.keySpace = AVMetadataKeySpaceCommon 
    metadataItem.value = data as (NSCopying & NSObjectProtocol)? 

    return metadataItem 

} 

und im Einsatz:

//in AVPlayerViewControler 
    //Suppose you have an already initialized avPlayerItem 
    avPlayerItem.externalMetadata.append(self.setupMetadata(data: "title of video", key: AVMetadataCommonKeyTitle as (NSCopying & NSObjectProtocol))) 
    avPlayerItem.externalMetadata.append(self.setupMetadata(data: "RugDealer", key: AVMetadataCommonKeyAuthor as (NSCopying & NSObjectProtocol))) 
    avPlayerItem.externalMetadata.append(self.setupMetadata(data: "Description of the video", key: AVMetadataCommonKeyDescription as (NSCopying & NSObjectProtocol))) 
1

Zusätzlich zu den oben genannten Antworten, wollte ich auch Artwork, Genres und Inhaltsbewertung zum oberen Regal hinzufügen. Dies ist etwas anders als das, was ich erwähnt habe. Sie können dem Array externalMetadata wie folgt hinzugefügt werden.

//Sets the content rating on the top shelf 
AVMutableMetadataItem *ratingInfo = [[AVMutableMetadataItem alloc] init]; 
ratingInfo.key = AVMetadataiTunesMetadataKeyContentRating; 
ratingInfo.keySpace = AVMetadataKeySpaceiTunes; 
ratingInfo.locale = [NSLocale currentLocale]; 
ratingInfo.value = @"PG-13"; //Rating of the video 
ratingInfo.extendedLanguageTag = @"und"; 
[externalMetadata addObject:ratingInfo]; 

//Sets the thumbnail on the shelf 
AVMutableMetadataItem *artwork1 = [[AVMutableMetadataItem alloc] init]; 
artwork1.key = AVMetadataCommonKeyArtwork; 
artwork1.keySpace = AVMetadataKeySpaceCommon; 
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:artworkAddress]]; 
artwork1.value = imageData; 
artwork1.locale = [NSLocale currentLocale]; 
[externalMetadata addObject:artwork1]; 

//Sets the Genre on the shelf 
AVMutableMetadataItem *genresInfo = [[AVMutableMetadataItem alloc] init]; 
genresInfo.key = AVMetadataQuickTimeMetadataKeyGenre; 
genresInfo.keySpace = AVMetadataKeySpaceQuickTimeMetadata; 
genresInfo.locale = [NSLocale currentLocale]; 
genresInfo.value = @"Drama, Medical"; 
[externalMetadata addObject:genresInfo]; 
+0

Vorsichtig mit DataWithContentsOfURL seit das ist ein synchroner Aufruf –

+0

Dank @BrianFLeighty, hatte dies nicht berücksichtigt. Dies kann zu Problemen bei Bildern mit hoher Qualität führen. Aber wahrscheinlich sind diese Kunstwerke kleiner. Trotzdem danke. –

Verwandte Themen