tvOS и отображение обложки и заголовка, когда AVPlayer «работает вхолостую»?

#swift #tvos

#swift #tvos

Вопрос:

Я пытаюсь понять, как отобразить обложку альбома и название, когда проигрыватель некоторое время не вводил пользовательский ввод, а tvOS отображает его вид проигрывателя? В основном экран с полупрозрачным фоном и общим оформлением. Название приложения отображается там, где я ожидал бы отобразить информацию о песне.

В настоящее время я создал приложение tvOS для воспроизведения аудио и успешно отображаю обложку и заголовок на главном экране, добавив свой собственный ярлык через подпредставление:

    let albumArtView = UIImageView(image: image)
   self.contentOverlayView?.addSubview(albumArtView)
  

Для получения подробной информации на скользящей панели я использую:

     playerItem = AVPlayerItem(url: videoURL!)

    // Add station title

    let titleMetadataItem = AVMutableMetadataItem()
    titleMetadataItem.locale = Locale.current
    titleMetadataItem.key = AVMetadataCommonKeyTitle as (NSCopying amp; NSObjectProtocol)?
    titleMetadataItem.keySpace = AVMetadataKeySpaceCommon
    titleMetadataItem.value = stationName as (NSCopying amp; NSObjectProtocol)?

    playerItem!.externalMetadata.append(titleMetadataItem)

    // Add station description

    let descriptionMetadataItem = AVMutableMetadataItem()
    descriptionMetadataItem.locale = Locale.current
    descriptionMetadataItem.key = AVMetadataCommonKeyDescription as (NSCopying amp; NSObjectProtocol)?
    descriptionMetadataItem.keySpace = AVMetadataKeySpaceCommon
    descriptionMetadataItem.value = stationDescription as (NSCopying amp; NSObjectProtocol)?

    playerItem!.externalMetadata.append(descriptionMetadataItem)

    // Add station artwork

    let image = UIImage(named: "stationAlbumArt")
    let artworkMetadataItem = AVMutableMetadataItem()
    artworkMetadataItem.locale = Locale.current
    artworkMetadataItem.identifier = AVMetadataCommonIdentifierArtwork
    artworkMetadataItem.value = UIImagePNGRepresentation(image!) as (NSCopying amp; NSObjectProtocol)?
    playerItem!.externalMetadata.append(artworkMetadataItem)
  

Похоже, это не влияет на общий экран. Я вижу, что музыкальный проигрыватель Apple отображает название обложки трека и название альбома, поэтому мне интересно, является ли playerItem!.externalMetadata правильным атрибутом для использования для этого?

Ответ №1:

Еще немного исследований, и кажется, что мне нужно использовать ‘MPNowPlayingInfoCenter‘:

 let title = "track title"
let artist = "artist name"
let artwork = MPMediaItemArtwork(image: UIImage(named: "stationAlbumArt")!)
let nowPlayingInfo = [MPMediaItemPropertyArtist : artist,  MPMediaItemPropertyTitle : title, MPMediaItemPropertyArtwork : artwork] as [String : Any]
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
UIApplication.shared.beginReceivingRemoteControlEvents()