我正在使用 AVPlayerView
从我的应用程序捆绑包目录中显示一些本地视频。现在,我想添加显示字幕的能力,以增加内容的可访问性。
由于我是程序员,电影制片人以及必须创建字幕的人,所以我对任何字幕格式都开放&解决方案。我发现了一些常见格式(.srt
,.scc
),但是,我想知道如何使用AVPlayer
"以编程方式"使用它们。
我初始化视频,例如:
let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))
例如,如果您在QuickTime中播放字幕视频,则足以在同一目录中将两个文件(字幕&视频)放在同一目录中。我找不到任何提示或解决方案,例如在AVPlayer
中添加字幕文件 - 我期望的。看来这不是正确的方法?
其他线程提到的是,Avplayers closedCaptionDisplayEnabled
与Closed Caption
轨道效果很好。但是,这再次使我提出了一个问题:如何通过单独的文件显示Avplayer的字幕(例如.srt,.scc)?
我使用 ixany 的建议(在视频文件中添加字幕),但是后来我不得不强制使用此代码显示字幕:
:let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
let locale = Locale(identifier: "en-EN")
let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
if let option = options.first {
playerItem.select(option, in: group)
}
}
并提防在模拟器中对此进行测试。对我来说,这仅在真实设备上起作用。
我最终得到了以下解决方法:将我的材料从 Final Cut Pro X
as .m4v导出,用 SRT Edit Pro
手动创建字幕,然后用 Subler
将它们添加到视频中,所以我只有一个文件中的一个文件结束。这样的方式Avplayer/QuickTime自动检测字幕 - 轨道。
这是在Avplayer中添加关闭标题的完美答案。需要将此代码粘贴到您的代码中。谢谢
let playerItem = AVPlayerItem(asset: asset)
if let group = playerItem.asset.mediaSelectionGroup(forMediaCharacteristic: .legible) {
let locale = Locale(identifier: "en")
let options = AVMediaSelectionGroup.mediaSelectionOptions(from: group.options, with: locale)
if let option = options.first {
playerItem.select(option, in: group)
}
}