首页 > 解决方案 > 在 tvOS/swift 上切换 hls 的字幕

问题描述

我正在为我的 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 的文档,但没有得到任何答复。如果有人可以提供帮助,我将不胜感激。

标签: swifttvoshttp-live-streamingwebvtt

解决方案


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

推荐阅读