home   artikelen   forum   colofon  
Gepubliceerd op 12.10.2001
Auteur: Ronny Ziegler
Vertaald door: Guus Snijders
Languages: en de it
Help Ons!
 

Realtime Audio Streaming

realtime audio streaming Audio in realtime naar mp3 omzetten en via een Icecast server rond de wereld te sturen klinkt leuk.
Maar in combinatie met een TV kaart kun je on-ontdekte landen bereiken...

Een ander artikel beschreef hoe je het actuele TV programma over het netwerk kunt streamen. Zo kon je overal plezier hebben van je TV kaart met behulp van een webbrowser. Maar deze oplossing had een fataal nadeel.
Je kreeg geen geluid, alleen video.

Als je de afbeelding van een webcam streamt, is het geluid niet belangrijk, maar een TV programma zonder audio?
Ik kon dit idee NIET van me afzetten, ook omdat Icecast realtime audio streaming zou moeten ondersteunen.

Realtime Streaming

Je hebt tenminste een Icecast server nodig om op het netwerk te streamen. De installatie van deze server is beschreven in het artikel Je eigen radio station: icecast".

Als je audio in realtime (dus niet reeds-gecodeerde mp3 bestanden) wil streamen, heb je een snelle mp3 encoder (Lame is een aanrader) en het programma LiveIce, deze is onderdeel van het Icecast pakket. De nieuwste versie kun je downloaden vanaf de homepage:
http://star.arm.ac.uk/~spm/software/liveice.html

Services

LiveIce leest het line-in kanaal van je geluidskaart en stuurt de data naar Lame die het signaal realtime in mp3 omzet.
De geconverteerde data wordt dan door de LiveIce naar de Icecast verstuurd.
Tegelijkertijd wordt de TV uitgelezen door bttvgrab en wordt de uitvoer naar de webserver verzonden (zie Webcam zonder Webcam).

Een leuke bijkomstigheid is dat de verschillende processen op verschillende computers kunnen worden uitgevoerd en elk kan ontworpen worden om zijn belangrijkste taak uit te voeren (netwerk verbinding, firewall regels, CPU ...) en de services bijten elkaar niet.

Server

Zolang je niet enkele duizenden computers wilt voorzien van audio/video maar slechts een of twee in je lokale netwerk, kun je alle taken op enkele machine plaatsen (een enkele PC met een TV- en een geluidskaart, geïnstalleerde web- en Icecast-server).

Installatie

De installatie van LiveIce is weinig verassend. Maar voordat je LiveIce installeert, zou je eerst een mp3encoder moeten installeren. Wij raden de encoder lame aan omdat deze goed werkt in combinatie met LiveIce. Deze encoder kun je downloaden op http://www.sulaco.org/mp3/.
Na het uitpakken met:

  >> tar zxvf lame3.87beta.tar.gz -C /tmp
  
kun je het pakket compileren en installeren:
  >> cd /tmp/lame3.87/
  >> ./configure
  >> make
  >> make install
  
