Gentoo Logo

Przesyłanie strumieniowe radia przy użyciu SHOUTcast

Spis treści:

1.  Uruchamianie serwera SHOUTcast

Instalowanie plików

Serwer SHOUTcast można odnaleźć w pakiecie media-sound/SHOUTcast-server-bin. Można go zainstalować używając następującego polecenia:

Listing 1.1: Instalowanie SHOUTcast

# emerge shoutcast-server-bin

Teraz nastąpi instalacja serwera SHOUTcast. Następnym krokiem jest konfiguracja.

Konfigurowanie serwera SHOUTcast

Teraz, gdy Serwer SHOUTcast jest zainstalowany, musi zostać skonfigurowany. Pliki konfiguracyjne można znaleźć w /etc/shoutcast/sc_serv.conf. Rozpocznijmy konfigurację. Upewnijmy się, że posiadamy uprawnienia root-a i otwieramy plik konfiguracyjny w ulubionym edytorze. Do poniższych przykładów wybrałem vi. Teraz rozpoczynamy edycję używając vi:

Listing 1.2: Otwieranie pliku konfiguracyjnego

# vi /etc/shoutcast/sc_serv.conf

To spowoduje wyświetlenie pliku konfiguracyjnego Serwera SHOUTcast, w którym jest dużo opcji, które można ustawić. Przyglądnijmy się jak ustawić poszczególne z nich.

Obowiązkowe opcje

Listing 1.3: Ustawianie limitu ilości użytkowników

; MaxUser.  The maximum number of simultaneous listeners allowed.
; Compute a reasonable value for your available upstream bandwidth (i.e. if
; you have 256kbps upload DSL, and want to broadcast at 24kbps, you would
; choose 256kbps/24kbps=10 maximum listeners.)  Setting this value higher
; only wastes RAM and screws up your broadcast when more people connect
; than you can support.
MaxUser=10

W tym miejscu ustawiana jest maksymalna ilość użytkowników. Jak można wyczytać w nagłówku, nierozsądnym jest ustawianie jej na 100 użytkowników na łączu z limitem 256kbps na ruch wychodzący (Ustawiłem tę wartość na 10, ponieważ sam posiadam łącze z limitem 256kbps na ruch wychodzący). Jeśli uruchamiamy Serwer SHOUTcast do obsługi sieci LAN, prawdopodobnie możemy ustawić tę wartość ZNACZNIE wyższą (śmiało wcześniej wspomnianą 100). Należy pamiętać jednak, aby nie nadużywać wykorzystywanej przepustowości. Przepustowość dla ISP jest bardzo droga i niektórzy z nich mogą zablokować konto lub obciążyć użytkownika kosztami.

Listing 1.4: Ustawianie hasła

; Password.  While SHOUTcast never asks a listener for a password, a
; password is required to broadcast through the server, and to perform
; administration via the web interface to this server.  This server should
; consist of only letters and numbers, and is the same server your broadcaster
; will need to enter in the SHOUTcast Source Plug-in for Winamp.  THIS VALUE
; CANNOT BE BLANK.
Password=ciężkie_do_złamiania_hasło

Tu należy ustawić hasło. Hasło jest zapisane otwartym tekstem. Ze względów bezpieczeństwa MOCNO zalecam, aby nie używać hasła, które zabezpiecza dostęp do krytycznych zasobów systemu lub innych delikatnych informacji. Należy ustawić je jak najbardziej losowym jak to możliwe, używając kombinacji liter i cyfr. Tego hasła będzie używał SHOUTcast Trans (lub dowolny inny dostawca treści) do połączenia z serwerem i dostarczania treści transmisji strumieniowej.

Listing 1.5: Ustawianie portu nasłuchującego

