2015-10-22 19 views
9

tvOS用のビルトインアプリでは、ビデオを見ると、ビデオをスワイプするとそのビデオに関する情報が表示されます。私は開発者がこの同じことをどうやってできるかについての情報は見つけられません。私はそれが可能になるように設計されていると確信している "情報をスワイプダウン"誰かがこれを把握していますか?私はAVPlayerViewControllerを使用しています。ありがとう。tvOS AVPlayerViewControllerビデオ情報

AVMetadataCommonKeyTitle 
AVMetadataCommonKeyDescription 
AVMetadataiTunesMetadataKeyContentRating 
AVMetadataQuickTimeMetadataKeyGenre 

し、それらを追加します。あなたはAVMetadataKeySpaceCommon鍵空間と、次のいずれかのキーを持つAVMutableMetadataItem Sを作成AVPlayerViewControllerに「情報のため下にスワイプ」ペインに表示する「情報」のセクションを取得するために

+0

ログをチェックすると、「情報」ビューでは、下にスワイプした後に表示されている場合は、警告が表示されます:独立したビューコントローラ上の提示ビューコントローラが推奨され、。だから彼らは、分離されたビューコントローラを使用しているようだ! – Sylverb

+0

「スワイプダウン」ペインが表示されるように「情報」セクションが表示されません。 「オーディオ」セクションのみが表示されます。私の 'AVPlayerItem'のそれぞれに対して、' AVMutableMetadataItem'を 'externalMetadata'配列に追加していますが、まだ表示されません。 Appleは「外部メタデータ」のhttps://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVPlayerViewController_Class/で可能と述べています。 https://developer.apple.com/library/prerelease/tvos/documentation/AVFoundation/Reference/AVPlayerItem_Class/index.html#//apple_ref/occ/instp/AVPlayerItem/externalMetadata –

+0

もご覧ください。私の答えを見てください。 –

答えて

16

AVPlayerItemexternalMetadataアレイに転送します。各AVMutableMetadataItemを表示するには、少なくともidentifierextendedLanguageTag、およびvalueのプロパティを設定する必要があります。ここに例があります:

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) 

これは十分に文書化されていません。 This forum postはこれを理解するために重要でした。


@JenelEjercitoMyersのためのObjective-Cの例:

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

ありがとうございます。どこでもこれを行う方法を見つけることができませんでした。共有してくれてありがとう。 –

+0

問題はありません、@ BrianFLeighty。喜んで助けてください。私は同じ質問をしました。 –

+0

「情報のスワイプダウン」ビューに読み込まれた後、「情報」/メタデータがフェードアウトする問題が発生しています。どのようなアイデアがそれを行うだろうか? –

1

ジェフの答えに加えて、これは私がrepetivityを避けるために使用する機能です。

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 

} 

、使用中:

//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

additi上記の回答に、アートワーク、ジャンル、コンテンツの評価をトップシェルフに追加したいと考えました。これは、言及されているものとは少し異なります。 externalMetadata配列に次のように追加できます。

//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

慎重にそれが同期呼び出し –

+0

ありがとう@BrianFLeightyなので、考慮にいることを取られていませんでした。これは、高品質の画像に問題を引き起こす可能性があります。しかし、ほとんどの場合、これらの作品はサイズが小さくなります。しかし、ありがとう。 –

関連する問題