Dezelfde procedure geldt voor LiveIce (te vinden op http://star.arm.ac.uk/~spm/software/liveice.html)
  >> tar zxvf liveice.tar.gz -C /tmp
  >> cd /tmp/liveice
  >> ./configure
  >> make
  >> make install
  
en kopieer de directory (als root) naar /usr/local:
  >> cp -a /tmp/liveice /usr/local
  
LiveIce kun je configureren via een frontend. Het configuratie bestand bevindt zich in dezelfde directory als waar je het programma start, dus ga je eerst naar /usr/local/liveice
  >> cd /usr/local/liveice
  >> ./liveiceconfigure.tk 
  
en zet je de volgende opties:

LiveIce Configuratie
Deze instellingen zijn nodig:
  • Bij Server geef je op op welke computer de Icecast server draait en waar de audio naartoe moet worden gestuurd. Als je Icecast op dezelfde computer als de encoder draait, volstaat localhost.
  • Achter Server geef je de poort op waar Icecast op luistert voor de data.
  • Achter Password geef je de wachtwoordstring voor Icecast op.
  • PCM Audio Format stel je in op 32000Hz.
  • Soundcard dient enabled te zijn. Als je kaart Full-Duplex (tegelijkertijd opnemen en afspelen) ondersteund, kun je deze optie ook activeren.
  • Als Encoder kies je LAME3 met een bitrate van 32000.
  • Kies Soundcard only.
  • In het veld Executables - Encoder type je lame
Dan sla je de configuratie op in liveice.cfg en sluit je de configuratie tool af.

Vervolgens start je de Icecast server (als die nog niet actief was) in een nieuwe terminal met

  >> icecast
  
Je krijgt de volgende uitvoer:

Uitvoer: 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 wacht nu op een client om de data naartoe te sturen.

Nu start je LiveIce

  >> ./liveice
  
en zou je de volgende uitvoer moeten krijgen:

Uitvoer: 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   
  


De data wordt door LiveIce naar de Icecast server verzonden. Je krijgt deze informatie op een nieuwe regel uitvoer van Icecast:

  -> [21/Oct/2000:00:51:58] Accepted encoder on mountpoint /icy_0 from jpsi.ziegler.de. 1 sources connected
  -> 
  

Kies de bron

Als je een mixer (kmix of gmix) start, kun je de opname-bron van je geluidskaart kiezen (voorzover deze Full-Duplex ondersteund):

gmix Screenshot
(SB Live! value - Kaart)

Op de onderste regel selecteer je de Rec. knop om de gewenste bron (CD, Line-In of microfoon) te kiezen.

Naast een webbrowser heeft de ontvanger een mp3 speler nodig. Deze mp3 speler moet kunnen verbinden met de Icecast server (bijvoorbeeld xmms, freeamp, mpg123).

  >> mpg123 http://my.server.de:8010
  
Het is belangrijk om hier het juiste poortnummer van de Icecast server op te geven.

Nu kun je TV video en audio ontvangen, waar je je ook bevindt.

Gebruik en problemen

Behalve voor TV-beeld en geluid kan deze methode ook worden gebruikt voor telefoongesprekken via Internet zonder speciale software. Een webcam, verbonden met de TV kaart, een geluidskaart met een aangesloten microfoon vormen een echte video-telefoon.

Het voordeel zou zijn dat iedereen met een webbrowser een mp3 speler die mp3 streaming ondersteund (voor M$Win WinAMP bijvoorbeeld), tegelijk video en audio kan krijgen. Deze oplossing werkt zelfs met Linux en hoef je niet langer naar M$Win te gaan voor diens NetMeeting.

Voor een echte video telefoon hebben beide zijden een Full-Duplex geluidskaart nodig, zodat je de TV en audio server op beide kunt installeren.

Uiteraard heeft deze oplossing wel enige problemen. Het meest storende is het ontbreken van synchronisatie van video en audio.

De realtime encoding en het afspelen van de mp3 stream (door de buffering) vertragen de audio uitvoer. Zo is de audio altijd vertraagd ten opzichte van de video.
Als de video iedere paar seconden wordt ververst is dit effect niet zo ernstig, maar als je video streaming met 20 afbeeldingen per seconden bekijkt in je lokale netwerk, is de vertraging verschrikkelijk.
Iemand (misschien jij) zou dit kunnen oplossen door het video signaal gelijk te vertragen. De vertraging is afhankelijk van de gebruikte mp3 speler en moet ook op de client worden geregeld, niet op de server.
Een Java applet die het video signaal vertraagd met een bepaalde tijd zou een oplossing zijn, maar dat zou te ver uitweiden voor dit artikel.
Als iemand iets weet met deze functie (en/of een Java mp3 speler) kan hij contact met ons opnemen.


Links:
Je eigen radio station: icecast Installatie en Configuratie van een Icecast server
Webcam zonder Webcam Hoe je een TV-programma over het netwerk streamt? Dat kun je hier lezen!
http://www.sulaco.org/mp3/ Homepage van de MP3 encoder Lame
http://star.arm.ac.uk/~spm/software/liveice.html Homepage van LiveIce
http://www.icecast.org/ Homepage van Icecast