给 AVPlayer 视频添加字幕

3
我正在使用AVPlayerView来显示一些本地视频,这些视频位于我的应用程序包目录中。现在我想添加显示字幕的功能,以增加内容的可访问性。
由于我是程序员、电影制片人以及需要创建字幕的人,我对任何字幕格式和解决方案都持开放态度。我发现了一些常见的格式(.srt.scc),但是,我想知道如何使用AVPlayer“编程方式”处理它们。
我像这样初始化视频:
let myVideoPlayer = AVQueuePlayer(url: URL(fileURLWithPath: "/myPath"))

如果您在QuickTime中播放带字幕的视频,只需将两个文件(字幕和视频)放在同一个目录中即可。我找不到任何提示或解决方案,例如将字幕文件URL添加到AVPlayer中,这是我所期望的。看来这不是正确的方法? 其他主题提到AVPlayer的closedCaptionDisplayEnabledClosed Caption轨道配合使用效果很好。但这再次引出了问题:如何从单独的文件(如.srt、.scc)中使用AVPlayer显示字幕?
3个回答

2

我使用了ixany的建议(为视频文件添加字幕),但是接着我需要使用以下代码来强制AVPlayer显示字幕:

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)
    }
}

请注意不要在模拟器上测试此功能。我只能在真实设备上使用。


0
我最终采用了以下解决方法:从Final Cut Pro X导出我的素材为.m4v格式,使用SRT Edit Pro手动创建字幕,然后使用Subler将它们添加到视频文件中,这样最终只有一个文件。这样,AVPlayer / QuickTime会自动检测到字幕轨道。

-1

这是在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)
    }
}

这已经在此答案中提到过了。当回答那些已经有答案的老问题时,请确保您提供的是一种新颖的解决方案或比现有答案更好的解释。 - Eric Aya
是的,我同意你的看法,但我只是上传这个来确认完美匹配。没有别的 @EricAya - Praveen Bishnoi
抱歉,我有一个问题。可以问你吗? - Praveen Bishnoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接