通過HTML5/Javascript(無閃光燈)捕獲麥克風音頻流並將其發送到已建立的icecast服務器的步驟和方法是什麼?如何捕獲HTML5麥克風輸入到icecast?
解決方案必須是基於瀏覽器/網絡的,不需要額外的軟件。 服務器在Rails 5.0.0.1上。
我應該從哪裏開始?
我很努力地在網上找到任何相關信息,因爲所有內容都是關於將音頻文件上傳/錄製爲完整文件而不是流。
通過HTML5/Javascript(無閃光燈)捕獲麥克風音頻流並將其發送到已建立的icecast服務器的步驟和方法是什麼?如何捕獲HTML5麥克風輸入到icecast?
解決方案必須是基於瀏覽器/網絡的,不需要額外的軟件。 服務器在Rails 5.0.0.1上。
我應該從哪裏開始?
我很努力地在網上找到任何相關信息,因爲所有內容都是關於將音頻文件上傳/錄製爲完整文件而不是流。
該解決方案必須完全基於瀏覽器/網絡,無需額外的軟件。
這是不可能的,因爲有no way to make a streaming HTTP PUT request。也就是說,要通過XHR或Fetch發出HTTP請求,請求主體必須是不可變的。
有一個新的標準ReadableStream將在任何一天現在可用,讓您製作一個ReadableStream(您的編碼音頻)和PUT it to a server。一旦可用,這是可能的。
服務器在Rails 5.0.0.1上。
不知道爲什麼你提到,因爲你說它必須全部住在瀏覽器中。無論如何,讓我告訴你我是如何用服務器端代理實現這一點的。
客戶端,您需要使用getUserMedia()
捕獲音頻。 (一定要使用adapter.js,因爲規範最近已經改變了,你不希望手動處理約束對象的變化。)一旦你有了,你可以發送PCM樣本(我建議從32位浮點到16位首先簽名),或者您可以使用AAC或MP3客戶端等編解碼器。如果您在客戶端執行編解碼器,則只能發送一個或兩個流。如果您使用編解碼器服務器端,由於CPU需求,您可以根據需要派生儘可能多的數據,但根據所獲得的數據流,您將獲得更多帶寬。
對於客戶端上的編解碼器,您可以使用MediaRecorder或通過emscripten(或類似)編譯爲JavaScript的編解碼器。 Aurora.js有一些解碼編解碼器,但我相信至少有一個在那裏的編解碼器也有編碼。
要獲取數據到服務器,您需要一個二進制web套接字。
在服務器端,如果你在那裏保存編解碼器,FFmpeg可以讓你輕鬆實現。
一旦你有了編碼音頻,你需要將你的HTTP PUT請求發送到Icecast或類似的,以及更新帶外元數據的元數據,或者複製到你正在使用的容器中。服務器。
自我推廣:如果你不想做這一切你自己,我有一些代碼,你可以從我的許可稱爲AudioPump網絡編碼器,這不正是你問什麼。您可以根據需要對其進行修改,將組件嵌入到項目中,等等。如果您有興趣,請發送電子郵件至[email protected]。