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/