4

私はソケットプログラミングが初めてで、それがどのように機能するかについてあまりわかりません。これがユースケースです。ユーザーが別のiPhoneデバイスから発信されたリアルタイムオーディオをストリーミングするiPhoneアプリを開発しています(つまり、マルチキャスティング)

私がこれまでに行ったこと:

クライアントからの着信データをリッスンし続けるサーバーでポートを開きました。iOS側では、サーバーで受信したパケットを読み取り、それに応じて処理するメソッドを実装しました(GCDAsyncSocketを使用しました)

助けが必要な問題:

上記の使用例は、2 人のユーザーに最適です。1 人はオーディオ データをサーバーに送信し、もう 1 人はそのデータを読み取ってオーディオを再生します。しかし、実際には、音声データを発信する単一のユーザーが常にいるとは限りません。100 以上になる可能性があります。すべてのユーザーが異なる音声データをサーバーに送信している場合、リスナーのデータをフィルター処理して、全員がそのデータのみを受信するようにするにはどうすればよいでしょうか。この問題を克服して、すべてのパケットにトークンを追加します

unique_token:<ffdefa09 fedead3...... //Audio Data

ただし、すべてのクライアントがすべてのパケットをリッスンし、割り当てられたトークンを持つパケットのみを処理するため、このプロセスは遅すぎます。

とにかく、元のデバイスがサーバーになり、リスナーにのみデータを送信し、他の人を気にしないピアツーピア接続を作成できますか?

4

3 に答える 3

1

オーディオ データを送信するすべてのエンドに対して、ソケットと recv オーディオ データを作成し、オーディオ データを受信するすべてのエンドに対して、ソケットを作成してオーディオ データを送信します。多くのデバイスがパブリック アドレスの背後にあるため、P2P は多くの作業を伴います。

于 2013-10-29T10:02:49.200 に答える
1

音声データをサーバーにストリーミングする前に、軽いプロトコルのようなものを追加できませんか?

iPhone -> server [Request: Start Stream Audio]
server -> iPhone [OK: TCP Port:4444]
// iphone sending audio packets to port 4444


iPhone2 -> server [Request: Start Stream Audio]
server -> iPhone2 [OK: TCP Port:4445]

サーバーは、パケットIDの代わりにTCPポートIDを使用してすべてのオーディオチャネルをフィルタリングできます(または、問題を誤解した可能性があります)

ところで、プロバイダーのファイアウォールが原因で、セルラー ネットワーク上で iPhone を使用して「実際の」P2P を行うことはできないと思います

于 2013-10-23T13:47:52.430 に答える