繁体   English   中英

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

[英]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率。 之后,当我们创建新的媒体类型时,我们需要将那些属性设置为新的媒体类型。 然后在阅读器上设置新的媒体类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM