Переключение субтитров hls на tvOS / swift

Я использую AVplayer of swift для своего tvOSApp.

Когда я использую проигрыватель по умолчанию, субтитры видео будут отображаться на панели «субтитры» вверху, и можно легко переключать субтитры. Итак, как я могу переключать субтитры таким образом, не используя элементы управления воспроизведением по умолчанию?

У меня есть кнопки для переключения субтитров на экране, и я хотел бы переключать их во время целевого метода.

Вот мой код для AVPlayer.

let asset = AVAsset(url: URL(string: videoUrl)!)
let playerItem = AVPlayerItem(asset: asset)        
let player = AVPlayer(playerItem: playerItem)
player.play()

self.bgMovieLayer = AVPlayerLayer(player: player)
self.bgMovieLayer.frame = view.bounds
self.bgMovieLayer.videoGravity = .resizeAspectFill
self.bgMovieLayer.zPosition = -1
self.view.layer.insertSublayer(self.bgMovieLayer, at: 0)

Я использую видео ниже для теста. http://184.72.239.149/vod/smil:BigBuckBunny.smil/playlist.m3u8

Я прочитал документы относительно AVPlayer / AVPlayerItem и не получил ответа. Буду признателен, если кто-то может помочь в этом.


person datenshidon    schedule 09.10.2018    source источник
comment
Загляните в AVMediaCharacteristic.legible.   -  person Daniel Storm    schedule 14.10.2018


Ответы (1)


Вы должны сначала загрузить availableMediaCharacteristics, а после искать AVMediaCharacteristic.legible. Что-то вроде этого:

let asset:AVAsset
let key = #keyPath(AVAsset.availableMediaCharacteristicsWithMediaSelectionOptions)
 asset.loadValuesAsynchronously(forKeys: [key]) {
  var error: NSError? = nil
  let status = asset.statusOfValue(forKey: key, error: &error)
  switch status {
  case .loaded:
  // Sucessfully loaded, continue processing
  case .failed:
  // Examine NSError pointer to determine failure
  case .cancelled:
  // Loading cancelled
  default:
    // Handle all other cases
  }
}
let subtitlesGroup = asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.legible)
person Vladimir Horky    schedule 26.10.2018