fseek() - stream does not support seeking - plik .flv

0

Przy użyciu funkcji fseek() podczas parsowania pliku .flv dostałem: "stream does not support seeking", co jest jednoznacznie częściowym rozwiązaniem mojego problemu dot. odtwarzania plików .flv od konkretnego momentu. Udało mi się ustalić, że ta funkcja nie potrafi dobrze współpracować z plikami typu .flv. Pytanie czym to zastąpić, żeby to działało jak trzeba?
Ma ktoś jakiś pomysł co z tym zrobić?

0

Dokumentacja podsuwa rozwiązanie.
"Not all streams support seeking. For those that do not support seeking, forward seeking from the current position is accomplished by reading and discarding data; other forms of seeking will fail."

0

Czy mógłbyś podać jakiś przykład takiego działania?

1
$bajty_do_pominiecia = 8579323; // to sobie jakoś tam obliczasz
$fp = fopen($link, 'r');
fread($fp, $bajty_do_pominiecia);

// i robisz dalej to co zawsze
0

U siebie mam tak, że w tablicy $_GET przesyłam wartość bajtów, od której chcę zacząć odtwarzać plik, przykładowo: video.php?start=5442345 i potem przetwarzam to tak:

$fd = fopen($url, "r");
if ( isset($_GET['start']) )
{
	fread($fd, round(intval($_GET['start'])-1)); // tutaj następuje pominięcie konkretnego fragmentu filmu
}


while(!feof($fd))
{
    echo fread($fd, 4096);
    ob_flush(); 
}

Jednak to nadal nie działa - film przy zmianie czasu odtwarzania zaczyna lecieć od początku. Co znów jest nie tak?

0
  1. Jesteś na 100% pewien, że ta zmienna leci do serwera, że ten konkretny kawałek kodu się wykonuje? Jeżeli tak - zmierz sobie jak długo wykonuje się to pominięcie. (powstawiaj sobie w kod coś do mierzenia czy dany fragment się wykonuje, a jeżeli tak, to w jakim czasie - zwykłe zapisywanie informacji "pomijam fragment" i czas z mikrosekundami do pliku np).

  2. A może problem jest z playerem po stronie klienta? Czy player nie oczekuje implementacji Range, Content-Range i Partial Offset?

0

Kod się wykonuje bo sorawdzalem ftell() i przy dodaniu $_GET['start'], widać, że to wszystko działa. Co do nagłówków to próbowałem na wiele sposobów i nic z tego... A fseek() działa tylko przy użyciu SEEK_CUR, inaczej zwraca problem ze streamem.

0

fseek nic by tu nie zmienił. Problem przewinięcia streamu już ogarnąłeś. Teraz problem stanowi komunikacja z playerem w odpowiednim formacie.

Edit: a jak mi nie wierzysz to sobie wytestuj na lokalnym pliku, gdzie fseek będzie działał

0

Chwilowa zmiana tematu:

Jak wiadomo - wszystko pobieram z zewnętrznego serwera. Pobierany plik jest wyświetlany jednocześnie jako film w odtwarzaczu flowplayer. Problem jest tego typu, że mój hostingodawca narzuca mi odgórnie pewne limity:

  • maksymalny czas wykonywania skryptu - MAX 450 sekund
  • i inne.

Finalnie film jest pobrany do ok. 15 minuty i potem się przerywa.
Czy jest możliwość zrobienia jakiegoś reloadu/odświeżenia skryptu po powiedzmy 3 minutach pracy. ale tak by flowplyaer nie zakończył buforowania filmu?

0

Zrobisz to i za niedługo przyjdziesz z problemem, że usługodawca
#narzuca Ci maksymalny transfer godzinny/dzienny/miesięczny
#maksymalną ilość wykonywanych skryptów na raz (o czym już pisałem w innym Twoim temacie)
#maksymalne obciążenie miesięczne/dzienne procesora
itd.

Więc zanim zmarnujesz kolejne godziny uświadomię Cię o dwóch rzeczach:

  1. PHP to nie jest odpowiednia technologia do robienia takich rzeczy - wysypie Ci się to, jak już powiedzmy, że zacznie działać tak, że komuś to pokażesz
  2. Kupowanie hostingów za 60zł rocznie to też nie jest odpowiedni serwer do takich wymagań

I rozwiązania:

  1. Python
  2. Serwer dedykowany/VPS/ew. DOBRE konto shellowe, np. na mydevil (które nie ma limitu transferu): reflink mam w stopce, polecam jak coś.
0

Mam w planach zakup takiego konta, gdzie transfer jest nielimitowany, to akurat nie podlega dyskusji i zdaję sobie z tego sprawę. Jeśli nielimitowany transfer nie wystarczy to wykupię dedyka/vps, ale żebym mógł to kupić (a tanie rzeczy to nie są) to muszę mieć pewnosć, że to wszystko ruszy z kopyta,a na razie nie bardzo chce.
Gdybym na własnym dedyku sam zarządzał tymi parametrami to zapewne wiele zasobów też uleciałoby bardzo szybko, dlatego chciałbym to ogólnie dopracować, tak abym później się na tym nie przejechał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1