表示 IEC 61937 传输的格式

随着需要压缩音频格式的媒体存储设备的增加,应用程序必须识别、描述和使用各种新的编码音频内容,以便将内容从电脑传输到 HDMI 或 DisplayPort 接收器等设备。

若要表示要通过 IEC 61937 兼容接口传输的编码音频流,应用程序必须提供:

  • 要传输的编码音频流的特征。

  • 目标设备上的解码音频流的特征。

在 Windows Vista 及更早版本的 Windows 操作系统中,应用程序可以从通道数、样本大小以及使用格式的音频流的数据速率推断音频格式的质量级别。 对于 PCM 格式,此信息可从指定格式的 WAVEFORMATEX 结构的 nChannelsnSamplesPerSecnAvgBytesPerSec 成员获取。 对于非 PCM 格式,已命令这三个成员在音频流中存储有关压缩数据的信息。 因此,在解压缩和播放非 PCM 音频流后, WAVEFORMATEX 结构缺少有关该流的有效通道数、样本大小和数据速率的信息。 根据此结构中的信息,用户或应用程序可能难以推断非 PCM 流的质量级别。

WAVEFORMATEX 已扩展到 WAVEFORMATEXTENSIBLE 结构,以提供额外的流特征。 但是,此结构还不足以描述 IEC 61937 传输的流,因为它旨在表示一组特征,并用于未压缩的多通道 PCM 数据。

在 Windows 7 中,操作系统通过为新结构 WAVEFORMATEXTENSIBLE_IEC61937 提供支持来解决此问题,该结构扩展了 WAVEFORMATEXTENSIBLE 结构,以存储两组音频流特征:传输前编码的音频格式以及解码后音频流的特征。 新结构显式指定非 PCM 格式的有效通道数、样本大小和数据速率。 利用此信息,应用程序可以在解压缩和播放非 PCM 流后推断其质量级别。

WAVEFORMATEXTENSIBLE_IEC61937 结构在 Windows 7 SDK 随附的 KsMedia.h 标头中声明。 FormatExt 成员是存储要传输的流的特征的 WAVEFORMATEXTENSIBLE 结构。 WAVEFORMATEXTENSIBLE 结构的 Format 成员是 WAVEFORMATEX 结构。 此 WAVEFORMATEXWAVEFORMATEXTENSIBLE 的内容向应用程序指示该结构是否可以解释为 WAVEFORMATEXTENSIBLE_IEC61937 结构。 对于 WAVEFORMATEXTENSIBLE_IEC61937 结构:

  • WAVEFORMATEXwFormatTag 成员必须包含 WAVE_FORMAT_EXTENSIBLE (FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE)。

  • WAVEFORMATEXTENSIBLE 结构的 SubFormat 成员指定要传输的编码格式的 GUID。 例如,FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL 指示 Dolby Digital Plus 格式。 有关支持的 GUID,请参阅 SubFormat GUID。

  • WAVEFORMATEX 的 cbSize 成员指示的大小为 34 字节。 (FormatExt.Format.cbSize = 34). WAVEFORMATEXTENSIBLE_IEC61937 的总大小为 52 字节。

WAVEFORMATEXTENSIBLE_IEC61937dwEncodedSamplesPerSecdwEncodedChannelCountdwAverageBytesPerSec 成员描述解码后音频流的采样率、通道数和比特率(以字节为单位)。

SubFormat GUID

在 Windows 7 中,KsMedia.h 标头包含 CEA-861-D 定义的压缩音频格式的 SubFormat GUID 的定义。 GUID 在 WAVEFORMATEXTENSIBLE 的 SubFormat 成员以及 WAVEFORMATEXTENSIBLE_IEC61937 结构的 FormatExt 成员中指定 (WAVEFORMATEXTENSIBLE_IEC61937.FormatExt.Subformat)。

下表列出了可用作标准 IEC 61937 编码音频格式的压缩音频格式的 GUID。 这些格式类似于 Windows 中的现有活动编码 3 (AC-3) 和数字剧院声音 (DTS) 格式表示形式。

