Android - Synchroniczne odtwarzanie muzyki

0

Witam. Muszę napisać appke na android która odtwarza muzyke synchronicznie na kilku telefonach na zasadzie DJ-speakers.
Aktualnie mój "algorytm" wygląda tak:

  1. Mierzę czas po jakim server dostaje odpowiedź od klienta po wysłaniu impulsu.
  2. Dzielę wynik na pół bo impuls odtwarzania wysyłąć będę tylko w stronę klienta.
  3. Wysyłam impuls rozpoczęcia odtwarzania do klienta i po sleepie równym wynikowi z powyższych punktów odtwarzam piosenkę na serverze.

Problem polega na tym, że to działa różnie. Raz dobrze raz źle. Ogólnie opóźnienie mierzone w tych samych warunkach (taka sama odległość między telefonami, ta sama sieć, odstęp czasowy pomiarów jakieś kilkanaście/kilkadziesiąt sekund) wydają się randomowe (raz 30 ms innym razem 130).

Orientujecie się może co mogę robić nie tak? Korzystam z bilbioteki Kryonet i wysyłam impulsy przez TCP... Bede wdzieczny za każdą pomoc bo męczę sięz tym już bardzo długo i nie potrafię znaleźć dobrego rozwiązania.

A może by tak zsychronizować zegary systemowe wszystki urządzeń podłączonych i odtwarzać muzykę o określonej godzinie? Tylko jak zsynchronizować zegary kurde... Z gory dzieki za pomoc

0

Zbyt prymitywny algorytm synchronizujący. Fizyka się kłania.

  1. Założenie:
    czas przesyłki z A->B będzie równe czasowi przesyłki B->A
    jest BARDZO wątpliwe.

  2. Ty mierzysz czas wysyłki JEDNEGO pakietu? Poczytaj o błędach pomiarów, a zrozumiesz o co chodzi.

Sugeruję potraktować to tak:
a) istnieje w idealnych warunkach czas t, który jest równy przejściu pakietu A->B, który z kolei jest równy B->A .
b) wszelkie odchyły od normy - to zmienna losowa

Czyli:
t(A->B) = t1
t(B->A) = t2
t1 + dt1 = t1'
t2 + dt2 = t2'
t1 + dt1 = t2 + dt2

Teraz problem jest oszacowanie dt1 i dt2. Metod trochę jest, poszukaj i poczytaj. Natomiast potrzebujesz serii pomiarów t1 + dt1 i t2 + dt2. Najlepiej synchronizować względem jednego telefonu, czyli telefon A zapisuje moment wysyłki pakietu, telefon B odsyła moment otrzymania pakietu. W ten sposób masz t2' i t2'+t1' - spokojnie można wyliczyć wszystko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1