2016-11-01 16 views
2

インターネット経由でデバイス間でオーディオをストリーミングする方法を教えてください。私は、Javaソケットを使用して、基本的なデータを送信するの承知しているが、どのように思って:Androidデバイスから別のデバイスにオーディオをストリーミング

  1. スタートストリーミング途中のデータであることのために必要とされるどのような形式のファイル(たとえば、曲の途中で)
  2. て送信されます。 MediaPlayerはURLをデータソースとして取り込むことができるため、サーバー側からオーディオを送信する際に、どのように表現する必要がありますか?

おかげ

+0

p2pストリーミングが必要な場合は、WebRTCを検討することをお勧めします。 –

答えて

1

は、私はあなたと少しを共有することができ、音楽ストリーミングアプリを実施しました。

Android MediaPlayerクラスをストリーミングして使用する場合は、MP3またはOGGを使用することをおすすめします。

アーキテクチャがクライアントサーバー(インターネット上の実サーバがAndroidデバイス向けのストリームを配信している場合)の場合、HTTP経由でMP3またはOGGバイトをストリームするだけです。 MediaPlayerをあなたのサーバ上のURLにポイントするだけです。

独自のカスタムソケットコードでピアツーピアのアーキテクチャの場合、専用のスレッドでlocalhostをリッスンする「プロキシhttp」サーバーを作成できます。 MediaPlayerインスタンスをローカルのインプロセスソケットサーバー(例:http://localhost:54321/MyStream.mp3)に向けます。次に、HTTP取得要求フォームのMediaPlayerを解析し、カスタムP2Pソケットプロトコルとローカルhttpサーバに接続されたリスナー間のストリームバイトをプロキシするコードを実装する必要があります。多くのラジオストリーミングアプリは、MP3ストリームからICECASTメタデータを解析するためにこれを正確に行います。これを行うHere's the code I use for my radio streaming app

「ファイルの途中で開始」のシナリオでは、私のMP3 Stream Reader classが役に立ちます。これはInputStream(ファイル、ソケットストリームなど)をラップし、あなたがどこから始めたかで次の有効なフレームに同期します。 read_next_chunkに電話して、次のオーディオブロックとそのフォーマットを取得してください。 MediaPlayerはあなたのためにこの大部分を行うかもしれないので、これは必要ではないかもしれません。

+0

お返事ありがとうございます。私はあなたを正しく理解していれば、プロセスはローカルアドレスでソケットスレッドを実行し、MediaPlayerからのGETリクエストを受け取り、そこからクライアントアドレスを取り出し、ストリームデータをファイルからそのアドレスに転送します。私が混乱しているのはプロキシサーバーだけです。内部でデータを送信するにはどのように構築されていますか? – thegoldencanary

+0

リスニング側では、MediaPlayerは 'http:// localhost:12345'に接続します。ポート12345の接続をリッスンする専用のサーバースレッドがあります。メディアプレイヤースレッドがインプロセスサーバーに接続すると、そのサーバーにオーディオがストリームされます。独自のソケットプロトコルで相手側のオーディオを「取得」します。 – selbie

関連する問題