LinuxNetMag
echtzeit Audio-Streaming
Archiv | Home
Inhalt
   
LinuxNetMag #5

  Software
 Aktuell
kurz vorgestellt
SuSE7.0 Testbericht
Mozilla Preview
 Applikationen
Videoschnittsystem
Windows X-Server
Windowmanager
  
 

Hardware

TV-Karte
Wheel-Mouse
Webcam selbstgebaut
LCD-Panel
  
 

Netzwerk

Web2Fax-Gateway
Apache mit SSI
Booten übers Netz
Webcam-Streaming
offline Mailingliste
Audio-Streaming
ISDN-Dial-In Server
empfehlenswerte Links
  
 Wissen
Abenteuer ReiserFS
Linux-Devices
LinuxExpo Brasilien
  
 

Sonstiges

Mailing-Liste
Gästebuch
Artikelliste
Unterstützen Sie uns !
zurück zur Hauptseite



Druckversion


  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 decodierten 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.

Services

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.

Server

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 /tmp
wird 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 install
und kopieren das Paket (als root) nach /usr/local
>> cp -a /tmp/liveice /usr/local
Die 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.tk 
und machen folgende Einstellungen:

LiveIce Konfiguration
Diese Einstellungen sind wichtig:
  • Unter Server muß der Rechner angegeben werden, auf dem der Icecast-Server läuft, 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
Speichern Sie diese Konfiguration daraufhin unter liveice.cfg ab, und beenden Sie das Konfigurationsprogramm.

Starten Sie als nächstes den Icecast-Server (falls er nicht schon laufen sollte) in einem weiteren Terminal mittels

>> icecast
Sie 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

>> ./liveice
und 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:

gmix Screenshot
(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:8010
wobei 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: IcecastInstallation und Konfiguration eines Icecast-Servers
Webcam ohne WebcamWie 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.htmlHomepage von Liveice
http://icecast.linuxpower.org/Homepage von Icecast

Platz für Kommentare & Fragen:
(selbst eintragen)

 

Weitere Ausgaben Linux NetMag
[ #1 | #2 | #3 | #4 | #5 | Main ]