我有一個客戶端/服務器音頻合成器,其中服務器(java)動態生成要由客戶端使用HTML5音頻元素呈現的音頻流(Ogg/Vorbis)。用戶可以調整各種參數,服務器立即相應地更改輸出。不幸的是,音頻元素非常積極地緩衝(預取),所以直到幾分鐘後才聽到用戶所做的改變。使用WebAudio API播放音頻流
試圖禁用預加載沒有任何效果,顯然這個設置只是'建議',所以不能保證它的行爲在瀏覽器中是一致的。
我一直在閱讀我能找到的關於WebRTC和不斷髮展的WebAudio API的一切,看起來好像我需要的所有東西都在那裏,但我不知道是否有可能將它們連接起來, d喜歡。
我看了看RTCPeerConnection,它確實提供了低延遲,但它帶來了很多我不想要或不需要的行李(STUN,ICE,offer/answer等),目前它似乎只支持有限的一套編解碼器,主要面向語音。另外,由於服務器端是用java編寫的,我認爲我需要做很多工作來教它如何「講」所涉及的各種協議和格式。
AudioContext.decodeAudioData適用於靜態示例,但不適用於流,因爲它不會處理傳入的數據,直到消耗完整個流爲止。
我想要的是沒有任何緩衝的音頻標籤(即HTMLAudioElement)的確切功能。如果我能以某種方式創建一個MediaStream對象,該對象使用服務器URL進行輸入,那麼我可以創建一個MediaStreamAudioSourceNode並將該輸出發送到context.destination。這與AudioContext.decodeAudioData已經做的沒有什麼不同,除了該方法創建靜態緩衝區而不是流。
我想保留Ogg/Vorbis壓縮並最終使用其他編解碼器,但接下來我可以嘗試的一件事是發送原始PCM並隨時編譯音頻緩衝區,就好像它們是通過編程方式生成的javascript代碼。但是,我認爲所有的零件都已經存在,如果有什麼方法可以利用這些零件,我會非常激動的去了解它!
由於提前, 喬
對不起,回覆遲了,剛剛注意到你的評論。我最終實現了與您所描述的非常相似的東西。我打開了一個Web套接字連接,用於將流式記錄數據從瀏覽器傳輸到服務器,並將數據從服務器傳輸回瀏覽器。 –