Bri*_*hty 10 avplayerviewcontroller tvos
在tvOS的内置应用程序中,当您观看视频时,它会在您向下滑动时显示有关该视频的信息.我找不到任何关于开发人员如何做同样事情的信息.我敢肯定它的设计是可行的,因为它说"向下滑动信息"有没有人想到这一点?我正在使用AVPlayerViewController.谢谢.
Jef*_*wen 17
要在"向下滑动信息"窗格中显示"信息"部分,AVPlayerViewController请AVMutableMetadataItem使用AVMetadataKeySpaceCommon键空间和以下任意键创建s :
AVMetadataCommonKeyTitle
AVMetadataCommonKeyDescription
AVMetadataiTunesMetadataKeyContentRating
AVMetadataQuickTimeMetadataKeyGenre
Run Code Online (Sandbox Code Playgroud)
并将它们添加到AVPlayerItem的externalMetadata数组.为了让每一个AVMutableMetadataItem显示出来,您必须至少设置identifier,extendedLanguageTag和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)
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)
如果您需要在播放器菜单中有更多选项,最好创建一个UIViewController带有自定义信息和设置选项[根据您的要求]并将其设置为AVPlayerViewControllers customInfoViewController。
tvOS 11.0+ 提供此功能
关于此的官方苹果文档:Apple Docs Link
除了杰夫的回答之外,这是我用来避免重复的函数:
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)
| 归档时间: |
|
| 查看次数: |
3025 次 |
| 最近记录: |