Moin!
Ok, ich suche einfach theoretisch nach einer Möglichkeit einen Stream (z.B. via RTSP) über einen normalen Webserver zu verbreiten. Dazu ist es in vielen Fällen nötig einen anderen Header zu senden, emeb "RTSP/x" oder "ICY 200 OK" bei NSV-Streams.
RTSP ist mir noch bekannt aus meiner Studienzeit - bei NSV-Streams setze ich einfach mal voraus, dass sie im Grundsatz her ähnlich funktionieren.
Ich bin der Auffassung, dass deine Bemühungen, mit PHP unter HTTP-Apache ein RTSP zu emulieren, nicht funktionieren können - und zwar aus der grundsätzlichen Überlegung des RTSP-Protokolls heraus.
Wenn PHP mit dem Apachen läuft, hast zu zum einen das Problem der max_execution_time. Dein Skript läuft einfach nicht unendlich lange, wenngleich man diese Einschränkung, die lediglich zum Serverschutz gehört, natürlich auch umgehen bzw. abschalten kann.
Aber du mußt deiner Applikation dann immer noch schmackhaft machen, dass sie eine HTTP-Anfrage an den Webserver stellt - denn alles andere als HTTP wird der Apache als illegalen Request zurückweisen.
Im Prinzip brauchst du also einen Apachen, der kein HTTP, sondern RTSP spricht. So einen gibts aber noch nicht.
Du hast eine Chance mit PHP: Du kannst auch Kommandozeilenskripte in PHP schreiben. Diese Skripte können ihrerseits auch ein Socket öffnen und als Server agieren. Man kann sie sogar als Daemon in den Hintergrund schicken, damit sie dann passend und dauerhaft laufen. Und man kann sie forken, um einzelne Requests dann jeweils individuell abzuarbeiten, während der Mutterprozess auf neue Requests wartet.
Denn das zentrale Problem ist: RTSP schickt auf Befehl einen Stream nach draußen. Wenn man am Client aber nun "spult", also einen Teil überspringt oder zurückgeht, dann wird ein neuer RTSP-Request an DENSELBEN Serverprozess gesendet, welcher nun seinerseits in der Medienressource nach vorne oder hinten springen und dann ab dort weiterstreamen soll. Solch ein Verhalten ist aber absolut untypisch für das verbindungslose HTTP! HTTP sendet eine Ressouce komplett raus, und dann ist Schluß.
Das, was du also mit PHP unter Apache realisieren kannst, ist sowieso nur ein HTTP-Streaming. RTSP wirst du nicht realisieren können, weil es elementar andere Funktionalitäten erfordert, auf die Apache nicht eingestellt ist.
In der Praxis hab ich grad eine Lösung gefunden, da ich zumindest NSV-Streams auch als Dateien 'tarnen' kann. Winamp erkennt sie dann zwar nicht direkt als Streams, aber läd den Stream ohne Probleme.
Bei RealMedia oder WindowsMedia Streams hab ich da noch keine richtigen erfolge erzielt, und ausserdem interessiert es mich generell ob die Möglichkeit besteht den Header so zu verändern ;)
Wenn es dir nur darum geht, einfach mal einen Stream rauszuschicken: Es gibt von Real IIRC auch einen kostenlos einsetzbaren Streaming-Server für ganz wenige parallele Sendungen - bei Windows Media bin ich mir dabei sogar absolut sicher. Und auch Quicktime hat mit Darwin (wenn ich es richtig erinnere) einen Streamingserver im Angebot, welcher sogar irgendwie Open Source ist, zumindest aber keine teuren Lizenzen kosten. Und darüber hinaus gibts gerade auch für Winamp bzw. MP3-Streams diverse andere Lösungen (ICECAST etc.) für Linux verfügbar.
Wenn es dir darum geht, RTSP zu implementieren, dann mußt du dich wohl oder übel mal mit den Kommandozeilenfähigkeiten und Servermöglichkeiten von PHP vertraut machen. Dass sowas grundsätzlich geht, hat Andreas Korthaus schon für SELFHTML bewiesen, indem er einen PHP-Serverdaemon für die Community-Applikationen (die alle noch programmiert werden sollen) programmiert hat. Da PHP nicht gerade für ultimative Performance bekannt ist, wird das alles auch noch mal in C realisiert, aber der Prototyp agiert als vollwertiger, über TCP/IP ansprechbarer Server.
- Sven Rautenberg