Verder Terug Inhoud

11. MP3's streamen.

Een streaming server stelt je in staat om MP3 files over een Tcp gebaseerd netwerk te transporteren. dit kan het internet zijn of je lokale netwerk / intranet.

De connectie principes zijn bijna gelijk aan die van een web server, files worden gestreamd als een client (de MP3 speler) verbinding maakt met de server.

Een streaming server instellen is erg simpel. Ik fokus eerst op Icecast en dan Fluid.

11.1 Icecast

Na het downloaden en untarren, zou een goede kijk in de doc/ directorie geen kwaad kunnen, de HTML handleiding is erg handig en omvattend.

Als je de bron code hebt gedownload, volg dan de instructies voor het compileren die relevant zijn voor je systeem.

Icecast zal niet goed werken als je de servernaam in de configuratie file, icecast.conf, welke in de etc directory staat niet goed instelt. Het moet de naam zijn die je IP adres kan ophelderen. Als je het volgende zie als Icecast opstart heb je problemen:


-> [05/Jan/2000:17:21:04] WARNING: Resolving the server name [your.server.name] does not work!

Edit de icecast.conf welke zich bevindt in de etc directory en zoek de regel die het woord "server_name" bevat en voer je server naam in. Als je onzeker bent kun je je hostname uitvissen met het hostname commando, of door een kijkje in /etc/hosts.

Als je de nodige veranderingen hebt gemaakt moet je of de conf file naar de bin directory kopieëren of icecast starten met de -c optie en de locatie aangeven, zoals dit:


./icecast -c ../etc/icecast.conf

Als alles goed is geconfigureerd, zie je iets wat lijkt op:


[dj@megajukebox bin]$ ./icecast -c ../etc/icecast.conf -d /home/dj/mp3/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.

[05/Jan/2000:18:36:30] Icecast Version 1.3.0 Starting..
[05/Jan/2000:18:36:30] Using stdin as icecast operator console
[05/Jan/2000:18:36:30] Tailing file to icecast operator console
[05/Jan/2000:18:36:30] Server started...
[05/Jan/2000:18:36:30] Listening on port 8000...
[05/Jan/2000:18:36:30] Using [megajukebox] as servername...
[05/Jan/2000:18:36:30] Max values: 1000 clients, 1000 clients per source, 10 sources, 5 admins
-> [05/Jan/2000:18:36:30] [Bandwidth: 0.000000MB/s] [Sources: 0] [Clients: 0] [Admins: 1] [Uptime: 0 seconds]

De -d optie zet de directory voor log files en templates.

Hieronder is de lijst van command-line opties:


        -c [filename] 

Geef een configuratie file door. Onthoud, dat elk command-line
optie die je meegeeft de waarden in de configuratie file 'vervangt',
dus alles in de icecast.conf wat niet is overschreven door de nieuwe
file wordt gebruikt voor de server.

        -P [port] 

Dit is de poort gebruikt voor alle client, source en admin connecties. Standaard
staat het op 8000.

        -m [max clients] 

Staat dit aantal client connecties toe. Als dit is berijk worden alle client
connecties geweigerd met 'HTTP/1.0 504 Server Full'.

        -p [encoder password] 

Dit stelt het paswoord dat de encoder moet gebruiken om naar de server
te streamen. Onthoud dat als je de server met crypt() hebt gecompileerd
dat hier ook een versleutelde string moet staan.

        -b 

Dit zend de icecast server in de achtergrond (een deamon process).
Om de admin commando's nu te gebruiken moet je connectie maken met de server
als een admin, met een soort van telnet client.

        -d [directory] 

Zorg dat icecast alle logfiles die hij maakt en alle templates waar hij naar
zoek in deze directorie.

Zo, de server is gestart, maar nu moeten we een MP3 bron er aan verbinden.

Shout

Shout voorziet Icecast van een statische playlist van MP3's om te streamen.

