1

请帮忙

我知道您正在阅读本文,如果没有答案,我将不胜感激,因为我觉得只有我一个人试图解决这个问题。

这是如何运作的?

我已经彻底阅读了这份文件。它提到了一个名为 TimestampScale 的元素。我已经下载了大约 30 个 WebM 示例文件,发现HEX { 0x2AD7B1or 2A D7 B1or ['2A','D7','B1']} 或NON-HEX integers { 42 215 177or [42, 215, 177]} 后面的值总是相同的:HEX { 0x830F4240or 83 0F 42 40or ['83', '0F', '42', '40']} or NON-HEX integers { 131 15 66 64or [131,15,66,64]}。这些值都应该是1000000Matroska Element Specification 中所述的默认值。所以问题是......0x830F4240最终如何1000000

上面的 Incase 对您来说太草率了,或者您想要更多解释:

The TimestampScale identifier is equal to 0x2AD7B1. This is in Hexadecimal formatting.

The ways I format it in HEX are:
    0x2AD7B1
    2A D7 B1
    ['2A','D7','B1']

The ways I format it in Integers are:
    42 215 177
    [42, 215, 177]



Its preceding values are taken from a Uint8Array: | 131, 15, 66, 64 |
after the Hexadecimal values are taken. This is NOT in Hexadecimal formatting.
The reason why is because that is the raw data and I want to be
as open with you as possible.

The ways I format it in HEX are:
    0x830F4240
    83 0F 42 40
    ['83','0F','42','40']

The ways I format it in Integers are:
    131 15 66 64
    [131,15,66,64]

So question is: how does | 131, 15, 66, 64 | or 0x830F4240 equal 1000000?

所有值如何以 HEX 和整数显示:

    Hex: 2A D7 B1 83 0F 42 40
    Integers: 42 215 177 131 15 66 64

目标:

目标是弄清楚如何将值转换为 make 1000000,这样我就可以在 Matroska 元素规范中的其他元素上使用这种转换(如持续时间转换)。

4

1 回答 1

1

WebM 容器格式是 Matroska 容器格式的子集。

Matroska 基于EBML(可扩展二进制元语言)

EBML 文档由元素组成。

元素由元素 ID、元素数据大小和元素数据组成。

元素数据大小是可变大小的整数。(元素 ID 也是可变大小的整数。)

Variable-Size Integer 使用如下所示的位模式,其中前导位指示使用了多少字节,并且这些x位存储实际值。

  • 1 字节:1xxxxxxx
  • 2字节:01xxxxxx xxxxxxxx
  • 3 字节:001xxxxx xxxxxxxx xxxxxxxx
  • 4 字节:0001xxxx xxxxxxxx xxxxxxxx xxxxxxxx

等等

您提到的 TimestampScale 元素由

  • 元素 ID2A D7 B1
  • 元素数据大小83(一个 1 字节的可变大小整数,指示后面的 3 个字节的元素数据)
  • 元素数据0F 42 40(十进制 1000000 的大端编码)
于 2021-01-24T04:01:18.893 回答