Videó streamelés php-val, miért foglalja le a szervert?

Videó streamelés php-val, miért foglalja le a szervert?
2022-01-06T11:26:52+01:00
2022-01-06T12:26:55+01:00
2022-10-15T21:20:42+02:00
edgezone
Sziasztok!

A következő hiábába futottam bele és nem látom, hogy mi lehet a hiba, és szükségem lenne egy kis segítségre !

Adott egy projekt, amivel különböző videókat és kurzusokat lehet megvásárolni. A videó a /public_html mappán kívül, tehát a root directoryn kívül vannak egy másik mappában, hogy ne lehessen direkt elérni.

Ezért a php-val, ha hitelesített a felhasználó, és már megvásárolta a videót, akkor visszaadom azt (.mp4 vagy .webm formátumúak, ~20-30 percesek).


PHP
Teljesen egyszerű logika, lekéri a terméket, megnézi hogy publikus e, ha igen akkor meghívja a VideoStream osztályt

/** * @Route("/products/{id}", name="products") */ public function index(int $id, UserInterface $userInterface = null, Request $request) { /*...*/ if ($product = $this->getDoctrine()->getRepository(Db_Products::class)->find($id)) { if ($product->getPublic()) { $file = $this->getParameter("kernel.project_dir") . "/products/" . $product->getPath() . "/" . $product->getFile(); return (new VideoStream($file))->start(); } } /*...*/ }



HTML
Szintén egyszerű html, javascript használata nélkül (nem használok js-t). Meghívja a fenti php függvényt.

<video> <source src="/products/{{product.id}}" type="video/webm" /> <source src="/products/{{product.id}}" type="video/mp4" /> <div fallback> <p>This browser does not support the video element.</p> </div> </video>
A VideoStream osztály
PHP VideoStream class for HTML5 video streaming

A következő a hiba: ahogy rákattintok a htmlen, hogy lejátsza a videót.. az összes szálat/kérést pendingnek - függőben lévőnek jelöli a böngésző.

Addig nincs válasz a szerverről, még az adott videó a háttérben teljesen be nem tölt. Tehát teljesen lefoglalja az egész folyamatlistát vagy szervert, nem lehet elnavigálni, js-el requestet küldeni, semmit. Ha be/letölt a videó akkor utána tovább lehet menni és a requestek is elkezdenek futni.. de addig nem.

Mivel lehetne a hibát kiküszöbölni? Mi okozhatja?

Köszönöm előre is a segítségetek!
Mutasd a teljes hozzászólást!
Csatolt állomány
Csak tipp: lehet, hogy session locking problémád van.

Ha jól emlékszem, akkor régebben ezen úgy mókoltam, hogy a még a readfile (gondolom a végén valami hasonlót csinál a VideoStream class) előtt lezártam a sessiont.

Úgy tudom, hogy az újabb PHP verziókban (talán 7+) a session_start paraméterezhető úgy, hogy olvasás után egyből zárja is... így elméletileg nem lesz ilyen lock.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd