2010-12-01 20 views
4

タイトルが実際に言うこと。電話でマイクからオーディオをストリーミングし、コンピュータのデスクトップアプリケーション(Javaコード)で再生する必要があります。Androidからデスクトップアプリケーションへの音声ストリーミング

UDPまたはTCPを使用しても問題はありません。とにかく電話とコンピュータは同じNAT上にあるので、送信は正常に動作します。私はPC上で私のJavaアプリケーションで、このストリームを再生しますか

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

String host = "10.0.2.2"; 
int port = 5740; 

Socket socket = null; 
try { 
    socket = new Socket(InetAddress.getByName(host), port); 

    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); 
    recorder.setOutputFile(pfd.getFileDescriptor()); 
    recorder.prepare(); 
    recorder.start(); 

    Log.d(TAG, "Sending audio for 20 seconds.."); 
    Thread.sleep(20000); 

    } catch (Exception e) {  
    // TODO Auto-generated catch block 
     e.printStackTrace(); 
      } 

問題がある、:

私はこのコードを使用して、デバイスからのストリームデータを送信する方法の公正なアイデアを持っていますか? または、音を流すためのより良い方法はありますか?

私はこれについての情報を得るためにインターネットを採掘しましたが、良い結果はありませんでしたが、確かに誰かがこれを達成しているに違いないでしょうか?

ご協力いただきありがとうございます。

答えて

1

あなたは、そのポートのあなたの電話に接続してデータを受信するだけのクライアントを書くことができますか?

今、mp4 javaデコーダがないので、別のフォーマットを使用する必要があります。 JavaLayerやJOggを使ってサンプルアプリケーションを見てみましょう。どちらもInputStreamで動作しますので、ソケットを開くことができる限り、ストリームを再生することができます。

また、Androidについてはわかりませんが、ServerSocketを開いて接続を待つ必要はありませんか?

+0

ここでは電話機がクライアントで、デスクトップPCはサーバーなので、ServerSocketが使用される場所です。 – Nick

+0

@ニック:これは問題ではないと思います。 –

+0

はい、Nickの言うとおり、デスクトップPCはここのサーバーです。しかし、アプリのデコードに関するヒントをありがとう。私はそれらを見ていきます。 –

2

私はあなたがやろうとしていることに非常に近い何かをしました。 udpポートをリッスンしているサーバーでgstreamerを使用しています。基本的にループバックソケットだけであるjavaで書かれたリレーサーバーもあります。モバイルクライアント接続を待つサーバーポートは1つあり、データを受信するとDatagramPackets(udpパケットのjavaクラス)をgstreamerのudpポートにすべてダンプします。唯一の捉え方は、gstreamerパイプライン用の適切なデコーダを見つけることです。

関連する問題