swift - 在 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 的文档,但没有得到任何答复。如果有人可以提供帮助,我将不胜感激。
解决方案
您必须先加载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)
推荐阅读
- linux-kernel - os 杀死了 apache ignite 进程并且没有留下任何理由
- javascript - 如何通过反应 redux 中的唯一字符串切换状态?
- excel - 当它等于外循环迭代时如何跳过内循环迭代?
- c - scanf中的'$%f'和'%f'有什么区别?
- jetty - 将 Jetty 配置为对 jetty.base 之外的目录进行控制台捕获和请求日志?
- python - 我应该对此代码进行哪些更改才能更快地运行它?
- python - 使用 python 制作计时器时出错( int() 以 10 为底的无效文字)
- mysql - 选择完整字符串时按子字符串分组
- python - 重新排列 pandas groupBy 输出,使第二个 groupBy 标签作为标题位于顶部
- python - Python scrapy 错误“未定义回调”