tvOS AVPlayerViewController视频信息

Bri*_*hty 10 avplayerviewcontroller tvos

在tvOS的内置应用程序中,当您观看视频时,它会在您向下滑动时显示有关该视频的信息.我找不到任何关于开发人员如何做同样事情的信息.我敢肯定它的设计是可行的,因为它说"向下滑动信息"有没有人想到这一点?我正在使用AVPlayerViewController.谢谢.

Jef*_*wen 17

要在"向下滑动信息"窗格中显示"信息"部分,AVPlayerViewControllerAVMutableMetadataItem使用AVMetadataKeySpaceCommon键空间和以下任意键创建s :

AVMetadataCommonKeyTitle
AVMetadataCommonKeyDescription
AVMetadataiTunesMetadataKeyContentRating
AVMetadataQuickTimeMetadataKeyGenre
Run Code Online (Sandbox Code Playgroud)

并将它们添加到AVPlayerItemexternalMetadata数组.为了让每一个AVMutableMetadataItem显示出来,您必须至少设置identifier,extendedLanguageTagvalue性能.这是一个例子:

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)
Run Code Online (Sandbox Code Playgroud)

这没有详细记录.这个论坛帖子对于解决这个问题至关重要.


@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;
Run Code Online (Sandbox Code Playgroud)


abh*_*ran 6

如果您需要在播放器菜单中有更多选项,最好创建一个UIViewController带有自定义信息和设置选项[根据您的要求]并将其设置为AVPlayerViewControllers customInfoViewController

tvOS 11.0+ 提供此功能

在此输入图像描述

关于此的官方苹果文档:Apple Docs Link


kem*_*ica 5

除了杰夫的回答之外,这是我用来避免重复的函数:

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
    
}
Run Code Online (Sandbox Code Playgroud)

并在使用中:

    //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)))
Run Code Online (Sandbox Code Playgroud)