【问题标题】:Media Foundation Source Reader : Video timestamp increase additional 16 ms every N samplesMedia Foundation Source Reader:视频时间戳每 N 个样本增加 16 毫秒
【发布时间】:2021-10-22 15:46:45
【问题描述】:

我有一个网络摄像头的实时应用程序。我在 Win 10 中使用 Media Foundation 的 Source Reader 实时捕捉视频。一切正常,除了时间戳。我需要知道何时捕获样本,因此我记录每个样本的时间戳,并检查样本之间的时间差。为了测试,我没有复制视频内容,只是记录了时间戳。我使用 30 Hz 帧率,得到以下结果,

样本索引、时间戳、样本差异

样本 1,64285.17787 秒,32.07 毫秒

样本 2,64285.20989 秒,32.02 毫秒

样本 3,64285.24188 秒,32.00 毫秒

样本 4,64285.27385 秒,31.97 毫秒

样本 5,64285.30589 秒,32.04 毫秒

样本 6,64285.33794 秒,32.05 毫秒

样本 7,64285.36990 秒,31.96 毫秒

样本 8,64285.41776 秒,47.86 毫秒 ?????

样本 9,64285.44984 秒,32.08 毫秒

样本 10,64285.48187 秒,32.03 毫秒

样本 11,64285.51386 秒,31.99 毫秒

样本 12,64285.54589 秒,32.03 毫秒

样本 13,64285.57786 秒,31.97 毫秒

样本 14,64285.60992 秒,32.06 毫秒

样本 15,64285.64186 秒,31.94 毫秒

样本 16,64285.67385 秒,31.99 毫秒

样本 17,64285.70588 秒,32.03 毫秒

样本 18,64285.73792 秒,32.04 毫秒

样本 19,64285.76988 秒,31.96 毫秒

样本 20,64285.80191 秒,32.03 毫秒

样本 21,64285.83392 秒,32.02 毫秒

样本 22,64285.86587 秒,31.95 毫秒

样本 23,64285.91385 秒,47.98 毫秒 ?????

样本 24,64285.94586 秒,32.02 毫秒

样本 25,64285.97788 秒,32.02 毫秒

样本 26,64286.00986 秒,31.98 毫秒

样本 27,64286.04182 秒,31.95 毫秒

样本 28,64286.07388 秒,32.06 毫秒

样本 29,64286.10588 秒,32.00 毫秒

样本 30,64286.13785 秒,31.96 毫秒

样本 31,64286.16990 秒,32.06 毫秒

样本 32,64286.20190 秒,32.00 毫秒

样本 33,64286.23391 秒,32.01 毫秒

样本 34,64286.26586 秒,31.95 毫秒

样本 35,64286.29786 秒,32.01 毫秒

样本 36,64286.32986 秒,32.00 毫秒

样本 37,64286.37787 秒,48.00 毫秒 ?????

样本 38,64286.40984 秒,31.98 毫秒

样本 39,64286.44184 秒,31.99 毫秒

样本 40,64286.47388 秒,32.05 毫秒

样本 41,64286.50588 秒,31.99 毫秒

样本 42,64286.53785 秒,31.98 毫秒

样本 43,64286.56987 秒,32.02 毫秒

样本 44,64286.60190 秒,32.03 毫秒

样本 45,64286.63385 秒,31.94 毫秒

样本 46,64286.66597 秒,32.12 毫秒

样本 47,64286.69790 秒,31.93 毫秒

样本 48,64286.72986 秒,31.96 毫秒

样本 49,64286.76186 秒,32.00 毫秒

样本 50,64286.79386 秒,32.00 毫秒

样本 51,64286.84188 秒,48.02 毫秒 ?????

样本 52,64286.87388 秒,32.00 毫秒

样本 53,64286.90585 秒,31.97 毫秒

样本 54,64286.93785 秒,32.00 毫秒

样本 55,64286.96988 秒,32.03 毫秒

样本 56,64287.00184 秒,31.96 毫秒

样本 57,64287.03385 秒,32.01 毫秒

样本 58,64287.06594 秒,32.09 毫秒

样本 59,64287.09789 秒,31.95 毫秒

样本 60、64287.12985 秒、31.96 毫秒

样本 61,64287.16189 秒,32.04 毫秒

样本 62、64287.19389 秒、32.00 毫秒

样本 63、64287.22586 秒、31.96 毫秒

样本 64,64287.25788 秒,32.02 毫秒

样本 65、64287.30587 秒、47.99 毫秒 ?????

样本 66,64287.33787 秒,32.00 毫秒

样本 67、64287.36985 秒、31.99 毫秒

样本 68、64287.40184 秒、31.99 毫秒

样本 69,64287.43387 秒,32.03 毫秒

样本 70,64287.46589 秒,32.02 毫秒

样本 71,64287.49785 秒,31.96 毫秒

样本 72,64287.52986 秒,32.01 毫秒

样本 73,64287.56188 秒,32.02 毫秒

样本 74,64287.59385 秒,31.97 毫秒

样本 75,64287.62587 秒,32.02 毫秒

样本 76,64287.65793 秒,32.06 毫秒

样本 77,64287.68991 秒,31.99 毫秒

样本 78,64287.72186 秒,31.95 毫秒

样本 79, 64287.76982 s, 47.96 ms ?????

