0

GameKitBluetooth/Wi-Fiを介して複数のデバイスで曲を同期して再生するように実装しようとしました。それでも、私は常に0.1〜0.5秒の遅延があります。このような同期は簡単だと思います。私が欲しいものを実装するBMレシーバーメトロノームを見つけました。サウンドは本当に同期して再生されます。

リズムのある小さなパケットを1つ使用GKSendDataReliableして送信しています。ここでこのチュートリアルを使用してすべてのことを行いました。

私はたくさんグーグルで検索しましたが、答えや私のボトルネックを見つけることができません。提案/アプローチをいただければ幸いです。多分いくつかのチュートリアル?

4

1 に答える 1

1

何台のデバイスを使用していますか?私はそれがサーバークライアントスキームだと思います。これが私がすることです(それはうまくいかないかもしれませんが、あなたは提案/アプローチを求めています)、非常に大まかなアルゴリズム:

-サーバーはタイマーを設定し、PINGパケットを使用してその値をクライアントに送信し、クライアントごとに記憶します

-クライアントはPINGパケットを受信し、応答パケットを送信します

-サーバーは応答パケットを取得し、時間をチェックして、結果のデルタをどこかに(ベクトルで)保存します

-サーバーはより多くのPINGパケットを送信し、より多くの時間デルタを取得します

-サーバーに十分なデータがある場合、サーバーは平均ping時間(CLIENTX_TIME)を計算し、最大のもの(BIGGEST_TIME)を選択します。

-サーバーはすべてのクライアントにSTARTパケットを送信します。パケットには、XX_TIMEにSTARTPLAYINGという追加情報が含まれています。

-サーバーはBIGGEST_TIMEの後に音楽の再生を開始します

-クライアントはSTARTパケットを取得し、XX時間後に音楽の再生を開始します。XXはプレーヤーごとに計算されます(したがって、最も遅いクライアントの場合は0になり、その他の場合はBIGGEST_TIME-CLIENTX_TIMEになります)

-このプロセスは何度も繰り返されます。何かをプレイしたいときはいつでも、事前にそれを行います

常にすべてを同期させることは決してできないということです-これは残念ながらネットワークの性質です;)

于 2012-10-25T13:59:55.367 に答える