2014-12-11 83 views
0

我正在嘗試製作SHOUTcast音頻流的實況頻譜圖。我發現這個頁面http://www.aerodynes.fr/2014/04/14/a-pure-javascript-audio-waterfall/的人幾乎正是我想要的,但從聲卡的音頻。我如何以和他一樣的方式打開SHOUTcast流進行處理?我似乎無法在Web Audio API中找到相關信息。Javascript中的Shoutcast流頻譜圖

// Open the microphone 
function init() { 
    var audioConstraints = { 
     audio: true 
    }; 
    getUserMedia(audioConstraints, gotStream); 
} 
... 

感謝您的任何建議/信息。

回答

0

你不能直接。你必須得到MacGyver一些解決方案。

您遇到的第一個問題是您無法直接連接到大多數瀏覽器的SHOUTcast流。雖然SHOUTcast本質上是HTTP,但是有一個小小的差異會破壞兼容性,特別是對於更現代的客戶端。一個正常的HTTP服務器在這樣的響應中返回一個狀態行:

HTTP/1.1 200 OK 

Shoutcast一樣的服務器返回此:

ICY 200 OK 

解決這個問題的方式(假設你需要仍然使用Shoutcast一樣)是在重寫響應狀態行時代理數據服務器端。

下一個問題是SHOUTcast/Icecast流使用ADTS中的編解碼器(通常是MP3或AAC)將音頻壓縮爲適合於網絡流傳輸的帶寬。 Web Audio API處理浮點PCM樣本。您將不得不解碼音頻流。雖然這通常可以在瀏覽器中完成,但這取決於您使用的編解碼器。否則,您必須在服務器端進行,您不妨在頻譜分析服務器端和數據流頻段值。

我認爲處理這個問題的最好方法是讓音樂元素或對象播放流,並將其用作Web Audio API節點,然後將其連接到分析儀節點以獲取頻譜。您需要將Icecast用於您的服務器,並且您將不得不將流轉碼爲一對編解碼器才能獲得更廣泛的瀏覽器支持。