【发布时间】: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 产生稳定的采样周期?
提前致谢。
本
【问题讨论】: