5

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

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

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

4

1 回答 1

1

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

  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

于 2019-11-12T02:15:27.867 回答