簡體   English   中英

使用Sink Writer編碼音頻

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM