Windows 媒体基础:当前媒体类型更改

Windows Media Foundation: current media type change

我正在使用 Windows Media Foundation 解码音频文件。我能够解码大部分文件,除了那些说 MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED.

的文件

如果我在某个时候改变了当前的媒体类型,如何处理?

部分代码如下:

    IMFSourceReader *pSourceReader = NULL;
    IMFMediaType *pAudioType= NULL;

    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
    MFStartup(MF_VERSION);

    MFCreateSourceReaderFromURL(filePath, NULL, &pSourceReader);
    pSourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, true)
    pSourceReader->GetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, &pAudioType);
    MFCreateMediaType(&pAudioType);
    pAudioType->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
    pAudioType->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
    pAudioType->SetCurrentMediaType(MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, pAudioType);

    IMFSample *audioSample = NULL;
    DWORD streamIndex, flags;
    LONGLONG llAudioTimeStamp;

        while (true)
        {
            pSourceReader->ReadSample(
                MF_SOURCE_READER_FIRST_AUDIO_STREAM,
                0,                              // Flags.
                &streamIndex,                   // Receives the actual stream index. 
                &flags,                         // Receives status flags.
                &llAudioTimeStamp,              // Receives the time stamp.
                &audioSample )                  // Receives the sample or NULL.

            if (flags & MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED)
            {
                // what to do here?
            }
    }

非常感谢。

我找到了克服这个问题的方法。

当我们调用 GetCurrentMediaType 时,我们必须在某处保留 2 个属性:channelssample 速率。 之后,当我们创建一个新的媒体类型时,我们需要将这些属性设置为新的媒体类型。然后在 reader.

上设置新的媒体类型