Ios AVPlayer元数据艺术品未在tvOS上显示

Ios AVPlayer元数据艺术品未在tvOS上显示,ios,swift,avplayer,tvos,apple-tv,Ios,Swift,Avplayer,Tvos,Apple Tv,我试图在AVPlayerController下拉列表中显示信息。我完全遵循他们在WWDC中显示的内容,向playerItem添加元数据。一切都很好,除了艺术品图像。奇怪的是,它似乎将图像添加到信息视图中,但随后将其隐藏。有一个空间的图像应该是,但没有显示。但它确实会显示在电视遥控器应用程序上,所以我知道我添加的是正确的。这是我的密码: let playerItem: AVPlayerItem = AVPlayerItem(asset: avasset) var allItems: [AVMeta

我试图在AVPlayerController下拉列表中显示信息。我完全遵循他们在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
}

因此,如果
AVMetadataCommonIdentifierDescription
项为nil或空字符串,图像就会隐藏。我所要做的就是将描述设置为“”,如果没有文本显示。我将就此向苹果公司提出一个错误,因为这显然不正常。

不确定几年前围绕这个问题发生了什么,但现在的问题是如果你不将图像转换为
pngData
,图像将不会显示。换句话说,仅仅发送一个UIImage的艺术品项目是不起作用的。所以每个苹果都需要这样:

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

在这一行前面直接添加一条打印语句:
allItems.append(artworkItem)
并查看它是否被触发。@code正在触发它。您尝试过使用吗?将
数据类型
都更改为使用JPEG,然后查看是否修复了它。