Windows Media Foundation:当前媒体类型更改

Windows Media Foundation: current media type change

本文关键字:媒体 类型 Media Foundation Windows      更新时间:2023-10-16

我正在使用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时,我们必须保留两个属性:channelssample速率。之后,当我们创建一个新的媒体类型时,我们需要将这些属性设置为新媒体类型。然后在读卡器上设置新媒体类型。