5

核心视频专家,我正在为 .mov 文件创建自定义视频播放器。我有 .mov 解析器工作并使用我正在尝试播放视频的 QTCoreVideo101 示例。

我遇到的问题是显示链接 getFrameForTime 我不知道如何使用时间值来找到正确的帧。

CVTimeStamp 中包含的值对我来说没有任何意义。下面是为 1 秒视频请求的值的示例。谁能解释我如何使用这些值在 .mov 文件中找到正确的帧?

前三个请求 - CVTimeStamp 的值

  1. 视频时间:489150134353920.000000 主机时间:2026048145326080.000000 视频时间刻度:241500000.000000 速率标量:1.000000 视频刷新周期:4028320.000000

  2. video Time: 489150201462784.000000 hostTime: 2026048279543808.000000 videoTimeScale: 241500000.000000 rateScalar: 0.999985 videoRefreshPeriod: 4028320.000000

  3. video Time: 489156643913728.000000 hostTime: 2026074988871680.000000 videoTimeScale: 241500000.000000 rateScalar: 1.000000 videoRefreshPeriod: 4028320.000000

4

1 回答 1

2

CVTimeStamps 在CVTimeStamp 参考文档中进行了解释。videoTimeScale是一秒被划分的单位数。因此,对于 30 fps 视频,它至少需要为 30(尽管它可以是 30 - 60、120、30000 等的任意倍数)。videoTime是当前帧(或场)开始的时间刻度中的时间。因此,如果您的时基是 30000,并且您在第 15 帧,那么您videoTimeScale将是 30000,您videoTime将是 15000。

您可以通过检查该smpteTime字段并查看它是否符合您的预期来检查您是否正确解释了该值。在上面的示例中,它将是 0 小时、0 分钟、0 秒、15 帧(或 00:00:00:15)。

您是否有理由只使用操作系统的内置视频解码功能?

于 2012-06-28T01:47:09.990 回答