Diskuze: Synchronizace času videa pro každého užvatele stejně

PHP PHP Synchronizace času videa pro každého užvatele stejně American English version English version

Avatar
j.dvorak1997
Člen
Avatar
j.dvorak1997:

Ahoj,
Potřeboval bych poradit s možná takovou stupidní věcí, ale mě to prostě nedá spát a né a né přijít na nějaké solidní a chytré řešení, které by nezatěžovalo prohlížeč a nezahltilo uživatele počtem refreshů za sekundu...

Řekněme, že v php do inputu vložím video z youtube, které začne hrát v určitý čas, 18:45 řekněme a začne hrát globálně, tedy pro všechny uživatele, kteří jsou online na webu, ale tak že bude mít u každého uživatele stejný čas a následně, když se někdo připojí, tak aby mu naskočil úplně ten stejný čas jako všem ostatním - ano chápu nějaká prodleva tam vždycky bude...

Zkoušel jsem při začátku přehrání videa uložit server time přes php a pak při připojení uživatele zjistit jeho místní čas, ale to nešlo kvůli časovým pásmům, tak jsem to tedy zkusil tak, že jsem při připojení uživatele vyžádal znovu server time a porovnal počáteční server time s aktuálním a vypočítal rozdíl a podle toho nastavil čas videa, ale problém byl v tom, že to v každém browseru vyhodilo úplně jiný výsledek, což nechápu - je to server time a né client time, tak proč je tam teda rozdíl?

Dále jsem zkusil udělat 2 různé soubory obsahující část js kódu a php kódu, které se vzájemně refreshovaly každou vteřinu 5x a zjišťovaly aktuální čas videa, ale toto řešení moc zatěžovalo prohlížeč a způsobovalo poklesy snímků za sekundu na uživatelově straně.

Takže se tedy obracím na Vás s úplně zničenou hlavou přemýšlením nad nějakým chytrým řešením s kloudným výsledkem.

  • Jak by se dal synchronizovat čas videa z youtube pro všechny uživatele stejně, také pro ty kteří se připojí na web v průběhu přehrávání videa?
 
Odpovědět 8.10.2015 20:35
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

Zkusil bych použít nějaký NTP server (je jich dostupná celá řada, jen nevim jak se s tim dá pracovat v PHP). Při začátku přehrávání zjisti čas od NTP serveru a ten ulož. Pak při každym dalšim člověku by se po načtení stránky aktivoval nějaký JS, který by (třeba jednou za pár sekund, aby to fungovalo i při pozastavení atd) zjistil čas od NTP serveru a podle toho nastavil video.
Pokud si to dobře pamatuju, tak NTP řeší všechny problémy jako spoždění na pomalém připojení atd. Takže dostaneš stejný čas, ať už se připojíš z jakéhokolliv počítače, prohlížeče nebo konce světa.

Nahoru Odpovědět 8.10.2015 20:48
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
Numero
Redaktor
Avatar
Numero:

Co pomocí unix time? Prostě počítat kolik uběhlo vteřin od toho, co si to tam dal? Prostě počítat kolik vteřin uběhlo od doby co si to přidal...

Nahoru Odpovědět 9.10.2015 10:25
Co si člověk neudělá sám to nemá...
Avatar
Adam Šárek
Člen
Avatar
Adam Šárek:

Pokud vím, tak čas v javascriptu vždy určuje počítač ze kterého se uživatel připojuje, což znamená, že nikdy nemůže mít ani stejný unix time...
Unix time jsem na svém webu již zkoušel, avšak výsledek byl u mě i u mého kolegy j.dvorak1997 rozdílný.

Jediná možnost by mohla být, že by se unix time získal z PHP na začátku načtení webu a poté by se přičítal čas pomocí javascriptu. Jenže těžko říct, jestli je tato metoda přesná...

  • Řeší to však problém opětovného načítání souborů z webu
 
Nahoru Odpovědět 9.10.2015 14:17
Avatar
Numero
Redaktor
Avatar
Odpovídá na Adam Šárek
Numero:

Ale unix time se na serveru nemění ne? Tak co kdyžby si PHP zapamatovalo třeba do DB v kolik byl čas, když se to video nahrálo a pustilo?

A pak kdyžby někdo přišel tak by se to ptalo toho serveru v kolik to bylo, ten by to vrátil dopočítalo se to a to video spustilo?

  1. Video se nahraje a spustí (čas - proměnná 1)
  2. Přijde uživatel a pustí si video (čas - proměnná 2)
  3. Server si spočte proměnná 2 - proměnná 1 a vznikne mu (počet sekund - proměnná 3)
  4. A pustí tomu uživateli video v čase, který je uložen v proměnné 3

Vůbec by se nemuselo pracovat s časem co má uživatel u sebe ne?

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 9.10.2015 14:52
Co si člověk neudělá sám to nemá...
Avatar
Adam Šárek
Člen
Avatar
Odpovídá na Numero
Adam Šárek:

Máš pravdu, že po dobu jednoho videa se takto s časem pracovat dá, jenže problém je v tom, že jakmile jedno video skončí tak to musí ihned nahrát další video.
Je ale pravda, že pokud by se další video nahrávalo až po skončení předešlého, tak by vlastně nebylo potřeba sdílet žádná data během přehrávání videa a tím tedy zamezit sníženému FPS.

  • Zkusím tuto metodu a dám vědět.
 
Nahoru Odpovědět 9.10.2015 15:10
Avatar
Numero
Redaktor
Avatar
Odpovídá na Adam Šárek
Numero:

A co když tam nebude video nahodit hlášku, že právě není pouštěno žádné video / streamováno. Tak to zní asi lépe :) jako tam de o to získat jenom ten čas toho kde jsou "ostatní" ne? Tak to by stačilo pomocí toho PHP přístupu na stránku a pak tam dát js prvek (tlačítko) , který udělá třeba reload stránky a nebo jenom přepočítá, jestli je dobře a když né tak ho pustí správně

Nahoru Odpovědět 9.10.2015 15:23
Co si člověk neudělá sám to nemá...
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na j.dvorak1997
Honza Bittner:

Hledej to pod pojmem stream, není to obyčejné přehrávání videa. :)

Nahoru Odpovědět 9.10.2015 15:26
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Adam Šárek
Člen
Avatar
Odpovídá na Numero
Adam Šárek:

Právě tuto metodu jsem měl na mysli a přesně s tou se mi to taky povedlo, takže díky za pomoc :)

 
Nahoru Odpovědět 9.10.2015 15:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.