2016-11-05 65 views
0

我發現this文章,解釋如何使用媒體基礎編碼視頻。使用接收器編碼器編碼音頻

我想使用上述鏈接中使用的原則對音頻進行編碼。

我一直在設置接收器寫入器的正確輸入媒體類型。

下面是部分:在最後一行

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); 

我的代碼失敗而設置輸入介質類型。

任何幫助,如何處理?

謝謝。

+1

你是如何創建SinkWriter的?你嘗試過使用MFAudioFormat_PCM嗎? – VuVirt

+0

MFCreateSinkWriterFromURL(L「output.m4a」,NULL,NULL,&pSinkWriter); 是的,我已經嘗試PCM和浮動。他們不能設置 – mbaros

+1

我認爲你還需要在媒體類型中提供MF_MT_AUDIO_BITS_PER_SAMPLE。它必須設置爲16.請檢查輸入類型要求:https://msdn.microsoft.com/en-us/library/windows/desktop/dd742785(v=vs.85).aspx 採樣率必須是要麼44100或48000.子類型必須是MFAudioFormat_PCM。 – VuVirt

回答

2

您還需要提供介質類型中的MF_MT_AUDIO_BITS_PER_SAMPLE。它必須設置爲16.檢查輸入類型要求:https://msdn.microsoft.com/en-us/library/windows/desktop/dd742785(v=vs.85).aspx。採樣率必須是44100或48000.子類型必須是MFAudioFormat_PCM。

最重要的事情是,你需要調用AddStream在水槽作家,呼籲SetMediaType之前,通過調用列舉到MFTranscodeGetAudioOutputAvailableTypes功能與MFAudioFormat_AAC亞型,如果你需要對音頻編碼爲AAC的音頻輸出類型。

MFCreateSinkWriterFromURL可能無法猜測您需要從m4a擴展中編碼爲mp4容器。調用MFCreateSinkWriterFromURL時,您可能需要使用MF_TRANSCODE_CONTAINERTYPE屬性提供MFTranscodeContainerType_MPEG4容器類型。另一種選擇是使用MFCreateMPEG4MediaSink和MFCreateSinkWriterFromMediaSink代替。

+0

只是一個評論。 MFCreateSinkWriterFromURL能夠從輸出名稱中猜出正確的容器。 – mbaros