视频服务器将传入的流写入磁盘,现在每个文件都必须带有流的时间戳。
根据文档, Date 属性是:
日期 - 有符号的 8 个八位字节整数,以纳秒为单位,0 表示千禧年的精确开始(在 2001-01-01T00:00:00.000000000 UTC)
我通过 MKVToolNix 将此属性插入到测试文件中,但我无法弄清楚如何将文档中的此语句与此数据进行比较:
也就是说,十六进制08 4F 27 F2 FA 64 20 00
是 2019 年 12 月 22 日 21:00 UTC(字节顺序很可能是颠倒的) -如何在加号上获得这个值?
问题归结为从某个时刻
2001-01-01T00:00:00,000000000 UTC
到某个其他特定时刻所经过的纳秒数。为此,我们将使用
std::chrono::system_clock
. 这种类型的时钟测量的时间可以与日历时间相关联(而不是std::chrono::steady_clock
)。让我们创建一个结构
std::tm
,用必要的时间值填充它。从这个结构中,std::mktime()
你可以得到std::time_t
. 并且您已经std::time_t
可以std::chrono::system_clock
借助std::chrono::system_clock::from_time_t()
.之后,我们将这些时刻的差异转换为纳秒,
std::chrono::duration_cast
并通过调用count()
.结果值是您可以写入文件的纳秒数。
请注意,屏幕截图中的日期是 12 月 22 日,而不是您在问题中指出的 12 月 21 日。