2013-12-23 5 views
8

私は、ブラウザからオーディオ入力を受け取り、それを複数のリスナーにストリーミングしようとしています。意図された使用は音楽のためのものなので、品質はmp3規格またはその近くでなければならない。HTML5&Web audio api:ブラウザからサーバーへのマイクデータのストリーミング。理想的なトランスポートとデータ圧縮

私は二つの方法、両方失敗した結果をもたらす試みた

:直接ブラウザ間のオーディオストリーミングが正常に動作しますが、オーディオ品質は私が持っているものもののカスタマイズできないように思わ

  • のWebRTC

    を見た。 (私はOpusオーディオコーデックを使用しているのを見たことがありますが、コントロールを公開していないようです)。
  • 誰もWebRTCストリームのオーディオ品質を向上させる方法についての洞察はありますか?

WebSocketを

  • 問題は、サーバーへのブラウザからの輸送です。以下の方法で取得できるPCMオーディオデータは、大きすぎると判明し、ウェブソケット経由でサーバーに繰り返しストリームすることができませんでした。このストリームは高速インターネット環境では完全に機能しますが、低速のWi-Fiでは使用できません。

    var context = new webkitAudioContext() 
    navigator.webkitGetUserMedia({audio:true}, gotStream) 
    
    function gotStream (stream) 
    { 
        var source = context.createMediaStreamSource(stream) 
        var proc = context.createScriptProcessor(2048, 2, 2) 
    
        source.connect(proc) 
        proc.connect(context.destination) 
        proc.onaudioprocess = function(event) 
        { 
         var audio_data = event.inputBuffer.getChannelData(0)|| new Float32Array(2048) 
         console.log(audio_data) 
         // send audio_data to server 
        } 
    } 
    

だから、メインの質問は、それが簡単にサーバーにストリーミングできるようにするためにPCMデータを圧縮する方法はありますか?あるいは、これについてもっと簡単な方法がありますか?

+0

lyadAssaf:websocketでオーディオをストリーミングするサンプルコードはありますか?はいの場合は、sample.thnxを提供することができます。 – Pradeep

答えて

3

PCMデータを圧縮する方法はたくさんありますが、現実的には、WebRTCを正しく動作させることが最善の方法です。 WebRTCはこれを行うように設計されています - メディアを適応的にストリームする - あなたは "複数の"リスナーの意味を定義しませんが(3人のリスナーと300,000人の同時リスナーの間には大きな違いがあります)

+0

私はかなりの数の(おそらく最大300,00)リスナーを望んでいます。なぜ私はウェブソケットに向かっているのですか?しかし、WebRTCが実現可能だと思うなら、オーディオ品質を制御する方法はありますか?私はその技術が音声のためのものであることを認識していますが、VoiceEngineクラスのNetEQとエコー/ノイズキャンセラ([reference](http://www.webrtc.org/reference/architecture))のために、これを変更する方法はありませんか? WebRTCドラフトのそれ以降のバージョンでは、そのようなクラスへの高度なアクセスがあると思います。 – IyadAssaf

+0

あなたの問題はスケーリングされるでしょう。ほとんどのシステムは、オーディオストリームをポンピングする3000の同時ソケット接続を直接サポートするつもりはありません...それは単なるデータです。 – cwilso

2

データを再サンプリングしたり圧縮したりする方法はいくつかありますが、いずれもネイティブではありません。私はspeex.js環境からxaudio.js libで8Khz Mono(あなたの走行距離は異なる場合があります)にデータを再サンプリングしました。 speexを使用してストリームを圧縮することもできますが、通常は音声のみに使用されます。あなたの場合は、ストリームをサーバーに送信し、ストリームを圧縮して視聴者にストリームします。私は、単純なブラウザが膨大なオーディエンスにデータを提供するのに十分なものであるとは本当に信じていません。

関連する問題