2

所以我整理了一个示例项目https://github.com/liuxuan30/TestH264.git,它使用 VideoToolBox 有一个 H264 示例解码器来显示从相机捕获的流文件。

使用VideoToolBox的H264解码器是从网上复制的,不是我写的,当我尝试播放我的h264流文件时,它播放速度太快,与ffmpeg或ffplay相比,两者都以正常速度播放。

我想问,如何解决这种行为?谢谢。

4

1 回答 1

1

这是因为这个常数kCMSampleAttachmentKey_DisplayImmediately

如果此键存在,则应尽快显示样本,而不是
根据其呈现时间戳。在运行时使用此附件
从显示管道(例如 AVSampleBufferDisplayLayer 类)请求此行为。
此附件不会写入媒体文件。 来自 Apple 文档

因此,您有两种显示方式:

  1. 立即显示 - 当您需要尽快显示帧时,这可能对实时流有好处

  2. 以特定时间戳显示帧

*与 ffmpeg 或 ffplay 相比,两者均以正常速度播放。

ffplay 和 ffmpeg 在这一点上可能使用时间戳。

我从您的测试 H.264 文件中得到与您相同的结果,但这是因为您一次获得所有解码帧,因此解码器立即显示它。

您可以观看此视频以获取有关VideoToolbox框架的更多信息: 直接访问视频编码和解码

于 2020-07-28T07:30:39.820 回答