MPEG1WAVEFORMAT 结构 (mmreg.h)

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia 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 音频层:

含义
ACM_MPEG_LAYER1
第 1 层
ACM_MPEG_LAYER2
第 2 层
ACM_MPEG_LAYER3
第 3 层
 

某些 MPEG 流可能包含来自多个层的帧。 如果是,请将标志与按位 OR 组合在一起。

dwHeadBitrate

指定比特率(以位/秒为单位)。 此值提供实际比特率,而不是 MPEG 帧标头代码。 如果比特率是可变的或非标准比特率,请将此字段设置为零。

fwHeadMode

指定由以下常量定义的流模式:

含义
ACM_MPEG_STEREO
立体声
ACM_MPEG_JOINTSTEREO
联合立体声
ACM_MPEG_DUALCHANNEL
双通道
ACM_MPEG_SINGLECHANNEL
单通道
 

某些 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

指定以下标志中零个或多个的按位组合:

含义
ACM_MPEG_PRIVATEBIT
设置专用位。
ACM_MPEG_COPYRIGHT
设置版权位。
ACM_MPEG_ORIGINALHOME
设置原始/主位。
ACM_MPEG_PROTECTIONBIT
设置保护位,并在每个帧中插入 16 位错误保护代码。
ACM_MPEG_ID_MPEG1
将 ID 位设置为 1,将流定义为 MPEG-1 音频流。
 

编码器将使用这些标志在 MPEG 音频帧标头中设置相应的位。

dwPTSLow

指定音频流第一帧的 PTS) (演示时间戳的最小有效 32 位。

dwPTSHigh

指定 PTS 的最有效位。 dwPTSLowdwPTSHigh 字段可以被视为单个 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
  • 第 1 层: 4 * (int)(12 * bitrate / sampling frequency)
  • 第 2 层和第 3 层: (int)(144 * bitrate / sampling frequency)
如果比特率可变或采样频率为 44.1 kHz,则音频帧大小不固定, nBlockAlign 应为 1。
wBitsPerSample 未使用;设置为零。
cbSize 指定 WAVEFORMATEX 结构之后的格式数据的大小(以字节为单位)。 对于标准 MPEG1WAVEFORMAT 结构,此值为 22 字节。

要求

   
标头 mmreg.h

另请参阅

DirectShow 结构

MPEG-1 媒体类型