echtzeit Audio-Streaming
Audio im MP3-Format in Echtzeit erzeugen und das ganze dann noch an einen
Icecast-Server schicken, klingt recht gewagt.In Verbindung mit einer TV-Karte eröffnen sich ungeahnte Möglichkeiten...
In einem früheren Artikel hatten wir bereits gezeigt, wie man mittels einer
TV-Karte das aktuelle Fernsehbild übers Netz verschicken kann, so daß man
von überall mittels eines Web-Browsers das TV-Programm sehen kann.
Leider hatte diese Lösung einen nicht zu unterschätzenden Nachteil:
Man hatte keinen Ton, sondern nur das Bild.
Bei Verwendung einer Webcam mag ja häufig das Bild ausreichend sein, aber beim
TV-Programm benötigt man schon den Ton.
So ließ es mir keine Ruhe, schließlich sollte es mit Icecast doch funktionieren,
Echtzeit-Audio-Streaming bereitzustellen.
Echtzeit-Streaming
Um Sound im Netz in Echtzeit zu streamen (und das im MP3-Format), benötigt man zumindest einen Icecast-Server. Die Installation dieses Servers finden Sie im Artikel "Eigene Radiostation: Icecast".
Will man nun den Ton in Echtzeit verschicken und nicht nur eine Reihe an bereits
encodierten MP3-Dateien, benötigt man noch einen schnellen MP3-Encoder (empfehlenswert
ist hier z.B. Lame) und das Programm LiveIce, welches zwar Bestandteil des
Icecast-Paketes ist, von dem man sich aber unbedingt eine aktuelle Version von der
Homepage
http://star.arm.ac.uk/~spm/software/liveice.html
holen sollte.

LiveIce liest nun den Line-In-Eingang der Soundkarte aus und schickt diese Daten an
Lame, welches wiederum die Daten in Echtzeit ins MP3-Format umwandelt.
Die encodierten Daten werden daraufhin von LiveIce an den Icecast-Server geschickt.
Nebenbei wird das TV-Programm mittels bttvgrab ausgelesen und an den Web-Server geschickt
(siehe auch Webcam ohne Webcam).
Das schöne ist nun, daß zur Last-Verteilung alle Dienste auf verschiedenen Rechnern
erledigt werden können, so daß Icecast-, MP3-Encoder-, Video und Web-Server jeweils ideal
für Ihre Ausgaben ausgerüstet werden können (Netzandbindung, Firewall-Regeln, CPU ...),
ohne daß sich die einzelnen Dienste in die Quere kommen können.

