【问题标题】:Core video - displaylink I need help interpreting CVTimeStamp核心视频 - displaylink 我需要帮助解释 CVTimeStamp
【发布时间】:2012-06-29 08:32:11
【问题描述】:

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

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

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

前三个请求 - CVTimeStamp 的值

  1. 视频时间:489150134353920.000000 hostTime:2026048145326080.000000 videoTimeScale:241500000.000000 rateScalar:1.000000 videoRefreshPeriod: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

【问题讨论】:

    标签: opengl quicktime core-video .mov


    【解决方案1】:

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

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

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

    【讨论】:

    • 我无法使用内置解码,因为我的视频文件已加密。
    • smpteTime 始终为 0(所有值)您的解释是有道理的,但是我收到的数据没有。根据您的解释,我每次播放视频时都应该看到相同的 videoTime 数字,对吗?当我播放我的 1 秒视频时,每次播放视频的视频时间都不同。第一次运行(请求前 2 帧)视频时间:490954255499264 视频时间:490954456825856 第二次运行(请求前 2 帧)视频时间:491057066278912 视频时间:491057200496640
    • CVTimeStamp 在 CVTimeStamp 参考文档中进行了解释。 - 不,它们确实不是。该文档在解释字段含义方面做得很差。
    • @finnw 需要更多信息才能进一步正确回答此问题。原始帖子中列出的值是哪些参数? timestampNow 还是 timestampOut?另外,时间戳的标志是什么?如果kCVTimeStampSMPTETimeValid 标志被清除,那么SMPTE 时间将无效。但是你也许可以打电话给CVDisplayLinkTranslateTime() 来获取它。
    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    相关资源
    最近更新 更多