[PHP] Live ftp downloads 'streamen'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry voor de niet helemaal toereikende topic titel.

Ik draai hier lokaal een xampp server, eerder om te testen maar nu ben ik bezig een applicatie te schrijven om een soort van shared folder te hebben met wat vrienden. Ik weet dat hier genoeg dingen voor zijn om zo te gebruiken maar ik wil het graag zelf schrijven zodat ik er ook nog wat van leer.

De opzet is zo:

D(zy) draait xampp met de applicatie.
A, B en C draaien een FTP server met een root account zodat mijn applicatie overal bij kan.
A, B, C en D kunnen bestanden toevoegen via de webinterface, deze info wordt opgeslagen in een mysql db. Dus wie hem heeft toegevoegd (en dus op welke FTP server deze te vinden is) en op welk pad.
A, B, C en D kunnen via een mooie pagina alle bestanden zien die zijn toegevoegd (en online zijn) bekijken en downloaden.

Mocht het bestand van D komen wordt die direct doorgestuurd door php, geen probleem.
Mocht het bestand van A, B of C komen dan download php dit bestand eerst via de ftp en stuurt deze dan door.

Het eerste probleem is: als A iets van B of C wil downloaden gaat dit dubbel. Eerst download php het bestand van B of C en als dat klaar is stuurt hij hem door naar A. Omdat het voornamelijk om livesets gaat (tussen de 50 en 200 mb) zorgt dit voor een aanzienlijke vertraging.

Dus ging ik eens op zoek naar een manier om het live te 'streamen'. Hier kom ik niet echt uit. Dingen die ik in ieder geval nodig heb zijn ftp-nb-fget zodat het script gewoon doorgaat terwijl de file aan het downloaden is en de tweede is natuurlijk ob_flush. Hoe pak ik het vanaf daar verder aan? Ik kom er niet goed uit...

Welke functies moet ik nog meer gebruiken? Hoe kan ik die file waar hij het naar toe streamt telkens alleen het nieuwe gedeelte van doorsturen naar de client?

Het tweede probleem komt pas om de hoek kijken als het eerste probleem is gefixt, dus eerst dit maar eens. :+

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Kunnen jullie niet beter gewoon een private torrent trackertje opzetten ipv hier tegenin te programmeren? :P Dit soort concurrency problemen is eigenlijk überhaupt niet bedoel om af te handelen via een single-threaded iets als PHP (wat gebeurt er als er 2 mensen tegelijk gaan proberen te streamen van B ??)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je hebt wel een beetje gelijk, maar toch zou ik het graag zo willen proberen. Waarschijnlijk dan niet voor echt gebruik want je haalt wel een goed punt aan, maar meer voor het leren, want het is wel leerzaam dit projectje. Ik kan in je scenario wel een FTP server (gebruiker) dus tijdelijk locken in de database zodat je een melding krijgt van "Deze is even bezig met een andere file dan die jij request, je moet nog 20 minuten wachten". Enig idee hoe?

Acties:
  • 0 Henk 'm!

  • vrieske
  • Registratie: Juli 2004
  • Laatst online: 17-09 17:25
Ik begrijp dat je dus 1 'downloadserver' hebt waar alles wat aangevraagd wordt op komt te staan.
Je kan een directory/bestand die nog bezig is te downloaden al prima af laten spelen door de gangbare mediaplayers zoals winamp.

Hier treedt dan eigenlijk heel weinig vertraging op omdat je zodra er een start is gemaakt met het downloaden ook direct kan luisteren (ook al is het bestand nog niet compleet).

[ Voor 59% gewijzigd door vrieske op 03-05-2021 09:25 ]