Je maakt een playlist van de MP3 files die je wilt streamen met het volgende commando:


find [MP3 directory] -name *.mp3 -print > playlist

Het is heel makkelijk om het shout service te starten, geef het volgende commando:


[dj@megajukebox bin]# ./shout megajukebox -P hackme -p playlist

De -P optie is het paswoord dat nodig is om een mount-punt toe tevoegen aan Icecast, dit is normaal ingestelt als hackme..... Ik raad je sterk aan dit te veranderen voordat een ander het doet :) De -p optie specificeert de lokatie van de playlist file.

Hieronder is een lijst van alle command line opties:


[dj@megajukebox bin]# ./shout
Usage: shout <host> [options] [[-b <bitrate] file.mp3]...
Options:
        -B <directory>       - Gebruik deze directory voor alle shout files
        -C <file>    - Gebruik file als configuratie file
        -D <dj_file> - Draai dit voor elk liedje (system())
        -P <password>        - Gebruik als paswoord password
        -S              - Geef alle instellingen weer en exit
        -V              - Gebruik verbose uitvoer
        -X <desc>    - Gebruik gespecificeerde beschrijving
        -a              - schakel automatisch bitrate (transfer) correctie 
        -b <bitrate> - Start met het gespicifeerde bitrate
        -d              - Schakel de dj in.
        -e <port>    - Verbind op poort met server.
        -f              - Sla files over die niet de goed bitrate hebben
        -g <genre>   - Gebruik een specifiek genre
        -h              - Laat deze tekst zien
        -i              - Gebruik oude icy headers
        -k              - Vermink de interne playlist niet
        -l              - Ga voor altijd door (loop)
        -m <mount>   - Gebruik het gespecificeerde mount punt
        -n <name>    - Gebruik de gespecificeerde naam
        -o              - Schakel bitrate autodetectie uit
        -p <playlist>        - Gebruik deze file als een playlist
        -r              - Shuffle playlist (random play)
        -s              - (Geheim) Zend geen meta data naar directory server
        -u <url>     - Gebruik de gespecificeerde url
        -v              - Laat versie zien
        -x              - Update de cue file niet (spaart cpu)
        -z              - Ga in de achtergrond (Daemon mode)
        -t              - Schakel titel streaming in

LiveIce

LiveIce kan in 2 modes werken, het kan een playlist doorgeven aan Icecast of kan live audio van de geluidskaart doorgeven.

Na het untarren en lezen van de README betreffende het compileren van het pakket, zorg dan dat mpg123 is geinstalleerd en dat LiveIce het kan gebruiken als LiveIce het nodig heeft.

Er zijn twee manieren om LiveIce te configureren. De config file editten met vi/emacs/of wat dan ook of doormiddel van een TK gebaseerde configuratie tool, wat een mooie manier van editten is :)

De best plaats voor beschrijvingen over de internals van liveice.conf kan worden gevonden op de LiveIce homepage waar Scott alle opties beschrijft.

Dit is een kopie van mijn config file met LiveIce ingesteld in de mixer mode (streamen van een lijst MP3's)

NOTITIE: Ik heb commentaar toegevoegd aan de file, dus als je kopie en paste doet zorg dan dat er geen tekst op de volgende regel verschijnt anders werkt LiveIce niet :)


# liveice configuratie file
# Automatisch gegenereerd

SERVER megajukebox              # Je server naam * MOET DE NAAM ZIJN HOE DE SERVER IS GENOEMD *

PORT 8000                       # De poort waar Icecast op draait.

NAME Megajukebox                # Informatie met betrekking to de server naam die wordt gezonden
                                # naar de MP3 spelers en de directory servers.
                                # Voorbeelden 'Sarah FM' of 'ThisTown: Loud and Heavy Jazz -Internet Radio 24/7' 

GENRE Live                      # Informatie over het genre. Bijvoorbeeld 'Talk' of 'Dance'

DESCRIPTION                     # Informatie over het station. Voorbeeld 'The best for reggae in the North'

