Een database updaten op een bepaalde tijd ( geen cron )
Ik zit met een kleine vraag.
Ik ben momenteel bezig met een nieuw projectje. Het word een project waar een soort live-stream is maar dan toch net wat anders.
Waar het op neer komt.
Ik heb een video die speelt, die moet bij iedereen starten op welk moment deze video is.
Ik kan gewoon de tijd in het aantal seconden neerzetten dus dit is geen probleem.
Nu moet ik eenmaal als de video afgelopen is een nieuwe pakken uit de database en hier weer de tijd op 0 zetten.
Iedereen die bijvoorbeeld op minuut 3 in komt tunen moet doorkrijgen dat de video op 180 seconden is.
Ook als deze afgelopen is moet bij iedereen de volgende video hetzelfde zijn.
Wat mijn idee was
Database:
ALLE VIDEOS: 4 RESULTS
id | videoURL | lengte
1 | url.. | 210
2 | url.. | 384
3 | url.. | 129
4 | url.. | 615
HUIDIGE VIDEO: 1 RESULT
id | videoURL | lengte | huidigetijd
3 | url.. | 129 | 32
PHP:
Pagina laad > Query > Huidige video
Nu zou ik dus in theorie de huidige video krijgen op de juiste tijd e.d.
De vraag is dus, wat als de video afgelopen is? Er moet een nieuwe komen in het HUIDIGE VIDEO tabel maar dit moet maar één maal gebeuren. Ik kan dus niet een php scriptje maken die dit doet aangezien elke gebruiker die aan het kijken is dus het aan zou vullen doordat iedereen het script runt.
Wat er moet gebeuren ( zoals ik het in gedachten heb ) is een global timer die het aantal seconden elke seconden upgrade en doorpushed naar de gebruiker. PHP die elke seconden kijkt of de video nog altijd aan het spelen is of deze dus de eindtijd bereikt heeft. Vervolgens als de eindtijd bereikt is gewoon opnieuw zijn results haalt uit de database wat de nieuwe is.
Kortom het spelen van de video's zelf gaat me denk ik wel lukken, maar het updaten naar een nieuwe video niet.
Ik kan natuurlijk een script maken die dit allemaal bijhoud en aanpast als een soort admin gedeelte maar dan zou dit script 24/7 open moeten staan in een browser en dat kan niet de bedoeling zijn.
Ik hoor graag mensen zijn ideeën hierover.
Cheers!
Gewijzigd op 26/08/2014 16:14:11 door Allard Keij
Is het belangrijk dat de video's worden afgewisseld als er niemand kijkt? En om hoeveel video's gaat het?
Het gaat hier over 1000de video's.
Ik heb het idee dat je bedoeld met het wisselen dat je een soort van host aan wil geven? Hier heb ik ook even over zitten denken maar gebruikers hoeven niet persé in te loggen oftewel hoeven geen account te hebben waardoor geen info in de database beschikbaar is over de huidige bezoeker.
Ondanks dat is het altijd maar 1 video die eruit gehaald word.
Video's zijn in dit verhaal eigenlijk niet eens belangrijk, het gaat puur om het feit dat iedereen dezelfde info moet krijgen op welk moment ze dan ook de website bezoeken.
Dit is voornamelijk alleen een url ( url naar de video ) en een getal ( het aantal seconden de video momenteel is ).
Gewijzigd op 26/08/2014 16:41:00 door Allard Keij
Quote:
oftewel hoeven geen account te hebben waardoor geen info in de database beschikbaar is over de huidige bezoeker.
Als ik begrijp wat je hier zegt, is dat je geen gegevens hebt van de huidige gebruiker. Maar die heb je in principe wel, een IP Adres, UserAGENT, maar wat je ook kunt doen is een Cookie aanmaken.
Kan je van de video returnen, welke een bezoeker bekijkt, op hoeveel seconde deze is? Dan kan je namelijk een ajax request verzenden welke het aantal seconden veranderd in het aantal seconden te gaan. Iedereen bekijkt de video op hetzelfde moment, dus dat zou dan geen probleem moeten zijn.
Ik snap niet helemaal wat je bedoeld. Is dit het idee van een "host"?
Het proces moet eigenlijk blijven lopen nadat het gestart is.
Één maal word de gehele website gestart. Een video word in de huidigeVideo tabel gegooid en dit word nu uitgelezen als een persoon de website opent. Hier in staat dus de url naar de video zodat deze hier staat, het aantal seconden het nummer duurt. En het aantal seconden de video huidig is.
Wat eigenlijk elke seconde moet gebeuren is:
huidigeTijd + 1. Meer dan dat hoeft het eigenlijk niet te zijn.
Dan moet de server nog doen:
if huidigeTijd = videoLengte : Nieuwe video.
Dit zou makkelijk te doen zijn als dit voor elke persoon apart gedaan zou worden. Dan kun je in het script zelf gewoon elke seconden de database laten updaten.
Omdat er meerdere gebruikers van hetzelfde script gebruik maken is dit niet mogelijk. Dan zou er namelijk dit gebeuren:
ELKE BEZOEKER ELKE SECONDEN: huidigeTijd + 1.
Dan zou dus bij 10 bezoekers elke seconde huidigeTijd + 10 krijgen.
Als je nu gewoon opslaat wanneer de video start (het tijdstip incl datum)?
Dit zou de server moeten doen maar niet een persoon die de website bezoekt. Dat is het probleem.
De video moet op precies de juiste seconden ( mag best enkele seconden afwijken ) starten voor iedereen wanneer ze ook besluiten de website te bezoeken.
In mijn ogen is de enige manier om dit te doen een database te laten regelen hoe ver de video is en dit door te geven aan de bezoeker.
Dit moet dan wel in de database bijgehouden worden. Elke seconden moet de tijd juist gezet worden. Dit kan niet geregeld worden door 1 persoon.
Zoals het klokje op de server tikt .....
Nu is mijn vraag hoe ik dus de server dit kan laten updaten elke seconden.
Ik kan dit niet door een cron doen maar hoe dan wel?
Vervolgens komt een gebruiker de website bezoeken op een bepaalde tijd. je zou dan uit de database moeten halen welke video er op dat moment speelt. dat is niet zo moeilijk overigens. daarna moet je enkel nog bepalen hoeveel de gebruiker achterloopt op de starttijd van de video. daar heb je dan de servertijd voor zoals Ger al zei. peace of cake?
Toevoeging op 26/08/2014 18:51:39:
dan punt twee: zou ik kiezen voor een lifestream. dat is veel minder belastend voor je server. als immers toch iedereen dezelfde beelden moet krijgen op hetzelfde moment waarom dan niet
>> Dit moet dan wel in de database bijgehouden worden. Elke seconden moet de tijd juist gezet worden. Dit kan niet geregeld worden door 1 persoon.
Je registreert gewoon dat de video om bijvoorbeeld 12:34 uur is gestart. Als iemand daarna om 13:45 uur langskomt, staat de timer van die video dus op 13:45 - 12:34. Dat reken je ter plekke en "on the fly" of "on demand" uit, want je hoeft daarvoor alleen de starttijd op te slaan.
Ik snap beide bedoelingen.
Maar het gaat mij echt over het punt van omschakelen.
Plus het feit is dat de video's random geselecteerd moeten worden en niet voorgeprogrammeerd op tijd.
Het klopt inderdaad dat ik netjes de tijd e.d. kan berekenen maar het gaat mij echt om het punt wat als de video is afgelopen? Dan stopt het. Ik wil juist dat op dat moment een nieuwe video erin gezet word.
De video is dus afgelopen en dan moet er een script actief worden die de nieuwe video erin schrijft.
Belasting voor de server is er niet. Ik ben namelijk een script aan het maken wat youtube video's afspeeld.
Dat is ook het gehele idee om een soort livestream te creëren uit random filmpjes. Ik gebruik gewoon de iframes van Youtube zelf waar ik al deze opties, zoals de seconde van start, door kan geven. Op deze manier wil ik dus dat iedereen hetzelfde youtube filmpje voor zijn neus krijgt (url) maar wel op dezelfde tijd kan kijken en je dus inderdaad zoals het TV idee een deel mist mocht je later binnenkomen.
Wat dus mogelijk is zou een script zijn die standaard video's draait op de TV methode, maar dan zelf elke keer een nieuwe video erin gooit op de tijd dat het vorige filmpje afgelopen is. Zonder dat het voorgeprogrammeerd word.
Welk onderdeel van de vergelijking starttijd + speelduur = eindtijd begrijp je niet?
Volgensmij leg ik het totaal verkeerd uit of ik zit in een complete braincrash.
Doe de:
starttijd + speelduur = eindtijd ( NIEUWE VIDEO ).
Hoe plaats ik die nieuwe video. Wie doet dat voor me? De server? Dan moet die wel aanwijzingen krijgen. Maar hoe?
Je zult dan toch aan cronjobs oid moeten denken.
Die starttijd sla je ergens op. Aansluitend kun je aan de hand van de speelduur van alle video's in de afspeellijst uitrekenen waar je op elk moment in een van de video's bent beland. Heb je bijvoorbeeld (vereenvoudigd) twee video's van een uur, dan ben je anderhalf uur na de eerste start dus precies halverwege de tweede video.
Gebruiker komt kijken: voer in de database de exacte starttijd in seconden in.
Zodra de gebruiker over gaat naar filmpje 2 kun je weer een exacte starttijd invoeren.
Zodra er nu een gebruiker online komt kun je dus het filmpje openen vanaf TIJD_NU - EXACTE_STARTTIJD.
Heb uiteindelijk gewoon een broadcast systeem gekocht waar ik een compleet DJ panel bij kreeg om alles te kunnen regelen.
Toch allemaal bedankt voor de hulp!