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
Antwort
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;
Danke. Ich konnte nirgends finden, wie ich das machen sollte. Danke für das Teilen. –
Kein Problem, @BrianFLeighty. Froh, dass ich Helfen kann. Ich hatte dieselbe Frage. –
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? –
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)))
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];
Vorsichtig mit DataWithContentsOfURL seit das ist ein synchroner Aufruf –
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. –
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
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 –
Ich habe es herausgefunden. Siehe meine Antwort. –