Solange man aber nicht professionell mehrere tausend Personen mit Video/Audio beliefern will, sondern nur einige Rechner im lokalen Netz, ist diese Arbeit durchaus von einem einzigen mittelmäßig ausgerüstetem PC zu bewerkstelligen. (D.h. ein einzelner Rechner mit TV- und Soundkarte, installiertem Webserver und Icecast-Server)
Installation
Die Installation von LiveIce verläuft recht unspektakulär. Bevor man aber LiveIce selbst
installiert, sollte man zuerst einen MP3-Encoder installieren. Am besten eigent sich
für eine gute Zusammenarbeit zwischen LiveIce und Encoder das Programm Lame.
Diesen Encoder erhält man unter der Web-Seite http://www.sulaco.org/mp3/.
Nach dem Entpacken:
>> tar zxvf lame3.87beta.tar.gz -C /tmpwird das Paket kompiliert und installiert:
>> cd /tmp/lame3.87/ >> ./configure >> make >> make installÄhnlich vorgegangen wird nun auch mit LiveIce (herunterladen von http://star.arm.ac.uk/~spm/software/liveice.html)
>> tar zxvf liveice.tar.gz -C /tmp >> cd /tmp/liveice >> ./configure >> make >> make installund kopieren das Paket (als root) nach /usr/local
>> cp -a /tmp/liveice /usr/localDie Konfiguration von liveice erfolgt über ein Frontend. Die Konfigurationsdatei wird im selben Verzeichnis abgelegt, wo man sich gerade befindet, also wechseln wir nach /usr/local/liveice
>> cd /usr/local/liveice >> ./liveiceconfigure.tkund machen folgende Einstellungen:

- Unter Server muß der Rechner angegeben werden, auf dem der Icecast-Server läuft und an den der Liveton weitergeleitet werden soll. Falls dies derselbe Rechner ist, auf dem auch der Encoder läuft, reicht ein localhost.
- Hinter dem Server muß der Port eingetragen werden, unter dem Icecast gestartet wurde.
- Hinter Password wird das Paßwort eingetragen, mit dem der Icecast-Server geschützt wird.
- PCM Audio Format sollte auf 32000Hz gestellt werden.
- Soundcard muß unbedingt auf enabled gestellt werden. Unterstützt Ihre Karte auch Full-Duplex (gleichzeitiges Aufnehmen und Abspielen), wählen Sie auch diese Option aus.
- Als Encoder wählt man LAME3 mit einer Bitrate von 32000
- Wählen Sie Soundcard only.
- Im Feld Executables - Encoder geben Sie lame ein
Starten Sie als nächstes den Icecast-Server (falls er nicht schon laufen sollte) in einem weiteren Terminal mittels
>> icecastSie erhalten folgende Ausgabe:
| Ausgabe: Icecast |
Icecast Version 1.3.0 Starting...
Icecast comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of Icecast under the terms of the
GNU General Public License.
For more information about these matters, see the file named COPYING.
[21/Oct/2000:00:47:33] Icecast Version 1.3.0 Starting..
[21/Oct/2000:00:47:33] Using stdin as icecast operator console
[21/Oct/2000:00:47:33] Tailing file to icecast operator console
[21/Oct/2000:00:47:33] Server started...
[21/Oct/2000:00:47:33] Listening on port 8010...
[21/Oct/2000:00:47:33] Using [ronny.ziegler.de] as servername...
[21/Oct/2000:00:47:33] Max values: 20 clients, 10 clients per
source, 10 sources, 5 admins
-> [21/Oct/2000:00:47:34] [Bandwidth: 0.000000MB/s] [Sources: 0]
[Clients: 0] [Admins: 1] [Uptime: 1 seconds]
->
|
Icecast wartet nun auf einen Client, der ihm die zu verschickenden Daten sendet.
Nun starten wir LiveIce mit
>> ./liveiceund sollten dafür folgende Ausgabe erhalten
| Ausgabe: liveice |
playlist 0 Initialising Soundcard 16Bit 32000Hz Stereo opening connection to 192.168.1.13 8010 Attempting to Contact Server connection successful: forking process opening pipe!... writing password Setting up Interface Soundcard Reopened For Encoding Input Format: 16Bit 32000Hz Stereo Output Format: 32000 Bps Mpeg Audio IceCast Server: 192.168.1.13:8010 Mountpoint: liveice Name: LiveIce Radio Genre: Live Url: http://www.linuxnetmag.de Description: LiveIce Press '+' to Finish Lvl: L: 5 R: 4 |
Die Daten von Liveice werden nun an den Icecast-Server geleitet, was wir daran erkennen, daß Icecast folgende Ausgabe anbietet:
-> [21/Oct/2000:00:51:58] Accepted encoder on mountpoint /icy_0 from jpsi.ziegler.de. 1 sources connected ->
Quelle wählen
Mittels eines Mixers (kmix oder auch gmix) kann man nun bei seiner Soundkarte (soweit sie denn Full-Duplex unterstützt) die Aufnahmequelle auswählen:

(SB Live! value - Karte)
In der untersten Zeile kann man nun den jeweiligen Rec.-Knopf drücken um die jeweilige Quelle (CD, Line-In oder Mikrofon) auszuwählen.
Um nun den Ton des TV-Programms aufzunehmen, wählen Sie den Rec-Knopf bei Line-In aus.
Auf Empfängerseite benötigt man nun neben dem Webbrowser, auf dem die Seite mit dem TV-Bild gezeigt wird, auch einen MP3-Player, der mit dem Icecast-Server Kontakt aufnehmen kann (z.B. xmms, freeamp, mpg123)
>> mpg123 http://mein.server.de:8010wobei es wichtig ist, auch die Portnummer des Icecast-Servers anzugeben.
Somit hat man nun neben dem TV-Bild auch den TV-Ton.
Anwendung und Probleme
Neben dem reinen Verschicken von TV-Bild und TV-Ton kann man diese Technik auch ideal zur Internet-Telefonie verwenden, ohne auf irgendeine Spezialsoftware angewiesen zu sein. Eine an die TV-Karte angeschlossene Webcam und ein an die Soundkarte angeschlossenens Mikrofon ergeben somit ein echtes Bildtelefon.
Der Vorteil hierbei ist, daß jede Person, die einen Webbrowser und einen streaming-fähigen MP3-Player parat hat (unter Windows z.B. WinAMP) sofort Bild und Ton empfangen kann, denn der Linux-User kann ja nicht auf die unter Windows so beliebte Software NetMeeting zurückgreifen.
Bei Full-Duplex-Soundkarten können sogar beide Seiten TV- und Audio-Server installieren und somit echte Internet-Bild-Telefonie erreichen.
Leider hat die hier gezeigte Lösung noch einige Probleme. Das nervigste ist bestimmt die fehlende Synchronisation von Bild und Ton.
Das Echtzeit-Encodieren und besonders das Abspielen des MP3-Stream (wegen des
Bufferings) bewirkt zwangsläufig eine Verzögerung des Tons um ein bis zwei Sekunden.
Somit hängt der Ton dem Bild immer etwas hinterher.
Falls das Bild sowieso nur alle paar Sekunden aktualisiert wird, fällt das
nicht weiter auf, wenn man aber im LAN echtes Videostreaming mit bis zu 20 Bildern
pro Sekunde erreicht, stört der hinterherlaufende Ton schon.
Diesen Effekt könnte man durch eine zusätzliche Verzögerung des Bildes um genau diese
Zeitspanne wieder ausgleichen. Da die Dauer der Tonverzögerung allerdings bei jedem
MP3-Player verschieden ausfällt, müßte die Bildverzögerung auf jedem Client einzelnd
eingestellt werden und kann nicht bereits auf dem Server geschehen.
Eine Lösung wäre ein Java-Applet, welches die Bilddarstellung um die jeweils
nötige Zeitspanne verzögert, dies würde aber den Umfang unseres Artikel
sprengen.
Wenn aber jemand ein derartiges Applet kennt (und vielleicht auch einen
Java-MP3-Player), sollte sich mal mit uns in Verbindung setzen.
Links:
| Eigene Radiostation: Icecast | Installation und Konfiguration eines Icecast-Servers |
| Webcam ohne Webcam | Wie streamed man das TV-Programm übers Web |
| http://www.sulaco.org/mp3/ | Homepage des MP3-Encoders LAME |
| http://star.arm.ac.uk/~spm/software/liveice.html | Homepage von Liveice |
| http://www.icecast.org/ | Homepage von Icecast |
Anmerkungen zu diesem Artikel
Eigene Anmerkung eintragen