如何从AVPlayer中提取closedcaptions / subtitle

时间:2016-05-24 22:23:43

标签: ios avplayer avplayeritem closed-captions

由于AVPlayer呈现的隐藏字幕有时会与其他UI组件重叠,我想在单独的视图中呈现cc。

我可以通过将closedCaptionDisplayEnabled设置为NO来关闭AVPlayer的cc渲染,但我找不到提取我想要渲染的隐藏字幕的方法。

有人知道是否有办法从AVPlayer / AVPlayerItem中提取CC字符串?我能用AVMediaTypeClosedCaption识别AVAssetTrack,但我不知道如何在特定时间内提取字符串。

1 个答案:

答案 0 :(得分:0)

“提取”字幕字符串的关键步骤是

  1. 创建输出:let captionOutput = AVPlayerItemLegibleOutput()
  2. 将自己设置为代表:captionOutput.setDelegate(self, queue: DispatchQueue.main)
  3. 流准备就绪后,添加输出:player.currentItem?.add(captionOutput)
  4. 创建委托扩展以获取标题更改:
extension ViewController: AVPlayerItemLegibleOutputPushDelegate {
    func legibleOutput(_ output: AVPlayerItemLegibleOutput,
                       didOutputAttributedStrings strings: [NSAttributedString],
                       nativeSampleBuffers nativeSamples: [Any],
                       forItemTime itemTime: CMTime) {
        // Your attributed caption strings get delivered here!
    }
}
  1. (可选)在播放器上添加强制字幕:captionOutput.suppressesPlayerRendering = true

我在这里创建了一个示例项目:https://github.com/balnaves/AVPlayerItemLegibleOutputTest