MPEG1WAVEFORMAT 结构 (mmreg.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
结构 MPEG1WAVEFORMAT
描述 MPEG-1 音频数据的格式。
语法
typedef struct mpeg1waveformat_tag {
WAVEFORMATEX wfx;
WORD fwHeadLayer;
DWORD dwHeadBitrate;
WORD fwHeadMode;
WORD fwHeadModeExt;
WORD wHeadEmphasis;
WORD fwHeadFlags;
DWORD dwPTSLow;
DWORD dwPTSHigh;
} MPEG1WAVEFORMAT;
成员
wfx
包含音频格式相关信息的 WAVEFORMATEX 结构。 请参阅“备注”。
fwHeadLayer
指定由以下常量定义的 MPEG 音频层:
值 | 含义 |
---|---|
|
第 1 层 |
|
第 2 层 |
|
第 3 层 |
某些 MPEG 流可能包含来自多个层的帧。 如果是,请将标志与按位 OR 组合在一起。
dwHeadBitrate
指定比特率(以位/秒为单位)。 此值提供实际比特率,而不是 MPEG 帧标头代码。 如果比特率是可变的或非标准比特率,请将此字段设置为零。
fwHeadMode
指定由以下常量定义的流模式:
值 | 含义 |
---|---|
|
立体声 |
|
联合立体声 |
|
双通道 |
|
单通道 |
某些 MPEG 流可能包含具有不同模式的帧。 如果是,请将标志与按位 OR 组合在一起。
fwHeadModeExt
指定联合立体声编码的模式扩展:
值 | MPEG 帧标头代码 | 第 1 层和第 2 层 | 第 3 层 |
---|---|---|---|
0x01 | '00' | 带 4 到 31 的强度立体声 | 强度立体声关闭;关闭中间/侧 (MS) 立体声 |
0x02 | '01' | 带 8 到 31 的强度立体声 | 打开强度立体声;MS 立体声关闭 |
0x04 | '10' | 带 12 到 31 的强度立体声 | 强度立体声关闭;MS 立体声打开 |
0x08 | '11' | 带 16 到 31 的强度立体声 | 强度立体声关闭;MS 立体声打开 |
这些值可以与按位 OR 组合使用。 通常,编码器将根据信号的特征在扩展模式之间动态切换。 因此,对于普通联合立体声编码,请将此字段设置为0x0F () 的所有标志的按位 OR。 但是,可以使用此字段将编码器限制为一组允许的编码类型。
仅当 fwHeadMode 包含ACM_MPEG_JOINTSTEREO时,此字段才适用。 对于其他模式,请将此字段设置为零。
wHeadEmphasis
指定解码器所需的去强调:
值 | MPEG 帧标头 | 需要取消强调代码 |
---|---|---|
1 | '00' | 无 |
2 | '01' | 50/15 毫秒强调 |
3 | '10' | 保留 |
4 | '11' | CCITT J.17 |
fwHeadFlags
指定以下标志中零个或多个的按位组合:
值 | 含义 |
---|---|
|
设置专用位。 |
|
设置版权位。 |
|
设置原始/主位。 |
|
设置保护位,并在每个帧中插入 16 位错误保护代码。 |
|
将 ID 位设置为 1,将流定义为 MPEG-1 音频流。 |
编码器将使用这些标志在 MPEG 音频帧标头中设置相应的位。
dwPTSLow
指定音频流第一帧的 PTS) (演示时间戳的最小有效 32 位。
dwPTSHigh
指定 PTS 的最有效位。 dwPTSLow 和 dwPTSHigh 字段可以被视为单个 64 位值。
备注
对于 MPEG-1 音频,wfx 成员中定义的 WAVEFORMATEX 结构必须具有以下值。
WAVEFORMATEX 成员 | 说明 |
---|---|
wFormatTag | 必须是WAVE_FORMAT_MPEG |
nChannels | 1 个用于单声道,2 个用于立体声 |
nSamplesPerSec | 如果采样频率是固定的,则指定采样频率。 如果它是变量,请将此字段设置为零。 |
nAvgBytesPerSec | 指定平均数据速率。 如果在第 3 层下使用可变比特率编码,则该值可能不是合法的 MPEG-1 比特率。 |
nBlockAlign | 对于音频帧长度固定的音频流,此字段指定音频帧的长度。 如果帧长度可变,请将此字段设置为 1。如果采样频率为 32 kHz 或 48 kHz 且比特率不变,则音频帧大小为常量。 在这种情况下,按如下所示计算 nBlockAlign :
|
wBitsPerSample | 未使用;设置为零。 |
cbSize | 指定 WAVEFORMATEX 结构之后的格式数据的大小(以字节为单位)。 对于标准 MPEG1WAVEFORMAT 结构,此值为 22 字节。 |
要求
标头 | mmreg.h |