CEA 861 类型 SubFormat GUID 说明
0x00 请参阅流。
0x01 00000000-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_WAVEFORMATEX
IEC 60958 PCM
0x02 00000092-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL
AC-3
0x03 00000003-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG1
MPEG-1(第 1 层和第 2 层)
0x04 00000004-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG3
MPEG-3(第 3 层)
0x05 00000005-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_MPEG2
MPEG-2(多通道)
0x06 00000006-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_AAC
高级音频编码(ADTS 中的 MPEG-2/4 AAC)
0x07 00000008-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS
DTS
0x0a 0000000a-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS
Dolby Digital Plus
0x0a 0000010a-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS_ATMOS
使用 Dolby Digital Plus 编码的 Dolby Atmos
0x0f 未使用的预留

 

下表列出了以高比特率音频采样数据包传输的压缩音频格式的 GUID。

CEA 861 类型 SubFormat GUID 说明
0x0b 0000000b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD
DTS-HD(24 位,96Khz)
0x0c 0000000c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP
Dolby MAT 1.0:
Dolby TrueHD (MLP – Meridian Lossless Packing) – 24 位 192KHz/高达 18 Mbps,8 个通道)
0x0c 0000010c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT20
Dolby MAT 2.0:
Dolby TrueHD – 24 位 192KHz/最多 18 Mbps,8 个通道或 LPCM,最多 24 Mbps。
0x0c 0000030c-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT21
Dolby MAT 2.1:
Dolby TrueHD – 24 位 192KHz/最多 18 Mbps,8 个通道或 LPCM,最多 24 Mbps。
0x0e 00000164-0000-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_WMA_PRO
Windows Media Audio (WMA) Pro
0x0b 0000000b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD
DTS HD
0x0b 0000010b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTSX_E1
DTS:X E1
0x0b 0000030b-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DTSX_E2
DTS:X E2

 

Microsoft 提供的 HD 音频类驱动程序支持 PCM、AC3、DTS、AAC、Dolby Digital Plus、WMA Pro、MAT (MLP) 格式。 下表列出了 HD 音频类驱动程序不支持并且可由第三方解决方案实现的压缩音频格式的 GUID。

CEA 861 类型 SubFormat GUID 说明
0x08 00000008-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_ATRAC
自适应声学转换编码 (ATRAC)
0x09 00000009-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_ONE_BIT_AUDIO
一位音频
0x0d 0000000d-0cea-0010-8000-00aa00389b71
KSDATAFORMAT_SUBTYPE_IEC61937_DST
直接流传输 (DST)—无损压缩 DSD(直接流数字)。

 

Dolby Digital Plus 格式

当 Dolby Digital Plus 内容通过 IEC 60958 传输时,链接采样率必须是内容采样率的四倍。 Dolby Digital Plus 支持 32 KHz、44.1 KHz 和 48 KHz 的内容采样率。 HDMI 等接口不支持 128 KHz (32 KHz x 4),因此仅支持 44.1 和 48 KHz 内容采样率。

以下示例显示了应用程序在 WAVEFORMATEXTENSIBLE_IEC61937 结构中设置以 48 KHz 的内容采样率表示 Dolby Digital Plus 格式的值。

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 2;              // One IEC 60958 Line.
wfext.FormatExt.Format.nSamplesPerSec = 192000;    // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 768000;   // 192 KHz * 4.
wfext.FormatExt.Format.nBlockAlign = 4;            // 16 bits * 2 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;        // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                // Indicates that Format is part of a 
                                                   // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_5POINT1;    // Dolby 5.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS;
wfext.dwEncodedSamplesPerSec = 48000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 6;                            // Encoded data contains 6 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby TrueHD (MAT)

内容采样率为 44.1、88.2 和 176.4 kHz 的 Dolby TrueHD 内容通过 IEC 60958 在 176.4 kHz/8 通道传输(需要 705.6 kHz 的 IEC 60958 帧速率),内容采样率为 48、96 和 192 kHz 的内容则通过 192 kHz/8 通道传输(需要 768 kHz 的 IEC 60958 帧速率)。

以下示例显示应用程序在 WAVEFORMATEXTENSIBLE_IEC61937 结构中设置以 96 KHz 的内容采样率表示 Dolby TrueHD 的值。

Dolby MAT 1.0

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP; // This structure indicates MLP (MAT 1.0) support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby MAT 2.0

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT20; // This structure indicates MAT 2.0 support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

