![](/img/trans.png)
[英]How to play audio using Sink Writer from Microsoft Media Foundation
[英]Encode Audio using Sink Writer
我發現這篇文章解釋了如何使用Media Foundation編碼視頻。
我正在嘗試使用以上鏈接中使用的原理對音頻進行編碼。
我一直在為接收器寫入器設置正確的輸入媒體類型。
這是那部分:
if (SUCCEEDED(hr))
hr = MFCreateMediaType(&pMediaTypeIn);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_Float);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, cChannels);
if (SUCCEEDED(hr))
hr = pMediaTypeIn->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate);
if (SUCCEEDED(hr))
hr = pSinkWriter->SetInputMediaType(streamIndex, pMediaTypeIn, NULL);
設置輸入媒體類型時,我的代碼在最后一行失敗。
任何幫助,如何處理?
謝謝。
您還需要在媒體類型中提供MF_MT_AUDIO_BITS_PER_SAMPLE。 必須將其設置為16。在此處檢查輸入類型要求: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/dd742785(v=vs.85).aspx 。 采樣率必須是44100或48000。子類型必須是MFAudioFormat_PCM。
最重要的是,如果需要將音頻編碼為AAC,則在調用SetMediaType之前需要在Sink Writer上調用AddStream,其輸出音頻類型由對MFTranscodeGetAudioOutputAvailableTypes函數的調用與MFAudioFormat_AAC子類型進行枚舉。
MFCreateSinkWriterFromURL可能無法猜測您需要從m4a擴展編碼為mp4容器。 調用MFCreateSinkWriterFromURL時,可能需要使用MF_TRANSCODE_CONTAINERTYPE屬性提供MFTranscodeContainerType_MPEG4包含類型。 另一種選擇是改為使用MFCreateMPEG4MediaSink和MFCreateSinkWriterFromMediaSink。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.