2013-10-11 15 views
5

Devo eseguire un'azione (riprodurre un brano alla volta su più dispositivi senza ritardo) in un determinato punto del tempo. Il mio requisito è che l'app non debba utilizzare alcuna connessione Internet. Quindi ho bisogno di un punto esatto di tempo in cui per giocare i dati (audio)]Come sincronizzare un audio su 2 o più dispositivi ios

ho già provato seguente:

  1. Giocare canzone dopo 5 secondi su tutti i dispositivi. (causa ancora un ritardo di millisecondi)
  2. Invia una piccola notifica di testo per identificare la riproduzione della canzone e quindi avviare la riproduzione su tutti i dispositivi. Ma l'invio e la ricezione di questa notifica richiede tempo di millisecondi :(:(
  3. Impostare il tempo in automatico su tutti i dispositivi e poi controllato differenza di tempo di un messaggio di testo che passa, Ha gap millisecondi in ogni test.
+0

Sto usando connessione socket per trasmettere i dati. I dati vengono inviati molto velocemente, ma ho ancora bisogno di un'esatta riproduzione del tempo. –

+1

la tua domanda sarà probabilmente chiusa in quanto non mostra alcuno sforzo. Inoltre, poiché ci sono domande doppie, rivela che devono ancora cercare post esistenti, ad es. http://stackoverflow.com/questions/17377390/what-is-the-best-method-of-synchronizing-audio-across-ios-devices-with-wifi Detto questo, anche se è un problema diverso, dai un'occhiata a questa risposta http://stackoverflow.com/questions/8357514/ios-stream-audio-from-one-ios-device-to-another/8492598#8492598 –

+0

Sto cercando su questo da ultimi 4 giorni. Aveva scansionato anche quei link, ma nessun aiuto .... –

risposta

6

Per prima cosa è necessità di sincronizzare il tempo interno 2 dispositivi a quanto pare l'orologio più preciso si può avere su iOS è il tempo assoluto facendo:.

CFAbsoluteTime now = CFAbsoluteTimeGetCurrent(); 

allora avete bisogno di inviare questa volta da dispositivo A al dispositivo B recuperare la differenza sul dispositivo B e inviarlo a A, quindi confrontare la differenza con il tempo trascorso nella transazione di rete. In questo modo puoi avere una sincronizzazione abbastanza accurata dei 2 dispositivi. (Si presume che il tempo di rete sia simmetrico tra richiesta e risposta e che non ci sia molto sovraccarico sul calcolo sul dispositivo B).

enter image description here

Da lì si può facilmente istanziare 2 AVAudioPlayer sui dispositivi impostare la canzone e chiamare prepareToPlay e infine licenziare il metodo di esecuzione in base al ritardo sulla sincronia. Questo dovrebbe darti una precisione non apprezzabile.

Un altro percorso che è possibile eseguire è quello di posizionare uno AudioUnit sul secondo dispositivo collegato al microfono per sincronizzare la musica di conseguenza con il primo suono emesso dal dispositivo.

+0

Grazie,., Ha quasi funzionato ... Saluti ...:) –

+0

In caso di problemi relativi alla richiesta/risposta di rete asimmetrica, può valere la pena ripetere la prima parte del processo viceversa (da B ad A) e quindi calcolare la media dei risultati. – cescofry

Problemi correlati