使用DirectShow播放AMR檔案

來源:互聯網
上載者:User

         AMR全稱Adaptive Multi-Rate,自適應多速率編碼,主要用於行動裝置的音頻,壓縮比比較大,但相對其他的壓縮格式品質比較差,由於多用於人聲,通話,效果還是很不錯的。其具體的檔案格式可以參考其他文章或RFC3267 RTP Payload Format for AMR and AMR-WB

       AMR檔案多用於NOKIA手機,其特點是由於採用了自適應多速率編碼,使得檔案的盡寸變得很小,是WAV檔案的1/10甚至更小。因此,如果程式中能夠使用AMR檔案代替WAV檔案,在部署的時候就會佔用更小的儲存空間。當然,得在音頻品質和檔案大小兩個因素上進行權衡。

      AMR檔案不是Windows Mobile必須支援的檔案格式,因此,要想在程式中對其進行解碼播放有一定的困難。不過,由於AMR檔案的廣泛應用,大部分Windows Mobile手機的OEM廠商在出廠時都會選擇第三方的解碼器內建於手機當中,從而能夠對其進行解碼。因此,編程式來播放AMR檔案是可行的。

     我們在手機上雙擊AMR格式的音頻檔案,可以發現Windows Media Player可以對其播放,那至少可以說明手機中已經包含了相應的解碼器,因此,拿出對付多媒體檔案最便捷的工具——DirectShow。

聲明三個介面指標
 IGraphBuilder* m_pGraph;
 IMediaControl* m_pControl;
 IMediaEvent* m_pEvent;

擷取介面地址
 HRESULT hr= CoInitialize(NULL);
 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
  IID_IGraphBuilder, (void **)&m_pGraph);
 hr = m_pGraph->QueryInterface(IID_IMediaControl, (void **)&m_pControl);
 hr = m_pGraph->QueryInterface(IID_IMediaEvent, (void **)&m_pEvent);

渲染檔案至輸出裝置,播放語音
 hr = m_pGraph->RenderFile(_T("//儲存卡//7001102.amr"), NULL);
 if (SUCCEEDED(hr))
  {
    hr = m_pControl->Run();
    if (SUCCEEDED(hr))
    {
       long evCode;
       m_pEvent->WaitForCompletion(INFINITE, &evCode);
       m_pControl->Stop();
    }
  }

釋放介面執行個體
 if (m_pControl)
 {
  m_pControl->Release();
  m_pControl=NULL;
 }
 if (m_pEvent)
 {
  m_pEvent->Release();
  m_pEvent=NULL;
 }
 if (m_pGraph)
 {
  m_pGraph->Release();
  m_pGraph=NULL;
 }
CoUninitialize();

別忘了標頭檔和庫檔案:#include "dshow.h",strmiids.lib

    以上程式略去了對失敗的處理部分,使用時可自行加上,另外,有些手機中帶的解碼器具有著作權保護,雖然媒體播放器可以調用這些Filter播放AMR檔案,但其他程式則無法調用,因此,本文提供的方法就不再適用了,請讀者根據自己的需求考慮別的方案。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.