AVPlayer元数据图稿未在tvOS

时间:2017-01-09 22:02:46

标签: ios swift avplayer tvos apple-tv

我正在尝试在AVPlayerController下拉菜单上显示Info。我正在关注他们在WWDC中展示的内容,向playerItem添加元数据。除了艺术品图像外,一切都显示正常。奇怪的是它似乎将图像添加到信息视图中,但随后隐藏了它。图像应该是一个空间,但没有任何显示。它确实出现在电视远程应用程序上,所以我知道我正确添加它。这是我的代码:

let playerItem: AVPlayerItem = AVPlayerItem(asset: avasset)
var allItems: [AVMetadataItem] = []
allItems.append(self.metadataItem(identifier: AVMetadataCommonIdentifierTitle, value: asset.title as (NSCopying & NSObjectProtocol)?)!)
if let desc = asset.desc {
    allItems.append(self.metadataItem(identifier: AVMetadataCommonIdentifierDescription, value: desc as (NSCopying & NSObjectProtocol)?)!)
}
if let image = self.thumbImage, let artworkItem = self.metadataArtworkItem(image: image) {
    allItems.append(artworkItem)
}
playerItem.externalMetadata = allItems
self.setupPlayerItem(playerItem)

用于创建metadataItem的方法:

func metadataItem(identifier: String, value: (NSCopying & NSObjectProtocol)?) -> AVMetadataItem? {
    if let actualValue = value {
        let item = AVMutableMetadataItem()
        item.value = actualValue
        item.identifier = identifier
        item.extendedLanguageTag = "und"
        return item.copy() as? AVMetadataItem
    }
    return nil
}

func metadataArtworkItem(image: UIImage) -> AVMetadataItem? {
    let item = AVMutableMetadataItem()
    item.value = UIImagePNGRepresentation(image) as (NSCopying & NSObjectProtocol)?
    item.dataType = kCMMetadataBaseDataType_PNG as String
    item.identifier = AVMetadataCommonIdentifierArtwork
    item.extendedLanguageTag = "und"
    return item.copy() as? AVMetadataItem
}

enter image description here

2 个答案:

答案 0 :(得分:2)

事实证明,如果AVMetadataCommonIdentifierDescription项为nil或空字符串,则图像将被隐藏。我需要做的就是修复它,然后将描述设置为" "如果没有要显示的文字。我将在此处提交一个关于苹果的错误,因为这显然不正常。

答案 1 :(得分:0)

不确定几年前围绕此问题发生了什么,但是现在的问题是,如果您不将图像转换为将不会显示的pngData。换句话说,仅向美工项目发送UIImage是行不通的。因此每个Apple都必须像这样:

if let showImage = image, let pngData = showImage.pngData() {
                let imageItem = self.makeMetadataItem(AVMetadataIdentifier.commonIdentifierArtwork.rawValue, value: pngData)
                metadata.append(imageItem)
            }