【发布时间】:2020-11-18 14:32:24
【问题描述】:
使用 Win32,我可以访问 CLSID_CResamplerMediaObject,这意味着我可以将我的频道数从 6 个减少到 2 个。
在 UWP 上,这不再定义,我能找到的对重采样器的唯一引用是 CLSID_AudioResamplerMediaObject。但是,当我创建此类的实例并将其传递给我的 MFMediaType_Float 或 MFMediaType_PCM 类型时,它表示不支持提供的类型...
ComPtr<IUnknown> pTransformUnknown = nullptr;
DxUtil::ThrowIfFailed(CoCreateInstance(CLSID_AudioResamplerMediaObject, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, &pTransformUnknown));
DxUtil::ThrowIfFailed(pTransformUnknown->QueryInterface(IID_PPV_ARGS(&mResampler)));
IMFMediaType* pInputType = nullptr;
DxUtil::ThrowIfFailed(MFCreateMediaType(&pInputType));
DxUtil::ThrowIfFailed(pInputType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio));
DxUtil::ThrowIfFailed(pInputType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM)); // Or MFAudioFormat_Float
DxUtil::ThrowIfFailed(pInputType->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16));
DxUtil::ThrowIfFailed(pInputType->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, 6));
DxUtil::ThrowIfFailed(pInputType->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 48000));
DxUtil::ThrowIfFailed(mAudioSourceReader->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, nullptr, pInputType)); // Fails here!
像往常一样,Microsoft 文档没有帮助,如果有任何帮助,我将不胜感激!
输入文件为 Mp4,具有 1 个 aac 流、6 个通道、16 位音频。
【问题讨论】:
标签: audio uwp ms-media-foundation