URL http://megajukebox:8000     # De URL en poort van de serverThe URL and port of the server.

PUBLIC 0                        # Zet hier 1 als wilt dat Icecast je station lijst en details moet doorgeven.
                                # laat het anders op 0 staan

XAUDIOCAST_LOGIN                # Kan ICY_LOGIN zijn of X_AUDIOCAST_LOGIN. X_AUDIOCAST is beter. 

MOUNTPOINT /techno              # Stelt de naam van het mountpunt van de stream in voor Icecast.
                                # Wordt alleen gebruikt als X_AUDIOCAST is gebruikt. De default is icy_0

PASSWORD hackme                 # Het admin paswoord van Icecast.

SAMPLE_RATE 44100               # De sample rate van de stream
STEREO                          # kan MONO of STEREO zijn

NO_SOUNDCARD                    # Zie hieronder

HALF_DUPLEX                     # Stelt de soundkaar duplex mode in. Kan HALF_DUPLEX of FULL_DUPLEX zijn

USE_GOGO                        # Stelt de encoder in die moet worden gebruik. Kijk in de README voor een lijst

BITRATE 128000                  # Stelt de bit rate van de stream in (zie hieronder)

VBR_QUALITY 1                   # Stelt de variabele bit rate kwaliteit in.

MIXER                           # Zie hieronder

PLAYLIST /megajukebox/playlist  # Lokatie van de playlist (zie details op het find commando later
                                # in dit hoofdstuk)

TRACK_LOGFILE track.log         # Filenaam en lokatie om de lijst van MP3's te dumpen die gestreamt worden

Als je de config file hebt start je LiveIce op deze manier:
<code>
[dj@megajukebox liveice]$ ./liveice
/megajukebox/playlist
1
opening connection to megajukebox 8000
Attempting to Contact Server
connection successful: forking process
opening pipe!...
writing password
Setting up Interface
Soundcard Reopened For Encoding
Input Format: 16Bit 44100Hz Stereo
Output Format: 256000 Bps Mpeg Audio
IceCast Server: megajukebox:8000
Mountpoint: /techno
Name: megajukebox - this and that radio - broadcasting 24/7
Genre: Techno
Url: http://megajukebox
Description: a load of digital noise -> but i know you like it :)

 Press '+' to Finish
adding /megajukebox/demotunes/track_1.mp3
adding /megajukebox/demotunes/track_2.mp3
adding /megajukebox/demotunes/track_3.mp3
adding /megajukebox/demotunes/track_4.mp3
/megajukebox/demotunes/track_4.mp3
Adding New Channel 1
Adding New Channel 2
Channel 1 selecting 
 /megajukebox/demotunes/track_1.mp3
Channel 2 selecting 
 /megajukebox/demotunes/track_1.mp3
Playing track_1.mp3
searching for Id3v2
searching for Id3v1
copying the data
fixing the nulls
adding the url
closing input file
Using log track.log

The last line is a peak meter.

Dit zijn de toetsenbord controls voor de mixer mode:


Actie                                   Kanaal 1 toets  Kanaal 2 toets
~~~~~~                                  ~~~~~~~~~~~~~~   ~~~~~~~~~~~~~~
Selecteer volgende track op kanaal      1                a
Selecteer vorige track op kanaal        q                z
Start/Stop kanaal                       2                s
Reset kanaal                            w                x
Verhoog volume op kanaal                3                d
Verlaag volume op kanaal                e                c
Verhoog snelheid op kanaal              4                f
Verlaag snelheid op kanaal              r                v
Sticky mode Aan/Random/Uit              5                g
Preview kanaal                          t                b
Random Track                            u                m

De bovenstaande liveice.cfg is voor mixermode. Om LiveIce in audio mode te gebruiken verander dan de regel met MIXER naar NOMIXER en maak NO_SOUNDCARD, SOUNDCARD en herstart LiveIce.