Dolby MAT 2.1

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 8;                // Four IEC 60958 Lines.
wfext.FormatExt.Format.nSamplesPerSec = 192000;      // Link runs at 192 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 3072000;    // 192 KHz * 16.
wfext.FormatExt.Format.nBlockAlign = 16;             // 16-bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;          // Always at 16 bits over IEC 60958.
wfext.FormatExt.Format.cbSize = 34;                  // Indicates that Format is part of a 
                                                     // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_7POINT1;    // Dolby 7.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT21; // This structure indicates MAT 2.1 support.
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 8;                            // Encoded data contains 8 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

注意

支持一个版本的 Dolby MAT 并不意味着支持版本号较低的 Dolby MAT。 由于 Dolby MAT 2.1 与早期版本的 Dolby MAT 向后兼容,因此,指示支持 Dolby MAT 2.1 的类驱动程序通常还指示支持 Dolby MAT 2.0 和 Dolby MAT 1.0,每个版本使用单独的 WAVEFORMATEXTENSIBLE_IEC61937 结构。

 

WMA Pro

下表中列出可以用四个配置文件之一编码的 WMA Pro 音频内容。

配置文件 属性 - 值 说明
M0 最大比特率 – 192000 bps
最大采样率 – 48 KHz
最大通道计数 – 2
最大缓冲区大小 – 600*1024 位
每个帧的最大样本数 – 2048
每个帧的最大位数 - 655536
建议用于无线音乐和流式处理。
音频帧中的最大比特率为 1536000 bps。
M1 最大比特率 – 385000 bps
最大采样率 – 48 KHz
最大通道计数 – 6
最大缓冲区大小 – 600*1024 位
每个帧的最大样本数 – 4096
每个帧的最大位数 - 131072
建议用于环绕声标清电影。
音频帧中的最大比特率为 1536000 bps。
M2 最大比特率 – 769000 bps
最大采样率 – 96 KHz
最大通道计数 – 6
最大缓冲区大小 – 1200*1024 位
每个帧的最大样本数 – 4096
每个帧的最大位数 - 131072
建议用于环绕声高清电影。
音频帧中的最大速率为 3072000 bps。
M3 最大比特率 – 3000000 bps
最大采样率 – 96 KHz
最大通道计数 – 8
最大缓冲区大小 – 2400*1024 位
每个帧的最大样本数 – 4096
每个帧的最大位数 - 131072
建议用于数字影院。
音频帧中的最大速率为 3072000 bps。

 

M0 和 M1 配置文件适合 48 KHz/16 位/立体声 (1536000 bps) IEC 60958 流。 M2 和 M3 配置文件适合 96 KHz/16 位/立体声 (3072000 bps) IEC 60958 流。

以下示例显示应用程序在 WAVEFORMATEXTENSIBLE_IEC61937 结构中设置将 WMA Pro 表示为 M2 配置文件的值。

WAVEFORMATEXTENSIBLE_IEC61937 wfext;
Wfext.FormatExt.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
wfext.FormatExt.Format.nChannels = 2;             // One IEC 60958 Line.
wfext.FormatExt.Format.nSamplesPerSec = 96000;    // Link runs at 96 KHz.
wfext.FormatExt.Format.nAvgBytesPerSec = 384000;  // 96 KHz * 4.
wfext.FormatExt.Format.nBlockAlign = 4;           // 16 bits * 8 channels.
wfext.FormatExt.Format.wBitsPerSample = 16;       // Always at 16 bits over link.
wfext.FormatExt.Format.cbSize = 34;               // Indicates that Format is part of a 
                                                  // WAVEFORMATEXTENSIBLE_IEC61937 structure.
wfext.FormatExt.Samples.wValidBitsPerSample = 16;
wfext.FormatExt.dwChannelMask = KSAUDIO_SPEAKER_5POINT1;    // 5.1 Surround.
wfext.FormatExt.SubFormat = KSDATAFORMAT_SUBTYPE_IEC61937_WMA_PRO;
wfext.dwEncodedSamplesPerSec = 96000;                       // Sample rate of encoded content.
wfext.dwEncodedChannelCount = 6;                            // Encoded data contains 6 channels.
wfext.dwAverageBytesPerSec = 0;                             // Ignored for this format.

设备格式