在tvOS / swift上切换hls的字幕

时间:2018-10-09 03:31:57

标签: swift tvos hls webvtt

我正在为我的tvOSApp使用swift的AVplayer。

当我使用默认播放器时,视频的字幕将显示在顶部的“字幕”栏上,并且可以轻松切换字幕。 那么,如何在不使用默认播放控件的情况下切换字幕呢?

我在屏幕上有用于切换字幕的按钮,我想在切换目标字幕的过程中进行切换。

这是我的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的文档,但没有答案。如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您必须先加载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)