; PortBase. This is the port number your server will run on.  The
; value, and the value + 1 must be available.  If you get a fatal error when
; the DNAS is setting up a socket on startup, make sure nothing else on the
; machine is running on the same port (telnet localhost port number -- if you
; get connection refused then you're clear to use that port).  Ports less than 1024
; may require root privileges on *nix machines.  The default port is 8000.
PortBase=8000

Ta wartość ustawia port, do którego będą łączyć się użytkownicy, aby nawiązać połączenie z Serwerem SHOUTcast. Domyślną wartością jest 8000, ponieważ większość odtwarzaczy mp3 z możliwością odtwarzania strumieniowego (Audacious, winamp, itp) domyślnie łączy się na ten port. Jeśli chcemy użyć portu poniżej 1024, musimy posiadać uprawnienia roota. Jednakże bardzo odradzam używanie portu mniejszego niż 1024 przez Serwer SHOUTcast.

Listing 1.6: Ustawianie logowania do pliku

; LogFile: file to use for logging. Can be '/dev/null' or 'none'
; or empty to turn off logging. The default is ./sc_serv.log
; on *nix systems or sc_serv_dir\sc_serv.log on win32.
; Note: on win32 systems if no path is specified the location is
; in the same directory as the executable, on *nix systems it is in the
; current directory.
LogFile=/var/log/SHOUTcast.log

Ta opcja ustawia położenie pliku z logami z Serwera SHOUTcast. Ebuild ustawia plik z logami na /dev/null, więc aby włączyć logowanie, należy zmienić tę wartość. Osobiście umieściłem plik w katalogu /var/log, ale możemy ustawić logowanie w dowolne inne miejsce.

Listing 1.7: Uruchamianie statystyk w czasie rzeczywistym

; RealTime displays a status line that is updated every second
; with the latest information on the current stream (*nix and win32
; console systems only)
RealTime=0

Ustawienie tej opcji powoduje wyświetlanie na standardowe wyjście, co sekundę, informacji o aktualnie odtwarzanym utworze. Ebuild domyślnie wyłącza tę opcję, aby demon SHOUTcast działał najciszej jak to możliwe. Aby otrzymywać to uaktualnienie co sekundę, ustawiamy wartość opcji na 1. Jednak zamiast tej funkcji zalecam używanie strony ze statusem.

Listing 1.8: Ustawianie logowania w czasie rzeczywistym

; ScreenLog controls whether logging is printed to the screen or not
; on *nix and win32 console systems. It is useful to disable this when
; running servers in background without their own terminals. Default is 1
ScreenLog=0

Ta opcja jest domyślnie wyłączona przez ebuild, aby demon działał najciszej jak to możliwe. Włączenie tej opcji powoduje wyświetlanie informacji o wszystkich zdarzeniach (połączenia, rozłączenia, itp), w czasie ich wystąpienia, na standardowe wyjście. Ponieważ logowanie do pliku ma ten sam efekt, zalecam jego używanie zamiast tej opcji.

Listing 1.9: Ustawianie ilości ostatnio odtwarzanych utworów

; ShowLastSongs specifies how many songs to list in the /played.html
; page.  The default is 10.  Acceptable entries are 1 to 20.
ShowLastSongs=10

Jak nazwa wskazuje, opcja ta ustawia ilość ostatnio odtwarzanych utworów jaka będzie wyświetlana na stronie /played.html. Nie warto jej ustawiać powyżej 20.

Listing 1.10: Ustawianie logowania zmian systemu plików

; TchLog decides whether or not the DNAS log file should track yp
; directory touches.  Adds and removes still appear regardless of
; this setting.
; Default is yes
; TchLog=yes

Ta opcja włącza lub wyłącza logowanie przez DNAS (ang. Distributed Network Audio Server), krótko mówiąc przez SHOUTcast, zmian w katalogu. Zalecane dla osób, które potrzebują logowania na bardzo wysokim poziomie bezpieczeństwa. Zwykli użytkownicy najprawdopodobniej nie potrzebują włączać tej opcji.

Listing 1.11: Włączanie logowania zapytań HTTP

; WebLog decides whether or not hits to http:// on this DNAS will
; be logged.  Most people leave this off because the DSP plug-in
; uses http:// calls to update titles and get the listener count,
; which takes up a lot of log space eventually.  If you want to
; see people making hits on your admin.cgi or index pages, turn
; this back on.  Note that this setting does NOT affect XML stats
; counters for hits to http:// pages.
; Default is no.
; WebLog=no

Ta opcja precyzuje czy należy włączyć logowanie zapytań do wewnętrznego serwera HTTP SHOUTcast. Podobnie jak poprzednio, zalecane dla osób wymagających logowania na bardzo wysokim poziomie bezpieczeństwa, ale nie zalecane dla przeciętnych użytkowników.

Listing 1.12: Włączanie logowania W3C

; W3CEnable turns on W3C Logging.  W3C logs contain httpd-like accounts
; of every track played for every listener, including byte counts those listeners
; took.  This data can be parsed with tools like Analog and WebTrends, or given
; to third parties like Arbitron and Measurecast for their reporting systems.
; Default is Yes (enabled).
W3CEnable=Yes

; W3CLog describes the name of the log file for W3C logging.  Default log file is
; sc_w3c.log, in the same directory wherever the DNAS gets started from.
W3CLog=/dev/null

Pierwsza opcja włącza logowanie W3C. Ten typ logowania może być łatwo przetwarzany przez programy podane w komentarzu i jest zalecany dla osób, które potrzebują bardzo dokładnych statystyk. Druga opcja precyzuje gdzie zapisywać logi W3C. Domyślnie ebuild ustawia tę wartość na /dev/null.

Konfigurowanie parametrów sieciowych

Listing 1.13: Ustawianie źródłowego adresu IP

; SrcIP, the interface to listen for source connections on (or to make relay
; connections on if relaying). Can and usually will be ANY or 127.0.0.1
; (Making it 127.0.0.1 will keep other machines from being able to
; broadcast using your SHOUTcast Server )
SrcIP=ANY

Zmienna SrcIP ustawia adres IP z jakiego będzie pochodzić transmisja strumieniowa. Może wskazywać inny serwer (przekazujący), localhost (normalnie), lub dowolny inny adres IP, który jest ustawiony na jednym z interfejsów sieciowych. Ustawienie na localhost zapobiega używaniu serwera SHOUTcast przez inny serwer, jako źródła transmisji. Domyślną wartością jest ANY i powoduje, że serwer SHOUTcast będzie obsługiwał wszystkie adresy. Ze względów bezpieczeństwa rozsądnym jest ustawienie tej wartości na konkretny adres.

Listing 1.14: Ustawianie docelowago adresu IP

; DestIP, IP to listen for clients on (and to contact yp.SHOUTcast.com)
; can and usually will be be ANY. If your machine has multiple IP addresses,
; set this to the one you want it to be accessed by.
DestIP=ANY

Ta opcja określa do którego adresu IP, ustawionego na jednym z interfejsów, będą mogli podłączać się użytkownicy. Możliwe wartości to: localhost (dla osób antyspołecznych, chcących nadawać tylko do siebie), adres prywatny (np. 192.168.0.101, aby nadawać do sieci lokalnej) lub adres publiczny (np. 209.204.249.201, aby nadawać do sieci WAN, ale nie LAN). W większości wypadków, do własnego strumienia można dostać się używając adresu 127.0.0.1 zamiast używać wartości ustawionej w tej opcji. Wartość ANY pozwala nawiązywać połączenia z Serwerem SHOUTcast na wszystkich adresach dostępnych na wszystkich możliwych interfejsach.

Listing 1.15: Ustawianie portu pośrednika/yp.SHOUTcast.com

; Yport, port to connect to yp.SHOUTcast.com on. For people behind caching
; web proxies, change this to the alternate port (666 is what it might be,
; check www.SHOUTcast.com if you have problems). Otherwise, leave this at 80.
; We're actively working on re-opening port 666, but as of release the only
; working port is port 80.
Yport=80

Ta opcja ma dwie funkcje. Pierwszą z nich jest port, do którego należy się połączyć z yp.SHOUTcast.com. yp.SHOUTcast.com jest stroną WWW firmy nullsoft na której utrzymywana jest lista publicznych serwerów, dzięki której użytkownicy wiedzą jakich stacji mogą posłuchać. Użytkownicy mogą szukać konkretnej stacji właśnie na tej stronie. Druga funkcja tej opcji jest związana z serwerem pośredniczącym (ang. proxy). Ustawiamy wartość tej opcji na numer portu serwera pośredniczącego w połączeniach do serwera SHOUTcast oraz ustawiamy wartość opcji DestIP na adres IP serwera pośredniczącego.

Listing 1.16: Ustawianie odwzorowania adresów

; NameLookups.  Specify 1 to perform reverse DNS on connections.
; This option may increase the time it takes to connect to your
; server if your DNS server is slow.  Default is 0 (off).
NameLookups=0

Ta opcja określa czy należy odwzorować adres IP klienta na jego nazwę domenową. Opcji tej należy użyć przy logowaniu w celu uzyskania bardziej dokładnych raportów.

Listing 1.17: Ustawianie przekaźnika

; RelayPort and RelayServer specify that you want to be a relay server.
; Relay servers act as clients to another server, and rebroadcast.
; Set RelayPort to 0, RelayServer to empty, or just leave these commented
; out to disable relay mode.
; RelayPort=8000
; RelayServer=192.168.1.58

Ta opcja powoduje, że serwer zachowuje się jak serwer przekaźnikowy. Serwery przekaźnikowe są często wykorzystywane do przejmowania połączenia o niskiej przepustowości, które może przesyłać strumieniowo tylko do jednego klienta i wykorzystują swoją większą przepustowość, aby serwować dane do większej ilości klientów. RelayPort specyfikuje port i adres IP Serwera SHOUTcast, dla którego ten serwer będzie przekaźnikiem. Te opcje należy zakomentować, jeśli serwer nie jest konfigurowany jako serwer przekaźnikowy.

Konfiguracja serwera

Listing 1.18: Ustawianie hasła administratora

; AdminPassword.  This password (if specified) changes the
; behavior of Password to be a broadcast-only password, and
; limits HTTP administration tasks to the password specified
; here.  The broadcaster, with the password above, can still
; log in and view connected users, but only the AdminPassword
; will grant the right to kick, ban, and specify reserve hosts.
; The default is undefined (Password allows control for both
; source and admin)
; AdminPassword=adminpass

Ustawienie tej opcji spowoduje uruchomienia dwóch ról: administratora i dziennikarza. Dziennikarz może zalogować się używając hasła (ustawionego w opcji Password) i podglądać aktualne połączenia. Jednakże, aby można było rozłączyć/zbanować klienta czy administrować serwerem, osoba musi zalogować się używając hasła administratora. Opcja ta zalecana jest dla instalacji, gdzie administrator i dziennikarz to dwie różne osoby.

Listing 1.19: Ustawianie automatycznego rozłączania użytkowników

; AutoDumpUsers controls whether listeners are disconnected if the source
; stream disconnects. The default is 0.
AutoDumpUsers=0

Ta opcja określa czy użytkownicy powinni być rozłączani w momencie, gdy źródło transmisji niespodziewanie się rozłączy. Domyślnie opcja ustawiona jest na 0, więc klienci po pewnym czasie rozłączą się sami albo będą próbować buforować strumień. Tej opcji należy użyć, jeśli spodziewane są krótkie zaniki łączności ze źródłem strumienia.

Listing 1.20: Ustawianie limitu czasu bezczynności dla źródła

; AutoDumpSourceTime specifies how long, in seconds, the source stream is
; allowed to be idle before the server disconnects it. 0 will let the source
; stream idle indefinitely before disconnecting. The default is 30.
AutoDumpSourceTime=30

Ta opcja określa jak długo Serwer SHOUTcast powinien czekać na źródło (lub serwer przekaźnikowy), z którego odbiera treść transmisji strumieniowej, zanim się rozłączy. Dowolna wartość pomiędzy 30 a 60 wydaje się być rozsądną.

Listing 1.21: Ustawianie katalogu z treścią

; ContentDir specifies the directory location on disk of where to stream
; on-demand content from. Subdirectories are supported as of DNAS 1.8.2.
; Default is ./content/, meaning a directory named content in the same directory
; as where sc_serv was invoked from.
ContentDir=/opt/SHOUTcast/content/

Opcja ContentDir ustawia gdzie przechowywane są treści przesyłane na żądanie. Na przykład, jeśli chcemy przesłać pracownikom pewną zapowiedź, w tym celu można użyć tej opcji. Ebuild ustawia wartość tej opcji na /opt/SHOUTcast/content. Aby skorzystać z tej funkcjonalności, umieść plik mp3 w katalogu z treścią a następnie w przeglądarce wpisz adres http://example.com:[port]/content/mp3name.pls. Serwer SHOUTcast automatycznie utworzy listę odtwarzania dla pliku mp3name.mp3 i zacznie ją transmitować na żądanie. Tej opcji można użyć jako alternatywy do SHOUTcast Trans jako źródła transmisji strumieniowej.

Listing 1.22: Ustawianie pliku intro

; IntroFile can specify a mp3 file that will be streamed to listeners right
; when they connect before they hear the live stream.
; Note that the intro file MUST be the same sample rate/channels as the
; live stream in order for this to work properly. Although bit rate CAN
; vary, you can use '%d' to specify the bit rate in the filename
; (i.e. C:\intro%d.mp3 would be C:\intro64.mp3 if you are casting at 64kbps).
; The default is no IntroFile
; IntroFile=c:\intro%d.mp3

Ta opcja pozwala ustawić plik intro. Za każdym razem gdy użytkownik się połączy z serwerem ten plik zostanie mu odtworzony. Jednakże, jak wiadomo, szybkość przesyłania bitów transmisji strumieniowej musi się zgadzać z szybkością transmisji bitów pliku intro, w przeciwnym wypadku wystąpią kłopoty. Można jednak umieścić pliki intro128.mp3 i intro64.mp3, wtedy serwer odtworzy plik intro128.mp3 użytkownikom łączącym się ze strumieniem 128kbps a plik intro64.mp3 użytkownikom łączącym się ze strumieniem 64kbps.

Listing 1.23: Ustawianie pliku zapasowego

; BackupFile can specify a mp3 file that will be streamed to listeners over
; and over again when the source stream disconnects. AutoDumpUsers must be
; 0 to use this feature. When the source stream reconnects, the listeners
; are rejoined into the live broadcast.
; Note that the backup file MUST be the same sample rate/channels as the
; live stream in order for this to work properly. Although bit rate CAN
; vary, you can use '%d' to specify the bit rate in the filename
; (i.e. C:\backup%d.mp3 would be C:\backup32.mp3 if you are casting at 32kbps).
; The default is no BackupFile
; BackupFile=C:\intro%d.mp3

Ta opcja jest podobna do powyższej, ale plik będzie odtwarzany, gdy źródło transmisji strumieniowej wygaśnie. Ta opcja zadziała tylko wtedy, gdy opcja AutoDumpUsers jest ustawiona na 0.

Listing 1.24: Ustawianie formatu tytułu

; TitleFormat specifies a format string for what title is sent to the listener.
; For example, a string of 'Justin Radio' forces the title 'Justin Radio' even
; when the source changes the title. You can use up to one '%s' in the string
; which lets you contain the title from the source. For example, if your
; TitleFormat is 'Justin Radio: %s', and the source plug-in's title is
; 'Billy plays the blues', then the net title is
; 'Justin Radio: Billy plays the blues'. Note: only works on non-relay servers.
; The default is no format string.
TitleFormat=Chris Gentoo Beats: %s

Ta opcja ustawia niezmienny tutuł Serwera Shoutcast. Tej opcji należy użyć, jeśli źródło strumienia jest różne od nazwy Serwera Shoutcast. Ta opcja nie będzia działać dla serwerów przekaźnikowych.

Listing 1.25: Ustawianie formatu URL

; URLFormat specifies a format string for what URL is sent to the listener.
; Behaves like TitleFormat (see above).
; The default is no format string.
; URLFormat=http://www.server.com/redirect.cgi?url=%s

Ta opcja jest podobna do powyższej. URL ustawiony w tej opcji będzie użyty zamiast URL źródła transmisji strumieniowej.

Listing 1.26: Ustawianie pulicznego statusu źródła strumienia

; PublicServer can be always, never, or default (the default, heh)
; Any setting other than default will override the public status
; of the source plug-in or of a SHOUTcast Server that is being relayed.
PublicServer=default

Ta opcja określa czy serwer ma być opublikowany na liście publicznych serwerów, nawet, gdy serwer przekaźnikowy/wtyczka źródłowa określa przynależność do tej listy.

Listing 1.27: Zezwalanie na przekazywanie

; AllowRelay determines whether or not other SHOUTcast Servers will be
; permitted to relay this server.  The default is Yes.
AllowRelay=Yes

Opcja AllowRelay określa czy inne serwery mogą przekazywać treść nadawaną przez ten serwer. Jeśli serwer nie zamierza używać serwerów przekaźnikowych, wartość opcji należy ustawić na No.

Listing 1.28: Zezwalanie serwerom przekaźnikowym na publikowanie adresu źródła

; AllowPublicRelay, when set to No, will tell any relaying servers not
; to list the server in the SHOUTcast directory (non-public), provided
; the relaying server's Public flag is set to default.  The default is
; Yes.
AllowPublicRelay=Yes

Opcja AllowPublicRelay określa czy serwer ma być opublikowany na liście publicznych serwerów SHOUTcast, pomimo że serwer którego treść jest przekazywana jest już umieszczony na tej liście. Należy zauważyć, że opcja PublicServer może nadpisać to ustawienie.

Listing 1.29: Ustawianie MetaInterval

; MetaInterval specifies how often, in bytes, meta data sent.
; You should really leave this at the default of 32768, but the option is
; provided anyway.
MetaInterval=32768

Tej opcji nie należy zmieniać.

Konfiguracja dostępu

Listing 1.30: Ustawianie maksymalnego czasu dla słuchacza

; ListenerTimer is a value in minutes of maximum permitted time for
; a connected listener.  If someone is connected for longer than this
; amount of time, in minutes, they are disconnected.  When undefined,
; there is no limit defined.  Default is undefined.
; ListenerTimer=600

Nie jestem pewien czy ta opcja będzie komukolwiek potrzebna. Zasadniczo, jeśli użytkownik jest podłączony za długo, serwer go rozłączy. Jedynym uzasadnieniem jakie przychodzi mi na myśl, to rozłączanie nieaktywnych użytkowników lub ludzi, którzy powinni robić coś innego niż słuchać radia. Wartość jest mierzona w minutach.

Listing 1.31: Ustawianie pliku z banami

; BanFile is the text file sc_serv reads and writes to/from
; for the list of clients prohibited to connect to this
; server.  It's automatically generated via the web
; interface.
; BanFile=sc_serv.ban

Ta opcja określa nazwę pliku z listą użytkowników, którzy maja zablokowany dostęp do tego serwera. Wartość domyślna to sc_serv.ban, ale można ustawić dowolną inną nazwę dla tego pliku.

Listing 1.32: Ustawianie listy Rip

; RipFile is the text file sc_serv reads and writes to/from
; for the list of client IP addresses which are *ALWAYS* permitted
; to connect to this server (useful for relay servers).
; This file is automatically generated via the web
; interface.  Note that if your server is FULL, and someone
; from a Reserved IP connects, the DNAS will force the person
; listening for the longest time off to make room for the new
; connection.
; RipFile=sc_serv.rip

Choć brzmi ponuro, RIP właściwie oznacza Zarezerwowane IP (ang. Reserved IP). Opcji tej należy używać dla znajomych lub osób, które są uważane za ważniejszych od przeciętnych użytkowników. Jeśli aktualnie obsługiwana jest maksymalna liczba użytkowników i połączy się jedna z osób z listy RIP, serwer rozłączy osobę podłączoną najdłużej i obsłuży nowe połączenie.

Listing 1.33: Zezwalanie na połączenia tylko osobom z listy RIP

; RipOnly, when set to Yes, will only allow IP addresses listed in the Reserved
; IP list to connect and relay.  All other connections for listening will be denied.
; This is really only useful for servers whose sole purpose is to provide the
; primary feed to all public relays.  Setting this value to Yes also forces the
; server into Private mode, since listing this server in the directory would
; be pointless.  Default is No.
; RipOnly=No

Ta opcja spowoduje, że tylko osoby z listy RIP będą mogły połączyć sie z Serwerem SHOUTcast. Opcji tej można użyć do utworzenia prywatnego radia lub do ograniczenia połączeń tylko dla ustalonych serwerów przekaźnikowych.

Konfiguracja masowa

Listing 1.34: Ustawianie unikalnych zmiennych

; Unique: assigns a variable name for use in any configuration item which points to a
; file.  Useful for servers running lots of SHOUTcast Servers that have similar
; configuration parameters, excepting log file names, ban file names, etc.  Any
; parameter that takes a pathname can include the character $, which will
; substitute $ for the variable assigned here.  Keep in mind that the unique
; variable can only be used after it is defined, so don't try to use a unique
; variable substitution in a path before you define it.  For example, you
; could set:
; Unique=my_server
; and then define Log=/usr/local/SHOUTcast/$.log in an included configuration
; file.  Default is Unique=$, so that by default any file with $ in the name
; won't substitute anything at all.

Zasadniczo, jeśli uruchamiamy dużo Serwerów SHOUTcast, dużym utrudnieniem byłaby zmiana wszystkich wpisów konfiguracyjnych jak logowanie/bany/itp tak, aby dla każdego serwera były unikatowe. Zamiast tego, można ustawić wartość zmiennej Unique na cos unikalnego, a znak $ będzie zastępowany tą wartością. Np. jeśli w jednym pliku ustawimy Unique=Jazz, a w innym Unique=Rock, wtedy wpis Log=/var/log/$.log będzie zamieniany na /var/log/Jazz.log w pierwszym wypadku i na /var/log/Rock.log w drugim. Opcja bardzo przydatna, podczas pracy z wieloma Serwerami SHOUTcast z podobną konfiguracją.

Listing 1.35: Ustawianie wspólnych zmiennych

; Include: instructs the sc_serv to read from the named configuration file,
; *at the point of insertion of the Include statement*, and process as though
; the included file was part of itself.  Note that all configuration parameters
; in the DNAS configuration file are processed first to last, so if an item is defined
; twice in a configuration, the last item to process will be the one that takes
; effect.  For this reason, it's usually a good idea to use the Includes first
; in a configuration file.
; example:
; Include=/usr/local/SHOUTcast/common.conf
; Default is not applicable.

Jeśli uruchamiamy wiele Serwerów SHOUTcast i chcemy użyć tych samych ustawień opcji bez konieczności ustawiania ich we wszystkich plikach konfiguracyjnych, można ustawić wartość tej opcji, aby wskazywała na plik, który zawiera ustawienia opcji konfiguracyjnych takie same dla wszystkich serwerów.

Konfiguracja optymalizacji

Listing 1.36: Ustawianie ilości użytych procesorów

; CpuCount is used to explicitly limit the DNAS to dominating a finite
; amount of processors in multiprocessor systems.  By default,
; SHOUTcast creates one thread for every processor it detects in the
; host system, and assigns listeners equally across all the threads.
; In the event SHOUTcast doesn't correctly determine the number of
; CPUs in your host, or if you for whatever reason want to force
; the DNAS to not use other processors, you can say so here.
; Default behavior is to use as many processors as the DNAS detects on
; your system.
; CpuCount=1

Na systemach z wieloma procesorami opcja ta określa ilość procesorów wykorzystywanych przez Serwer SHOUTcast. Domyślne zachowanie, to utworzenie jednego wątka na procesor i rozdzielanie słuchaczy na wszystkie wątki. Jeśli wartość opcji będzie mniejsza od ilości procesorów w systemie spowoduje to pozostawienie nieobciążonych procesorów, aby mogły wykonywać inne czynności.

Listing 1.37: Ustawianie przerw w wysyłaniu danych

; Sleep defines the granularity of the client threads for sending data.
; DNAS 1.7.0, per client thread, will send up to 1,024 bytes of data
; per socket (or less depending on the window available), and then
; sleep for the provided duration before repeating the whole process.
; Note that making this value smaller will vastly increase CPU usage on
; your machine.  Increasing reduces CPU, but increasing this value too far
; will cause skips.  The value which seems most optimal for 128kbps
; streaming is 833 (833 microseconds per client poll) on our test labs.
; We wouldn't recommend setting it any lower than 100, or any higher than
; 1,024.  If you have a slower machine, set this number lower to fix
; skips.
; Default value is 833.
; Sleep=833

Serwer SHOUTcast będzie wykorzystywał wartość tej opcji w określaniu długości przerw podczas wysyłania danych. Im wyższa wartość, tym dłuższa przerwa, im niższa wartość, tym krótsza przerwa i większe użycie CPU. Na wolniejszych systemach można ustawić tę wartość na niższą niż domyślna. To spowoduje, że Serwer SHOUTcast będzie wysyłał dane do użytkowników częściej. Najlepiej pozostawić domyślną wartość niezmienioną.

Listing 1.38: Ustawianie wyjścia XML

; CleanXML strips some whitespace and line feeds from XML output which
; confuses some (poorly written) XML parsers.  If you get XML rendering errors,
; try turning this on.  Default is No (off).
; CleanXML=No

Opcją tą nie należy się przejmować, jeśli nie używa się niestandardowego parsera XML, który tworzy niestandardowe statystyki dla serwera. Jeśli ten parser nie potrafi obsługiwać białych znaków i znaków końca linii w plikach XML, należy ustawić wartość tej opcji na Yes, wtedy wszystko powinno zadziałać poprawnie.

Wnioski

W tym momencie Serwer SHOUTcast powinien być już skonfigurowany. W zastosowaniach biznesowych radzę włączyć logowanie WC3, ponieważ może być łatwo analizowane i użyte do tworzenia niestandardowych statystyk. Powinno się także ustawić hasło administratora. Można także użyć opcji masowej konfiguracji, jeśli uruchamia się wiele Serwerów SHOUTcast.

Z ustawioną konfiguracją zajmiemy się uruchamianiem serwera. Na początek uruchomimy prostą transmisję na żądanie, później zajmiemy się SHOUTcast Trans (ponieważ jest to nieco bardziej skomplikowane).

2.  Pierwsze kroki z Serwerem SHOUTcast

Uruchamianie strumieniowania na żądanie

Jak to pokazano w rozdziale o konfiguracji, strumieniowanie na żądanie automatycznie tworzy listę odtwarzania na podstawie zawartości katalogu z treścią. Ebuild Serwera SHOUTcast ustawia ten katalog na /opt/SHOUTcast/content. Rozpocznijmy od utworzenia prostego strumieniowania mp3 na żądanie.

Najpierw będziemy potrzebowali zdobyć skądś plik mp3 i wrzucić go do katalogu z treścią. Plik sample.mp3 wezmę z katalogu /Mp3, który wcześniej stworzyłem.

Listing 2.1: Kopiowanie pliku mp3 do katalogu z treścią

# cp sample.mp3 /opt/SHOUTcast/content/
# cd /opt/SHOUTcast/content/
# ls
sample.mp3

OK, więc mamy już plik mp3. Teraz musimy uruchomić nasz Serwer SHOUTcast, żeby plik mógł być osiągalny.

Listing 2.2: Uruchamianie Serwera SHOUTcast

# /etc/init.d/shoutcast start
 * Starting Shoutcast Server...
*******************************************************************************
** SHOUTcast Distributed Network Audio Server
** Copyright (C) 1998-2004 Nullsoft, Inc.  All Rights Reserved.
** Use "sc_serv filename.ini" to specify an ini file.
*******************************************************************************
                                                                         [ ok ]

Mały baner jest wyświetlany, żeby być pewnym, że proces nie umarł zaraz po uruchomieniu (czyli, żeby być pewnym, że serwer naprawdę wystartował). W tym momencie Serwer SHOUTcast już działa! Jak to wynika ze specyfiki strumieniowania na żądanie, serwer jest osiągalny TYLKO za pomocą przeglądarki. MPlayer lub cokolwiek inne nie będzie w stanie odtworzyć strumienia w takim formacie. W poniższym przykładzie, aby połączyć się ze strumieniem użyłem kmplayer uruchomionego bezpośrednio z mojej przeglądarki. Wynik można oglądnąć na poniższym zrzucie ekranowym.


Ilustracja 2.1: Treść na żądanie

Fig. 1: TreśćNaŻądanie

Niektórzy do obsługi formatów audio używają Audacious, więc ich przeglądarka może uruchomić Audacious, aby obsłużył strumień. Teraz, gdy uruchomiliśmy strumieniowanie na żądanie, postaramy się uruchomić SHOUTcast Trans, aby utworzyć prawdziwy radiowy serwer transmisji strumieniowej.

3.  Uruchamianie SHOUTcast Trans

Wprowadzenie do SHOUTcast Trans

SHOUTcast Trans oznacza SHOUTcast Trans(coder), ponieważ jest w stanie zmieniać szybkość transmisji bitów strumienia mp3 na niższą lub wyższą. SHOUTcast Trans przesyła strumieniowo pliki mp3 z listy odtwarzania zapisanej w pliku konfiguracyjnym. Rozpoczniemy konfigurację SHOUTcast Trans, aby w końcu mieć prawdziwą, boską strumieniową stację radiową. Rozpoczniemy otwierając plik konfiguracyjny dla SHOUTcast Trans, którym dziwnym trafem jest /etc/shoutcast/sc_trans.conf.

Listing 3.1: Otwieranie pliku konfiguracyjnego SHOUTcast Trans

(Najpierw instalacja SHOUTcast Trans)
# emerge shoutcast-trans-bin
(Następnie otwieranie pliku konfiguracyjnego SHOUTcast Trans)
# vi /etc/shoutcast/sc_trans.conf

Teraz, gdy mamy otwarty plik konfiguracyjny SHOUTcast Trans, możemy rozpocząć konfigurowanie źródła transmisji strumieniowej.

Konfigurowanie SHOUTcast Trans

Listing 3.2: Ustawianie listy odtwarzania

; PlaylistFile (required EVEN IF RELAYING) - play list file (to create, use
; find /path/to/mp3/directory -type f -name "*.mp3" > playlist_filename.lst
PlaylistFile=/opt/SHOUTcast/playlists/playlist.lst

Ta opcja określa, gdzie SHOUTcast ma szukać treści transmisji strumieniowej. Ta opcja wymaga istniejącej listy odtwarzania, więc kontynuujmy i stwórzmy listę odtwarzania. Utworzę ją bardzo szybko, na podstawie mojego katalogu /Mp3, o którym wspomniałem już wcześniej.

Listing 3.3: Tworzenie listy odtwarzania

# find /Mp3 -type f -name "*.mp3" >
    /opt/SHOUTcast/playlists/playlist.lst

Teraz, gdy mamy już listę odtwarzania, należy ją wskazać w pliku konfiguracyjnym, tak, żeby SHOUTcast Trans wiedział co ma przesyłać.

Listing 3.4: Ustawianie adresu IP i portu serwera

; Serverip/ServerPort are the target server to send to
Serverip=127.0.0.1
ServerPort=8000

Ta opcja określa gdzie wysyłać treść strumienia. W tym przewodniku będzie to adres IP i port Serwera SHOUTcast, który wcześniej skonfigurowaliśmy (wartości opcji DestIP oraz PortBase).

Listing 3.5: Ustawianie hasła Serwera SHOUTcast

; Password is the password on the sc_serv you're sending to.
Password=password_you_setup_in_sc_serv.conf

Jest to to samo hasło, które zostało ustawione w konfiguracji Serwera SHOUTcast.

Listing 3.6: Ustawianie informacji o strumieniu

; StreamTitle/URL/Genre define the data that appears on the directory and in the
; stream info.
StreamTitle=Chris Gentoo Beats
StreamURL=http://www.gentoo.org
Genre=JPOP Electronica And More!

Ta opcja ustawia tytuł strumienia (np Radio Jeden), URL (np http://www.radio-jeden.com) i gatunek (np Muzyka elektroniczna).

Listing 3.7: Ustawianie pliku z logami

; Logfile optionally denotes a text file to log sc_Trans to.  a kill -HUP
; will force a close and re-open of this file (but will also cease logging to
; the console)
LogFile=/var/log/sc_Trans.log

Ta opcja ustala położenie pliku z logami z SHOUTcast Trans. Wszystkie komunikaty trafiają własnie tu.

Listing 3.8: Ustawianie odtwarzania losowego

; Shuffle the play list
Shuffle=1

W tym miejscu należy zdecydować czy elementy listy odtwarzania mają być odtwarzane losowo. Większość ustawi tu 1. Jeśli jednak zamierza się przyjmować prośby o piosenkę, należy ustawić tu 0, później wytłumaczę jak to zrobić.

Listing 3.9: Ustawianie strumienia

; Bitrate/SampleRate/Channels recommended values:
; 8kbps 8000/11025/1
; 16kbps 16000/11025/1
; 24kbps 24000/22050/1
; 32kbps 32000/22050/1
; 64kbps mono 64000/44100/1
; 64kbps stereo 64000/22050/2
; 96kbps stereo 96000/44100/2
; 128kbps stereo 128000/44100/2
Bitrate=128000
SampleRate=44100
Channels=2
; Quality is from 1-10. 1 is best, 10 is fastest.
Quality=1

Bitrate ustawia prędkość transmisji bitów strumienia. Wartość może być ustawiona pomiędzy 8000 (8kbps) a 128000 (128kbps). SampleRate ustawia częstotliwość próbkowania strumienia. Wartość może być ustawiona pomiędzy 11025 (11025kHz) a 44100 (44100kHz). Channels ustala ile kanałów będzie w strumieniu. Wartość może przyjmować wartości od 1 (mono) do 2 (stereo). Quality ustawia jakość strumienia i jest kontrolowana przez Bitrate/SampleRate/Channels. Opcja ta określa jak kompresowany jest strumień. 1 ustawia najlepszą jakość, 10 da największą prędkość. Podczas ustawiania tych opcji należy pamiętać o przepustowości posiadanego łącza.

Listing 3.10: Ustawianie efektu przejścia

; Mode=0 for none, 1 for 100/100->100/0, 2 for 0/100->100/0
CrossfadeMode=1
; Length is ms.
CrossfadeLength=8000

Ta opcja ustawia efekt przejścia dla odtwarzanych utworów. Ustawienie wartości na 0 spowoduje wyłączenie efektu przejścia. Ustawienie 1 spowoduje wyciszenie pierwszego utworu i podgłośnienie drugiego. Ustawienie 2 spowoduje podgłośnienie pierwszego utworu i wyciszenie drugiego. Opcja CrossfadeLength określa jak długo w milisekundach ma trwać efekt.

Listing 3.11: Włączenie wykorzystania ID3

UseID3=1

Ta opcja określa czy należy używać informacji zawartych w znacznikach ID3.

Listing 3.12: Ustawianie statusu publicznego

; Public determines whether or not this station will show up in the directory
Public=0

Ta opcja określa czy strumień przekazywany do serwera powinien być oznaczony jako publiczny. Należy pamiętać, że wartość tej opcji może nadpisać ustawienie opcji PublicServer w pliku sc_serv.conf.

Listing 3.13: Ustawianie kontaktu ze słuchaczami

; Put stuff here for user interaction (AOL IM, ICQ, IRC)
AIM=AIMHandle
ICQ=
IRC=SHOUTcast

Opcja ta określa w jaki sposób można się skontaktować z DJ. Można ustawić kanały AIM lub ICQ. Można także uruchomić kanał IRC, w ten sposób można mieć kontakt z wieloma słuchaczami jednocześnie.

Podsumowanie konfiguracji SHOUTcast Trans

W tym momencie SHOUTcast Trans został skonfigurowany do przesyłania treści do Serwera SHOUTcast. Teraz można zacząć wysyłać strumień mp3!

4.  Pierwsze kroki z SHOUTcast Trans

Uruchamianie SHOUTcast Trans

Tak często jak używam SHOUTcast Trans z Serwerem SHOUTcast staram się uruchomić SHOUTcast Trans, który następnie uruchamia Serwer SHOUTcast (dużo prościej). Przystąpmy więc do uruchomienia SHOUTcast Trans.

Listing 4.1: Uruchamianie Shoutcast Trans i Serwer Shoutcast

# /etc/init.d/shoutcast_trans start
 * Starting Shoutcast Server...
*******************************************************************************
** SHOUTcast Distributed Network Audio Server
** Copyright (C) 1998-2004 Nullsoft, Inc.  All Rights Reserved.
** Use "sc_serv filename.ini" to specify an ini file.
*******************************************************************************
                                                  [ ok ]
* Starting Shoutcast Trans...                     [ ok ]

Odsłuchiwanie strumienia SHOUTcast Trans

Teraz, gdy SHOUTcast Trans jest już uruchomiony, zacznijmy odsłuchiwać strumień. W tym przykładzie używam MPlayera.

Listing 4.2: Odsłuchiwanie strumienia

# mplayer -cache 1024 http://127.0.0.1:8000/
...
Playing http://127.0.0.1:8000/.
Connecting to server 127.0.0.1[127.0.0.1]:8000 ...
Name   : Chris Gentoo Beats
Genre  : JPOP Electronica And More!
Website: http://www.gentoo.org
Public : no
Bitrate: 128kbit/s
Cache size set to 1024 KBytes
Connected to server: 127.0.0.1
Cache fill:  9.38% (98304 bytes)    Audio file detected.
==========================================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
MP3lib: init layer2 and 3 finished, tables done
mpg123: Can't rewind stream by 156 bits!
AUDIO: 44100 Hz, 2 ch, 16 bit (0x10), ratio: 16000->176400 (128.0 kbit)
Selected audio codec: [mp3] afm:mp3lib (mp3lib MPEG layer-2, layer-3)
==========================================================================
Checking audio filter chain for 44100Hz/2ch/16bit -> 44100Hz/2ch/16bit...
AF_pre: af format: 2 bps, 2 ch, 44100 hz, little endian signed int
AF_pre: 44100Hz 2ch Signed 16-bit (Little-Endian)
AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) (2 bps)
Building audio filter chain for 44100Hz/2ch/16bit -> 44100Hz/2ch/16bit...
Video: no video
Starting playback...

To było trochę oszukane. Opcja -cache nadpisała moje ustawienie wielkości bufora, który był całkiem spory. Voila! W tym momencie słuchamy naszego strumienia. W następnym rozdziale pokażę co jeszcze można zrobić wykorzystując Serwer SHOUTcast.

5.  Zaawansowane zastosowania SHOUTcast

Zastosowanie w biznesie

W biznesie SHOUTcast można używać na kilka sposobów:

  1. Użycie strumieniowania na żądanie w celu uczynienia codziennych ogłoszeń bardziej interesującymi.
  2. Udostępnianie publicznych ogłoszeń w czasie rzeczywistym kiedy się pojawiają, tak, że wszyscy klienci od razu będą wiedzieli co się wydarzyło, a także przechowywanie ich w celu późniejszego strumieniowania na żądanie.
  3. Przeprowadzanie wywiadów i przechowywanie ich w celu późniejszego odtwarzania na żądanie.

Istnieje jeszcze wiele innych możliwości zastosowania Serwera SHOUTcast w biznesie. Używajmy strumieniowania mediów na żywo, zamiast starego nudnego tekstu.

DJ i SHOUTcast

Serwer SHOUTcast jest jednym z najbardziej popularnych serwerów wykorzystywanych zarówno przez początkujących DJ jak i weteranów. Dla początkujących polecam parę sztuczek, które podniosą klasę serwera i doznania użytkowników. Kluczem jest posiadanie intro. Daje ono słuchaczom pojęcie o stacji radiowej, do której się podłączyli. Ważne jest również opublikowanie serwera na yp.SHOUTcast.com (opisane w sekcji o konfiguracji Serwera SHOUTcast), żeby wszyscy wiedzieli gdzie się połączyć. Najbardziej unikatową funkcją, jest przyjmowanie próśb o piosenkę, więc należy włączyć tę możliwość. W tym celu należy wyłączyć losową kolejność odtwarzania utworów (opcja Shuffle w sc_Trans.conf) i posiadać przynajmniej 10 utworów. Następnie można przyjmować żądania o piosenkę. Gdy ktoś zażąda pewnego utworu, należy go po prostu dodać na koniec listy odtwarzania, a następnie użyć następującego skryptu, aby poinformować SHOUTcast Trans o zmianie listy.

Listing 5.1: djcontrol

#!/bin/bash

case "$1" in
        "reload")
                kill -s USR1 `cat /var/run/SHOUTcast_Trans.pid`
                ;;
        "next")
                kill -s WINCH `cat /var/run/SHOUTcast_Trans.pid`
                ;;
        *)
                echo "Invalid command"
                ;;
