środa, 11 lipca 2007

Shoutcast w Flex 2

Piotr Majewski twórca serwisu Czas na e-Biznes napisał prośbę o napisanie odtwarzacza Shoutcast na stronę internetową. Pomyślałem że warto spróbować.

Wziąłem kod aplikacji Audio Visualisation Bena Stucki`ego. Lokalnie uruchomiłem serwer Apache i dodałem plik stream.php z następującym kodem

$streamname = "91.121.68.159";
$port = "8435";
$path = "/";

header("Content-type: audio/mpeg");
$sock = fsockopen($streamname,$port);

fputs($sock, "GET $path HTTP/1.0\r\n");
fputs($sock, "Host: $streamname\r\n");
fputs($sock, "User-Agent: WinampMPEG/2.8\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "Icy-MetaData:1\r\n");
fputs($sock, "Connection: close\r\n\r\n");
fpassthru($sock);
fclose($sock);


Zauważyłem że kod działa, ale co jakiś czas przerywało i cisza trwała przez 2 sek.

Kod AS3 jaki dodałem to:

var request:URLRequest = new URLRequest("http://83.11.127.222/stream/stream.php");
var buffer:SoundLoaderContext = new SoundLoaderContext(50*1000, true);
var mySound:Sound = new Sound(request, buffer);
mySound.play(0,0);

Wychodzi na to, że chyba trzeba jakoś to buforować co jakiś czas np: co 2 sek i pilnować czasu odtwarzania, ale czy to ma sens w przypadku technologii Shoutcast?

Myślałem o wykorzystaniu klasy URLStream, ale chyba to nie nadaje się obsługi klasy Sound. Czy są jakieś uwagi?

1 komentarz:

Tomek pisze...

Czesc, doradzalbym mimo wszystko nie puszczanie tego przez PHP zbyt duzy podwojny transfer niepotrzebnie po stronie serwera. Lepiej chyba bezposrednio sie w stream wpiac, powinno dzialac analogicznie a moze wyeliminowac Ci te 2 sekundowy przerwy. Ewentualnie jezeli przez brak crossdomain.xml nie bedzie dzialac zrobic to na zasadzie bramki redirectowej w php czyli mniej wiecej:
< ?
header("Location: http://xxx.xxx.xxx.xxx:yyy/;stream.nsv");
? >

Ja mam z kolei inne pytanie czy zauwazyles przy powyzszym kodzie cos typu memory leak czyli zbyt dlugie odtwarzanie powoduje znaczny skok zasobow, co moze prowadzic do zablokowania dzwieku w ogole?