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 个属性:channels
和 sample
速率。
之后,当我们创建一个新的媒体类型时,我们需要将这些属性设置为新的媒体类型。然后在 reader.
上设置新的媒体类型
我正在使用 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 个属性:channels
和 sample
速率。
之后,当我们创建一个新的媒体类型时,我们需要将这些属性设置为新的媒体类型。然后在 reader.