PyroPeter's homepage (PyroPeters Heimseite)

IPv6 ready since 2010

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/