【发布时间】:2026-01-30 09:30:01
【问题描述】:
我一直在尝试在媒体基础框架中检索每个样本的位,但它总是返回 0,或者给出“未找到请求的属性”HRESULT。
这是我尝试过的代码,
DWORD streamIndex = 0, flag = 0;
LONGLONG audioTimestamp = 0;
ComPtr<IMFSample> pAudioSample = nullptr;
HRESULT result = mImpl->mAudioSourceReader->ReadSample(mImpl->mAudioStreamIndex, 0, &streamIndex, &flag, &audioTimestamp, &pAudioSample);
if (result != S_OK) {
LogError("Failed to read audio sample..");
return false;
}
ComPtr<IMFMediaType> pAudioSampleMediaType;
if (S_OK != mImpl->mAudioSourceReader->GetCurrentMediaType(mImpl->mAudioStreamIndex, &pAudioSampleMediaType)) {
LogError("Failed to set resampler input...");
return false;
}
uint32_t inBitsPerSample;
result = pAudioSampleMediaType->GetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, &inBitsPerSample);
result = pAudioSample->GetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, &inBitsPerSample);
inBitsPerSample = MFGetAttributeUINT32(pAudioSample.Get(), MF_MT_AUDIO_BITS_PER_SAMPLE, 0);
程序正在运行,但我将值设置为 32,这可能是因为我有一个 32 位音频文件。我还需要做些什么来从音频样本中检索每个样本的比特吗?
非常感谢, 彼得
编辑:
媒体详情如下:
Video file with LPCM Audio (mp4 container)
Sample Rate 48000 Hz
Bits Per Sample 16
Channel Count 6
【问题讨论】:
标签: c++ winapi audio ms-media-foundation ch