2011-12-20 2 views
7

私はソケットの動作、特に私はデバイスからmediarecorderによって送信されたストリームを受信するサーバー側のいくつかのコードサンプルが必要なのか理解したいと思います。サーバーへのアンドロイドストリームのオーディオ

ありがとうございました。

私の実際の最終的な目的は、デバイスで話し、それをただ1方向にPCで聞くことです。現時点で

私は次のコードを使用してストリームを送信することができる午前:

String hostname = "192.168.1.10"; 
int port = 8000; 
Socket socket = null; 
    try { 
     socket = new Socket(InetAddress.getByName(hostname), port); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(pfd.getFileDescriptor()); 

    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

recorder.start(); 
+0

PCでどの言語を使用していますか? – Axis

+0

私は.NETプラットフォーム、vb.netまたはC#を使用して同じです。 – Giuseppe

答えて

4

は大丈夫ようだが、私は個人的には、デバイス上のオーディオをバッファリングしてから別のサーバーに送信することを好みますスレッドの代わりにレコーダーをソケットに直接結びつけるのではなく、ローカルでバッファリングすることで、正常に接続を中断することができます。

あなたが録画中で、ユーザーがトンネルを通過してインターネット接続が失われたとします。直接ストリーミングすると、ソケットが閉じてユーザーが気になるでしょう:-)しかし、データをローカルにバッファリングする場合接続を再確立し、中断した場所からサーバーにオーディオを送信し続けることができます。ちょうど魔法のように動作するため、接続の途切れが発生したことをユーザーが知らなくてもうまくいきます。

これを有効にするには、録音をローカルバッファに書き込んで、別のスレッドでそのバッファの新しいデータをチェックし、できるだけ早くサーバーに送信する必要があります。

+2

いくつかの例ポイント? – Giuseppe

関連する問題