MP3 Stream anbieten und Jitter simulieren
-
Hi,
ich will fü einen Test ein MP3 file von einem Server anbieten. Ein Client soll das File als Stream entgegennehmen. Idealerweise schickt der Client ein HTTP GET und fordert die Resource an und der Server schickt das File zurück. Hierzu brauch ich das File ja nur im Webserver im zugänglichen Verzeichnis ablegen.
Jetzt möchte ich aber einen Jitter simulieren oder eine langsame Netzwerkverbindung. Hierzu würde ich gerne wenn die Anfrage auf die Ressource kommt (die URL kann auch etwas anders aussehen (also muss nicht auf .mp3 enden)) die MP3 Datei von einem Skript einlesen und eben langsam als Stream senden. zB: 1kB senden 20ms warten, ...
Jetzt meine Frage:
- ist das möglich so einen "langsamen" Stream zu erzeugen oder wartet der Server erst bis HTTP Antwort komplett vorliegt und sendet dann?
- Wenn es möglich ist, wie ist es am einfachsten zu realisiseren? PHP, Servlets, , Perl...? Also ich bin relativ frei, sollte aber idealerweise in einer "Standardumgebung" laufen (also keine Exoten).Vielen Dank für Eure Tips!
hennes
-
Aaalso mit PHP sollte das am einfachsten gehen
<?php set_time_limit(0); // das es kein Timeout gibt header("....mime datatype.. .z.b. Wav"); // MimeType senden $fHandle = fopen("file.wav", "rb"); // Datei öffnen while (!feof($fHandle )) { echo fread($fHandle , 1024); // 1kb senden usleep ( 200 ); // Warten } fclose($fHandle); // Handle wieder schliessen ?>
also dieser code soll dir nur die theorie zeigen wie man sowas machen KÖNNTE... probiers einfach mal aus
-
Allerdings ist die erwünschte Übertragungsrate mit sleep() statt usleep() einfacher zu erreichen, da man nicht ständig zwischen Mikrosekunden, Sekunden und (Kilo)Bytes/Second umrechnen muss:
sleep(1) wartet eine Sekunde. Dazu in jeder Iteration 1024 Bytes gesendet ergibt eine Übertragungsrate von 1kB/s. 2048 Bytes = 2kB/s, 4096 Bytes = 4kB/s usw. usf.