样本 80、64287.80187 秒、32.05 毫秒

样本 81,64287.83388 秒,32.01 毫秒

样本 82,64287.86584 秒,31.96 毫秒

样本 83,64287.89783 秒,31.99 毫秒

样本 84,64287.92985 秒,32.01 毫秒

样本 85、64287.96186 秒、32.01 毫秒

样本 86,64287.99384 秒,31.98 毫秒

样本 87,64288.02587 秒,32.03 毫秒

样本 88,64288.05787 秒,32.00 毫秒

样本 89,64288.08989 秒,32.02 毫秒

样本 90、64288.12190 秒、32.00 毫秒

样本 91,64288.15388 秒,31.98 毫秒

样本 92,64288.18587 秒,31.99 毫秒

样本 93, 64288.23383 s, 47.96 ms ?????

样本 94,64288.26583 秒,32.00 毫秒

样本 95,64288.29787 秒,32.04 毫秒

样本 96,64288.32992 秒,32.05 毫秒

样本 97,64288.36182 秒,31.90 毫秒

样本 98,64288.39386 秒,32.04 毫秒

样本 99,64288.42588 秒,32.02 毫秒

样本 100、64288.45784 秒、31.96 毫秒

样本 101,64288.48988 秒,32.04 毫秒

样本 102,64288.52189 秒,32.01 毫秒

样本 103,64288.55388 秒,31.99 毫秒

样本 104,64288.58586 秒,31.97 毫秒

样本 105、64288.61785 秒、32.00 毫秒

样本 106,64288.64998 秒,32.13 毫秒

样本 107、64288.69791 秒、47.93 毫秒 ?????

样本 108,64288.72983 秒,31.93 毫秒

样本 109,64288.76188 秒,32.05 毫秒

样本 110,64288.79388 秒,31.99 毫秒

样本 111,64288.82585 秒,31.97 毫秒

样本 112、64288.85785 秒、32.00 毫秒

样本 113,64288.88987 秒,32.02 毫秒

样本 114,64288.92188 秒,32.01 毫秒

样本 115,64288.95390 秒,32.02 毫秒

样本 116,64288.98587 秒,31.97 毫秒

样本 117,64289.01790 秒,32.02 毫秒

样本 118,64289.04986 秒,31.96 毫秒

样本 119,64289.08186 秒,32.00 毫秒

样本 120、64289.11386 秒、32.01 毫秒

样本 121, 64289.16185 s, 47.98 ms ?????

样本 122、64289.19386 秒、32.01 毫秒

样本 123,64289.22584 秒,31.98 毫秒

样本 124、64289.25785 秒、32.01 毫秒

样本 125、64289.28987 秒、32.02 毫秒

样本 126、64289.32184 秒、31.96 毫秒

样本 127、64289.35385 秒、32.01 毫秒

样本 128,64289.38589 秒,32.04 毫秒

样本 129、64289.41786 秒、31.98 毫秒

样本 130、64289.44982 秒、31.96 毫秒

样本 131,64289.48188 秒,32.06 毫秒

样本 132、64289.51388 秒、32.00 毫秒

样本 133,64289.54585 秒,31.97 毫秒

样本 134、64289.57786 秒、32.01 毫秒

样本 135、64289.62588 秒、48.02 毫秒 ?????

每 14 个样本,样本之间的间隔将增加 16 毫秒。平均周期为 33 ms,与 30 Hz 一致。但我需要一个稳定的周期 33 毫秒,而不是平均 33 毫秒。

我尝试了不同的帧速率和不同的网络摄像头。场景是一样的。每 N 个样本将增加 16 ms。 (对于不同的帧速率和不同的网络摄像头,N 可能不同)。我也使用 QueryPerformanceCounter 来验证。它显示了相同的结果。

我认为网络摄像头不会定期延迟。我猜源阅读器有一些内部缓冲区并进行一些后期处理。我尝试直接使用 MFMediaSource 和 MFMediaStream ,但它不输出任何样本。我必须回到 Source Reader。

我的捕获代码与 SDK 中的示例相同。 (MFCaptureD3D)

有谁知道如何让 Source Reader 产生稳定的采样周期?

提前致谢。

【问题讨论】:

    标签: ms-media-foundation


    【解决方案1】:

    大多数网络摄像头,尤其是消费级摄像头和内置笔记本电脑的摄像头,不必生成请求或承诺的帧数。总体而言,配置帧速率应解释为相机要提供的“每秒最大帧数”。如果您对拥有尽可能多的帧感兴趣,您只需使用承诺最高 fps 的设置启动相机。如果您有兴趣获得封顶费率,请分别更新设置。

    许多相机通过降低有效帧速率来应对低光照条件。这不必是平滑的,因此相机只会跳过您所看到的行为的一些帧。

    最简单的尝试是将相机对准明亮的物体,然后检查它是否以流畅的高帧速率拍摄。如果是这种情况,而在其他情况下,摄像头会出现一些跳跃,那么这只是摄像头和驾驶员对低光照条件的反应方式。

    【讨论】:

    • 我了解低光照条件可能会降低帧速率。但在这种情况下,网络摄像头以大于 30 Hz 的速率输出多个样本,然后丢弃一个样本。
    • 平均频率接近 30 Hz。这是一种奇怪的行为。我不知道这是网络摄像头问题还是媒体基金会问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多