2011-12-07 5 views
13

Sto cercando di capire come creare un'app Web che consenta a più utenti di visualizzare lo stesso video di YouTube in sincronizzazione sui propri computer. Ad esempio, synchtube.com o watch2gether.comCome riprodurre i video di YouTube sincronizzati su più client?

che sto cercando un approccio semplice che può essere implementato utilizzando tecnologie comuni come PHP, jQuery e Apache. Attualmente sto pensando lungo le linee del polling (o del polling lungo cometa ma richiede una configurazione del server più complessa che spero di evitare), simile a come sono implementate le app di chat Ajax - ovvero i client controllano continuamente con il server per vedere quale video sta giocando. Tuttavia, sospetto che qui ci saranno problemi di latenza, quindi i video non saranno completamente sincronizzati. Non riesco a pensare ad un approccio migliore ancora.

Alla comunità di sviluppatori, qualsiasi aiuto sulla metodologia o frammenti di codice sono estremamente apprezzati!

+0

L'unica cosa che posso pensare è di avere ogni utente selezionato pronto. Una volta che tutti sono pronti, sposta il video su tutti loro. Guarderei in un pub/sottoservizio usando php. Non sono sicuro di quale supporto browser stai guardando, ma ho trovato che varie tecnologie websocket sono piuttosto utili per pub/sub. Che è supportato nella maggior parte dei browser moderni. – agmcleod

+1

Utilizzare un server per sincronizzare i client. Quindi, utilizza l'API del player JavaScript di YouTube per riprodurre un video. Vedi [questa risposta] (http://stackoverflow.com/questions/7443578/youtube-iframe-api-how-do-i-control-a-iframe-player-thats-already-in-the-html#7513356) per un metodo semplice e facile da capire per riprodurre un video. Per chiamate più complesse, come ottenere lo stato e gli eventi del giocatore, vedere [questa risposta] (http://stackoverflow.com/questions/7988476/listening-for-youtube-event-in-jquery/7988536#7988536). –

+0

Anche se tutti gli utenti avviano il video esattamente nello stesso momento, cosa succede se alcuni hanno una connessione più lenta che può tenere il passo con il flusso video solo se le altre app non utilizzano una parte della larghezza di banda? Fai mettere in pausa tutti i clienti in modo che nessuno cada dietro? – nnnnnn

risposta

1

avete un paio di modi per raggiungere questo obiettivo:

  • La soluzione ideale è quella di utilizzare un tempo vero e proprio protocollo di collaborazione e server (ad esempio XMPP e OpenFire) set-up e di sviluppare un modulo personalizzato che ti permetterà di passare le stanze personalizzate avanti e indietro. Sfortunatamente non solo non soddisfa le tue esigenze in merito alla tecnologia coinvolta, ma è anche piuttosto complicato da implementare, ma il risultato è spettacolare.

  • Successivamente, se la compatibilità tra browser non è un problema, è possibile utilizzare l'API WebSocket in HTML 5. Consultare this guy's example su come creare una chat di abilitazione WebSocket HTML 5.

  • Infine, si rimane con il polling AJAX, il metodo normale o il polling lungo, in cui si blocca l'esecuzione dello script sul lato server fino a quando non sono disponibili alcuni dati. Vedi this link per ulteriori riferimenti.

+0

Inoltre, dai un'occhiata a come il protocollo NTP gestisce il ritardo della rete durante la sincronizzazione degli orologi - potresti voler implementare qualcosa di simile – Basic

4

Ecco un esempio di tenere video in sincronia con WebSockets e node.js: http://softwareas.com/video-sync-with-websocket-and-node

So che non si desidera utilizzare questa tecnologia, è solo un buon punto di partenza per mostrare ciò che puoi fare e come.

Dal momento che si desidera utilizzare PHP e mantenere le cose semplici, allora la soluzione migliore è quella di esternalizzare il livello di comunicazione in tempo reale (usato per tenere i video degli utenti in sincronia) a un servizio in hosting quali Pusher, per chi lavoro. Ciò significa che non è necessario mantenere la connessione persistente ed è possibile utilizzare Pusher per fornire eventi in tempo reale sugli stati video tra utenti/clienti.

Se si desidera utilizzare i video di YouTube e HTML5 non sarà sempre disponibile, sarà necessario utilizzare lo Player API. Non riesco a vedere un evento simile timeupdated (disponibile in video HTML5) quindi potrebbe essere necessario controllare periodicamente l'orario del video (vedere player status API section. È possibile registrarsi per eventi di modifica dello stato in modo da sapere quando un utente fa una pausa, arresta un video ecc.

@ commento di Rob-w fornisce qualche buona visione utilizzando l'API di YouTube

. Nota: Questo potrebbe effettivamente fare per un post davvero interessante quindi se siete interessati fatemelo sapere e vedrò quello che ho può fare.

0

Per me la soluzione ideale è utilizzare Vynch. Con questa tecnologia puoi incorporare nel tuo sito Web una stanza con video che puoi guardare sincronizzati. È possibile creare playlist e condividere con amici e utenti! c'è anche una chat per scambiare le tue impressioni.