1

我需要对出现在屏幕上的本地(或远程)视频文件的字幕进行一些文本处理。目前我正在使用AVPlayerItem并查看它的资产,我可以看到有一个隐藏字幕轨道,但我无法获得实际的字幕文本。所以问题是我怎样才能得到字幕轨道的实际文本,当它们显示时(最好是快速的)。

4

1 回答 1

2

http://www.slideshare.net/invalidname/stupid-videotricksdc2014上的演示文稿应该为您提供所需的一切(请参阅评论中的示例代码链接),因为 AVSubtitleReader 示例完全符合您的要求。

一旦看到有文本轨道(隐藏式字幕、字幕等),您需要获取该轨道,使用 AVAssetReader 打开它,然后开始读取样本缓冲区。每个都有一个演示时间戳和持续时间,然后是一个 CMBlockBuffer。该缓冲区的内容取决于您正在阅读的曲目类型,这些内容在 QuickTime 文件格式文档中定义。对于文本,它只是一个 Pascal 字符串:一个大端 UInt16,它告诉您文本有多长,然后是文本本身。当然,所需的字节序翻转和数据复制在 C 中比在 Swift 中更自然,但它肯定是可行的。或者,只需将此部分保留在其自己的 C 或 Obj-C 文件中,然后从 Swift 中调用它。

于 2016-01-07T14:17:59.633 回答