objective-c - 在 OS X 上使用 AVFoundation AVPlayer 显示字幕

标签 objective-c macos cocoa avfoundation

我试图在 OS X 上使用 AVFoundation 播放视频时显示字幕。

我查看了文档,但找不到启用字幕轨道的方法。 API 包含对字幕轨道的多个引用,这让我相信它是受支持的。

在 iOS 上,方法 -[AVPlayerItem selectMediaOption:inMediaSelectionGroup:] 用于启用字幕轨道。此方法在 10.7 SDK 中不可用。还有其他显示字幕的方法吗?

编辑: Quicktime Player X 支持字幕,例如在打开 this movie 时字幕子菜单似乎提供了语言选择,并会在选择英语时显示。这让我相信它们包含在 API 中......

最佳答案

我自己也遇到了同样的问题。不幸的是,我发现除了切换到 QTKit 之外,唯一的方法是制作一个单独的字幕层(CATextLayer)并将其适本地定位为播放器层的子层。这个想法是,您设置一个周期性时间观察器以每秒左右触发一次并更新字幕,以及(这是可选的)您可能拥有的一些 UI 元素,用于显示视频中耗时。

我创建了一个基本的 SubRip (.srt) 文件解析器类;你可以在这里找到它:https://github.com/sstigler/SubRip-for-Mac .请务必查看 wiki 上的文档。该类根据 BSD 许可条款提供。

您可能会遇到的另一个挑战是如何动态调整 CATextLayer 的高度以适应不同长度的字幕和不同宽度的包含 View (如果您选择使其用户可调整大小)。我找到了一个很棒的 CALayoutManager 子类来执行此操作,并对它进行了一些修改,以便让它为我正在尝试做的事情工作:https://github.com/sstigler/height-for-width .

希望对您有所帮助。

关于objective-c - 在 OS X 上使用 AVFoundation AVPlayer 显示字幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312118/

相关文章:

macos - 创建一个具有类似 Xcode 界面的程序

objective-c - 从 iOS 到 OS X - 我的代码应该放在哪里?

swift - 如何在 macOS 中进入真正的全屏模式?

iphone - 如何设置 View 的背景图像?

objective-c - 使用自动布局固定窗口宽度

python - NUMPY 操作 : Memory Efficiency: PYTHON

objective-c - 与 CGDisplayMoveCursorToPoint 相反

xcode - 在 Mac 应用程序中实现深色主题窗口

ios - 使用 UISegmentedControl 在 View 之间切换

iphone - 如何获取一个月内的所有星期日