De correctie opties vergeten instellen kan lijden to enkele interesante waarschuwingen ;)


   946:Error: Line In mode *en* geen soundkaart??????? Eeejit!

Als je alles goed hebt ingesteld en een externe bron hebt ingeplugd, moet je kunnen streame =:)



[dj@megajukebox liveice]$ ./liveice
/megajukebox/playlist
0
Initialising Soundcard
16Bit 22050Hz Stereo Full Duplex 
opening connection to megajukebox 8000
Attempting to Contact Server
connection successful: forking process
opening pipe!...
writing password
Setting up Interface
Soundcard Reopened For Encoding
Input Format: 16Bit 22050Hz Stereo
Output Format: 32000 Bps Mpeg Audio
IceCast Server: megajukebox:8000
Mountpoint: /daves_band_live_at_the_club
Name: megajukebox - Dave and the Dynamite - Live at the Roxy  
Genre: Live/Rock
Url: http://megajukebox
Description: megajukebox::Louder than a frog in a trashcan..... and 
sical
 Press '+' to Finish
Lvl: L:   8704 R:  11776 

De laatste regel is een signaal meter, als het input signaal te hoog is krijg je een *clip* waarschuwing. Als je de gain van de input source zachter zet.

De slim goed geoogedenn onder jullie heeft misschien gezien dat in liveice.cfg de eerste regel commentaar laten zien dat de file automatisch is gegenereerd. Als je de TK gebaseerde GUI liveiceconfigure.tk gebruikt en je hebt handmatige veranderingen gemaakt ben je die kwijt. Gebruik de GUI of leer vi/emacs :)

11.2 Fluid

Na het untarren van de bundel cd naar de directory, lees dan de README :)

Fluid heeft drie basis modes van operatie, verzenden, ontvangen en doorsturen. Ik focus alleen op verzenden.

De configuratie files die te maken hebben met transmit staan in config/MP3TX.cfg. Om de server met het volgende te testen zouden de standaard settings ok moet zijn:

java Fluid TX

Natuurlijk moet je een vorm Java eerst geinstalleerd hebben. Je kan de Blackdown port van JDK gebruiken verkrijgbaar op http://www.blackdown.org of als je Redhat gebruikt, Kaffe.

Fluid komt met een paar voorbeeld MP3 files, Dus als er iets werkt zou je iets als dit moeten zien (Ik heb de server in dit voorbeeld met Kaffe gestart, je kan het ook starten met java):


[dj@megajukebox Fluid-Beta2J]$ kaffe Fluid tx
------- Fluid Streaming Server Beta 2 ------- 
This program is ShareWare(tm) and it will not 
be crippled in any way because of it. However 
if you do like the program and will use it    
commercial purposes, we ask of you to contact 
us at the address below for pricing info:     
                                              
 Eldean AB                  E-mail:           
 Sjoangsvagen 7             fluid@subside.com 
 S-192 72 Sollentuna                          
 SWEDEN                                       
                                              
   Fluid is Copyright Subside (C) 1998        
       written by Lars Samuelsson             
         http://www.subside.com               
--------------------------------------------- 

* Transmission mode *
Reading config from: config/MP3TX.cfg
Reading playlist: playlist.m3u
Server started on port: 2711
Accepting administrator login on port: 2710
P| Dr. Nick - Hello Everybody

Als je zo ver komt, ziet het er naar uit dat het werkt, maar ik weet zeker dat je meer wilt streamen dan alleen de demo files!

Je moet een playlist van MP3's die je wilt streamen compileren. Dit is een statische lijst, gebruikers kunnen geen aanvragen maken. Deze playlist is playlist.m3u en staat standaard in de root directory.

Om een playlist van alle MP3's in een bepaalde directory (of disk) te compileren gebruik dan dit commando:


find [MP3 directory] -name *.mp3 -print > playlist.m3u

Standaard gebruikt de server poort 2711, dit is waar je luisteraars verbinding mee maken, als je dit wilt veranderen kan dat in de configuratie file.

