首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer元数据艺术品不显示在tvOS上

AVPlayer元数据艺术品不显示在tvOS上
EN

Stack Overflow用户
提问于 2017-01-09 22:02:46
回答 2查看 1.3K关注 0票数 1

我试图在AVPlayerController下拉列表中显示信息。我正在跟踪它们在WWDC中显示的内容,将元数据添加到playerItem中。一切都很好,除了艺术品的形象。奇怪的是,它似乎将图像添加到信息视图中,但随后隐藏了它。有一个空间,图像应该是,但什么都没有显示。不过,它确实出现在电视远程应用程序上,所以我知道我添加的内容是正确的。这是我的密码:

代码语言:javascript
复制
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的方法:

代码语言:javascript
复制
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
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-24 19:56:39

因此,如果AVMetadataCommonIdentifierDescription项为零或空字符串,则图像将被隐藏。如果没有文本显示,我所要做的就是将描述设置为“”。我要用苹果写一个bug,因为这显然是不正常的。

票数 2
EN

Stack Overflow用户

发布于 2019-12-16 01:26:31

不知道几年前围绕这个问题发生了什么,但是现在的问题是如果你不把你的图像转换成pngData,图像就不会显示出来。换句话说,仅仅发送艺术品项目UIImage是行不通的。所以每个苹果公司都需要这样做:

代码语言:javascript
复制
if let showImage = image, let pngData = showImage.pngData() {
                let imageItem = self.makeMetadataItem(AVMetadataIdentifier.commonIdentifierArtwork.rawValue, value: pngData)
                metadata.append(imageItem)
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41557731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档