blog/Darwin_Streaming_Server.txt
oooooooooo. o8o `888' `Y8b `"' 888 888 .oooo. oooo d8b oooo oooo ooo oooo ooo. .oo. 888 888 `P )88b `888""8P `88. `88. .8' `888 `888P"Y88b 888 888 .oP"888 888 `88..]88..8' 888 888 888 888 d88' d8( 888 888 `888'`888' 888 888 888 o888bood8P' `Y888""8o d888b `8' `8' o888o o888o o888o ________________________________________________________________________________ Apples QuickTime Streaming Server (QTSS) wird nur für MacOSX angeboten und streamt H.264/MPEG-4, 3GPP und mp3 per RTSP. Weiterhin gibt es ein Tool namens QuickTime Broadcaster, das es erlaubt, per QTSS Livestreams anzubieten. Das wäre gänzlich uninteressant, hätte Apple nicht den Kern des QTSS als OSS veröffentlicht. Der Darwin Streaming Server (DSS) wurde von externen Entwicklern auf Linux, FreeBSD, Solaris, Tru64, MaxOSX 9 und Windows portiert und wird unter anderem von Akamai und Youtube-für-Smartphones verwendet. Ich werde den DSS nun also testen, und die Ergebnisse hier dokumentieren. ================================================================================ === Installation (auf nem Archlinux) =========================================== 1. darwin-streaming-server aus dem AUR installieren. (Erstellt einen neuen User namens "qtss".) 2. Einen Admin-Account einrichten: # qtpasswd admin # qtpasswd -A admin admin 3. DSS starten: # /etc/rc.d/dss start # /etc/rc.d/dss-admin start ================================================================================ === Setup ====================================================================== Darwin lässt sich über ein grafisch sehr anspruchvolles Web-Interface konfigurieren. Man erreicht dieses unter der URL http://localhost:1220/ Beim ersten Aufruf startet ein Setup-Dialog. (Erläuterungen dazu gibts bei [05]) ================================================================================ === Streamen von statischen Inhalten =========================================== Grundsätzlich arbeitet Darwin ähnlich wie ein Webserver: Er bietet alle Dateien an, die in einem bestimmten Verzeichnis liegen. Per Default ist dies /var/streaming/movies Dort liegen schon einige Beispieldateien in verschiedenen Formaten und Bitraten. sample_100kbit.mov sample_300kbit.mp4 sample_h264_1mbit.mp4 sample_100kbit.mp4 sample_50kbit.3gp sample_h264_300kbit.mp4 sample_300kbit.mov sample_h264_100kbit.mp4 sample.mp3 Erster Test: $ mplayer rtsp://localhost/sample_100kbit.mp4 Allerdings war es mir in Tests mit mplayer und vlc nur möglich, die MPEG-4 Dateien zu streamen, bei den anderen lieferte der Server ein RTSP/1.0 415 Unsupported Media Type ================================================================================ === Konvertieren von Filmen in ein kompatibles Format ========================== === Konvertieren eines Videos von Format X zu h.264 (TODO) auch: siehe [06] === Hinzufügen des "hint" zu bestehendem MPEG-4 Dafür wird das Tool MP4Box aus dem gpac-projekt benötigt. $ MP4Box -hint ritt_der_valkueren.mp4 (TODO: Dieses Tool kann MPEG-4-files auch optimieren) ================================================================================ === Streamen durch ein NAT ===================================================== Genau ist dies unter [05] erläutert. Im Moment sind bei mir folgende Portranges offen: TCP 554 TCP 6970 - 7077 UDP 6970 - 7077 UDP 10000 - 65500 ================================================================================ === Live-Streams =============================================================== Das live-streaming per Darwin funktioniert folgendermaßen: Ein Tool X schickt einen MPEG-4-Stream per rtp an den host, auf dem Darwin läuft. Weiterhin wird eine SDP-Datei in /var/streaming/movies abgelegt, die Darwin mit den Informationen versorgt, die nötig sind, um den Stream zu empfangen und weiter zu streamen. Das Problem dabei liegt dabei in der Suche nach einem unter Linux lauffähigen Tool X. === vlc $ cvlc -vv v4l2://:width=320:height=240 --sout '#transcode{venc=ffmpeg{keyint=1},vcodec=mp4v,vb=300k,fps=25}:rtp{dst=127.0.0.1,port-video=20002,ttl=127,name=pptest,sdp=file:///var/streaming/movies/pptest.sdp}' VLCs Zusammenspiel mit Darwin lässt wenige Wünsche offen. Leider ist vlc selbst _dermaßen_ _schlecht_, dass es mir die Haare zu Berge stehen lässt. Eventuell kann man vlc mit viel Probiererei dazu bewegen, einen ffmpeg-Stream an Darwin weiterzuleiten. === mpeg4ip / mp4live MPEG4IP war früher wohl mal das Vorzeige-Tool, wurde aber seit 2007 nicht mehr weiterentwickelt. Ich habe es noch nicht getestet. === Andere? Ich habe bis jetzt keine andere Möglichkeit gefunden, Darwin Live-Streams unterzuschieben. Eventuell ist ffmpeg geeignet. (Es generiert bereits SDP-Daten, die man allerdings von Hand in eine Datei kopieren muss) ================================================================================ === Quellen/Verweise =========================================================== 01. QTSS: DE: http://de.wikipedia.org/wiki/QuickTime_Streaming_Server EN: http://en.wikipedia.org/wiki/QuickTime_Streaming_Server 02. H.264: http://en.wikipedia.org/wiki/H.264 03. 3GPP/3GP: http://en.wikipedia.org/wiki/3GP 04. QuickTime Broadcaster: http://en.wikipedia.org/wiki/QuickTime_Broadcaster 05. Soundscreen (umfangreiche HowTo Sammlung zu DSS und QTSS): http://soundscreen.com/streaming/ Setup: http://soundscreen.com/streaming/server_setup.html 06. list:ffmpeg-user: "ffmpeg and Darwin Stream Server 3gp" http://lists.mplayerhq.hu/pipermail/ffmpeg-user/2006-December/005942.html 07. SDP http://en.wikipedia.org/wiki/Session_Description_Protocol 08. MPEG4IP http://www.mpeg4ip.net/