De server kan op afstand worden beheerd door te telnetten naar de admin poort, standaard poort 2710:


[dj@megajukebox Fluid-Beta2J]$ telnet localhost 2710
Trying 127.0.0.1..megajukebox
Connected to localhost.localdomain.
Escape character is '^]'.
jaguar
You are connected to the -Fluid- Streaming Server
Type "help" for a command reference
help
The following commands are available:
 help conn curr exit
curr
Information about the currently broadcasted song:
Title:   Beer Talk
Artist:  Homer Simpson
Album:   The Simpsons
Year:    1996
Comment: Borrowed this as an example
Genre:   Comedy

Het woord "jaguar" is het admin password, dit is standaard. Er is geen prompt voor het password dus wacht er niet op! Ik raad je aan dit te veranderen of je nodigt een hacker uit! Het kan veranderd worden in de configuratie file, welke er zo uitziet:


[dj@megajukebox config]$ cat MP3TX.cfg 
2711
2710
5
4096
32
1000
jaguar
playlist.m3u
current.txt

# --- De regels zijn ---
# 1. POORT nummer (welke de server gaat gebruiken)
# 2. POORT nummer (voor het onderhouden van de server)
# 3. Maximaal aantal connecties (voor de server)
# 4  Packetgrootte bij het lezen/zenden (in bytes)
# 5. Bitrate van de mp3s in kbit/s (alle mp3s moeten dezelfde bitrate hebben)
# 6. Tijd tussen liedjes (in milliseconden)
# 7. Paswoord voor op afstand beheren
# 8. Playlist naam (lijst in .m3u formaat)
# 9. Naam van de file om de song info naar toe te schrijven (van ID3-tag)

De opmerking op de playlist is dat deze in m3u formaat is wat betekent dat het in het zelfde formaat is als het find commando eerder.

11.3 Bandbreedte afwegingen

Audio streamen kan ontzettend veel bandbreedte innemen als de bit-rate van de MP3 server te hoog staat.

Overweeg dit scenario. Een T1 link heeft een capaciteit van ongeveer 1.55 Mb/Sec. Als je je MP3' streamt op 128K/Bps stereo, zal elke speler 256K/Bps gebruiken, dus er kunnen maar 6 gebruikers verbinding maken met je MP3 server op elk tijdstip zonder problemen. En 256K/Bps, kunnen veel gebruikers niet door hun modem krijgen!

Dus je moet een beslising maken niet alleen in te stellen op wat de server kan, maar op wat een client kan. 24K/Bps geeft een redelijke kwaliteits signaal waar 56K modem gebruikers naar kunnen connecten, en dezelfde T1 line kan nu 32 connecties aan.

Als je server op een Intranet draait, telt bandbreedte nog steeds mee vooral als je een 10M/Sec netwerk hebt.

Maar laat a.u.b je ISP of sys admin weten dat je gaat streamen anders zorg je voor opschudding. Sommige ISP's laten je betalen voor bandbreedte als je een limiet overschreidt en sys admins willen weten waarom hun netwerk zo traag is :)

11.4 Copyright onderwerpen

Ik denk dat het logisch is dat platenmaatschappijen het niet leuk vinden als je hun materiaal zonder hun toestemming of betaling gaat streamen! Dus wat kun je streamen?

Dit is een gebied waar je je bewust moet zijn van legaliteit, omdat jij degene bent die schuldig is.

Hieronder staan twee links, een van de Electronic Frontier Foundation, welke advocaten zijn welke de beperkingen van de omliggende technologie vrijer willen maken. De andere link is naar de Recording Industry Association of America, welke artiesten beschermt tegen piraterij.

Ik raad je sterk aan beide sites te bezoeken en andere waar je fysiek op gebaseerd bent.

http://www.eff.org/cafe/

http://www.riaa.com/weblic/weblic.htm


Verder Terug Inhoud