2017-01-09 41 views
0

我試圖在AVPlayerController下拉菜單上顯示信息。我完全遵循他們在WWDC中展示的內容,向playerItem添加元數據。除了藝術作品圖像,一切都顯示出來。奇怪的是,它似乎將圖像添加到信息視圖,但隱藏它。有一個空間應該是圖像,但沒有顯示。它確實顯示在電視遠程應用程序,所以我知道我正確地添加它。這裏是我的代碼:AVPlayer元數據藝術作品不顯示在tvOS

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

+0

直接在這行之前添加一條print語句:'allItems.append(artworkItem)'並查看它是否被觸發。 – Coder256

+0

@ Coder256正在觸發。 – CodyMace

+0

您是否嘗試過使用[JPEG而不是PNG](http://stackoverflow.com/a/25664369/3398839)?改變'value'和'dataType'使用JPEG,看看是否修復它。 – Coder256

回答

0

所以,事實證明,如果AVMetadataCommonIdentifierDescription產品零或空字符串,圖像獲取:

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的方法隱。如果沒有要顯示的文本,我所需要做的只是將描述設置爲「」。我要在這個文件上提交一個bug,因爲這顯然不正常。