esac

Kiedy dodamy nową pozycję do listy odtwarzania, należy poinformować SHOUTcast Trans o tym, że lista odtwarzania się zmieniła.

Listing 5.2: Przeładowanie listy odtwarzania

# djcontrol reload

Użytkowników powinno się poinformować, po którym utworze zostanie odtworzona piosenka na żądanie. Można także przeskoczyć kolejne utwory:

Listing 5.3: Przeskakiwanie przez listę odtwarzania

# djcontrol next

Należy pamiętać, aby nie przeskoczyć za dużo utworów, ponieważ nie ma możliwości cofnięcia się. Gdy w końcu dotrzemy do żądanego utworu, rozpocznie się odtwarzanie prośby o piosenkę. Radzę poczekać na przynajmniej 5 próśb o piosenkę zanim zacznie się je realizować. W ten sposób lista odtwarzania nie skończy się za szybko. Jeśli zacznie brakować próśb o piosenkę, należy skopiować listę odtwarzania kolejnej sesji w miejsce listy odtwarzania próśb o piosenkę i przeładować SHOUTcast Trans. Gdy aktualny utwór się skończy, serwer zacznie używać nową listę odtwarzania.

Wnioski

W tym momencie kończę przewodnik po SHOUTcast Server i SHOUTcast Trans. Mam nadzieję, że zawarte tu informacje przydadzą się wam. Należy o korespondencję z komentarzami i sugestiami. Życzę samych przyjemności z waszego nowego Serwera SHOUTcast!



Drukuj

Zaktualizowano 2 listopada 2006

Podsumowanie: Ten przewodnik przeprowadza przez kroki potrzebne do uruchomienia radia przesyłanego strumieniowo przy użyciu Serwera SHOUTcast i SHOUTcast Trans.

Chris White
Autor

Shyam Mani
Redaktor

Piotr Chmyłkowski
Tłumaczenie

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.