인터넷 라디오 방송 서버 (icecast)

### icecast, Shout, Liveice 설정과 사용하기

– 인터넷 라디오 방송

Netsgo Linux & Unix 동호회 (LUX) 5월 세미나 자료

글 쓴이 : 이광우 ( dubo at

netsgo.com )

1. Icecast –  the server

     1.1 Icecast란 어떤 것인가

     1.2 Icecast 설치

     1.3 Icecast의 설정

         1.3.1 Icecast.conf

         1.3.2 MP3 직접 보내기(Staticdir)

         1.3.3 서버간 중계(Relaying)

         1.3.4 접속 제어

     1.4 그외의 내용들

2. Shout –  a static file streamer

     2.1 Shout 설치하기

     2.2 Shout를 이용한 MP3 스트리밍

         2.2.1 shout.conf

     2.3 Shout를 이용 여러 채널 스트리밍

     2.4 Shout에 관한 잡다한 얘기

3. Liveice –  a re-encoding streamer

     3.1 설치하기 – Liveice with notlame

     3.2 liveice.cfg 설정하기 – liveiceconfigure.tk

         3.2.1 Liveice를 이용한 MP3와 마이크를 이용한 생방송

         3.2.2 Liveice를 이용 CD음악 방송

         3.2.3 Soundcard의 linein을 통한 방송 – 외부 입력 장치

     3.3 그 밖의 얘기들

4. 더 알고 싶을 때 볼꺼리들

1. Icecast – the server

1.1 Icecast란 어떤 것인가

icecast는 mpeg audio  기술을 기반으로 음성방송(audio  broadcasting)을

가능게하는 스트리밍 서버입니다. 이를 이용해서 직접 mp3를 클라이언트의

요구에 따라 전송해 줄수도 있고, shout/iceplay, liveice 등과 같은 도구

를 통해 들어오는 스트림(sources)을 다른 클라이언트에게 서비스를 해 줄

수 있습니다.

사용할 수  있는 운영체제(platform)로는   Linux, Major  unixes, OS/2,

BeOS, window 95/98 NT 등에서  가능하게  되어 있다고 하지만, 여기서는

linux기반에서의 icecast에 대해서 이야기를 하겠습니다. (다른 유닉스 계

통도 비수무리 할껄요.. ^^)

icecast로 스트리밍되는 방송을 들을 수 있는 도구는 다음과 같은 것이 있

습니다.

    Unix Clients    :  XMMS, mpg123, FreeAmp, Xaudio

    Windows Clients :  Sonique, K-Jofol, WinAmp

    Mac Clients     :  MacAmp, SoundJam

1.2 Icecast 설치

http://www.icecast.org 에  가셔서

Download란 메뉴를 누르면  그 안에

Lasteat release 라고 하는 부분에서 소스를 내려 받습니다. (참고 : 윈용

바이너리도 내려 받을 수  있죠) icecast-1.3.5.tar.gz를 내려  받습니다.

바로 아래 shout-0.8.0.tar.gz가 있죠  이것도 받아 놓습니다.  liveice는

CVS로 받겠습니다.

바로 아래 shout-0.8.0.tar.gz가 있죠  이것도 받아 놓습니다.  liveice는

CVS로 받겠습니다.

icecast는 linux  kernel과 같은   방식으로 릴리즈 한다고  합니다.  즉,

*.3.* ..홀수니까 개발버젼이겠죠. 하지만, 이거 써도 문제 없더군요.

이제 icecast 설치를 합니다.

         #tar xvzf icecast-1.3.5.tar.gz

         #cd icecast-1.3.5

         #./configure

         #make

         #make install

이렇게 하면 /usr/local 안에 icecast란 디렉토리가 만들어 지면서  그 안

에 설치가 됩니다. ./configure 할 때 여러 옵션이  있는데 tcp-wrapper를

사용하려면 –with-libwrap을 옵션으로 적어주고 icecast서버 어드민과 운

영을  cripted password로 사용하려면 –with-cript 란 옵션을 적어  주면

됩니다. 이때 password는 mkpasswd란 명령을 써서 만들어  내고, 설정파일

에 적어 줄 때 password뒤에는 아무것도 없어야 됩니다.

참고로 자신의 시스템이 한번의 system call로 4096바이트 이상을 읽어 올

수 있고, 서버에 듣는 사람이 많거나, 높은 bitrate의 mpeg data를 제공하

는 경우 src디렉토리 안의 icetype.h에 있는 SOURCE_BUFFSIZE의 크기를 증

가(64KB정도까지) 시키면 된다고 합니다.

그담에 ./configure 하고 make 하면 되겠죠.. ^^;

1.3 Icecast 설정

/usr/local/icecast에   설치가  되었다면   그  안의   conf  디렉토리에

icecast.conf.dist가 있습니다. 이것을 bin 디렉토리안에  icecast.conf라

는 이름으로 복사를 합니다. 이건 icecast(실행파일)가 자신이  있는 디렉

토리안에서 conf 파일을 찾기 때문에 복사를 하는 겁니다.  편집기로 열면

영어로 된 설명과 함께 지시자(directives)들이 나오죠.

1.3.1 icecast.conf 설정

편집기를 열고 수정을 합니다.

         #vi icecast.conf

다음은 그 안에 나오는 지시자들의 내용입니다.

Location , rp_email, server_url

http://yp.icecast.org 등의

디렉토리서버에 자신의 icecast server를  나

타낼 때 자신의 방송서버의 위치와 관리자메일 그리고, 자신의 서버의 URL

을 나타내 줍니다. 디렉토리서버에 공개하지 않는 다면 안적어도 됩니다.

max_clients

동시에 접속가능한 클라이언트의 수 (듣는 사람의 수를 제한 할 수 있죠)

max_clients_per_source

소스(채널)도 여러개일 수 있는데 각 소스마다 들을 수 있는  사람의 수를

제한 해 줍니다.

max_sources

동시에 icecast server에 제공될수 있는 소스의 최대 수

max_admin

동시에 서버에 접속할수 있는 admin의 수

throttle

이건  단위가  Megabytes  per   second 인데   어느정도  까지의  대역폭

throttle

이건  단위가  Megabytes  per   second 인데   어느정도  까지의  대역폭

(bandwith)를 사용할 수 있는지를 정합니다. 이 이상이 되게 되면 모두 접

속이 거부가 되죠.

use_meta_data

mp3로 방송할 때 title streaming(파일이름 즉, 제목 보여주기)을 하게 해

줍니다.

streamurl

소스의 URL이 정해지지 않았다면 여기에 쓰여진 주소로 대체 됩니다.

streamurllock

소스가 자신의 url을 변경할수 있기를 원치 않을 때 1로 set합니다.

encoder_password, admin_password, oper_password

각각의 뒤에 패스워드를 적어 줍니다. 기본값은 hackme입니다.  이것을 자

신이 원하는 password로 정해주면 됩니다. 컴파일 할 때  –with-cript 라

는 옵션을 주고 했다면 mkpasswd로 만든 패스워드를 적어주면  됩니다. 이

때 패스워드 뒤에 다른 아무것도 남아있지 않게 합니다.

icydir

주석을 풀면 icy 디렉토리서버에 자신의 서버를 알리게 됩니다.

directory

이 뒤에 적어주는 것은 xaudiocast 디렉토리서버에 자신의  서버를 나타내

게합니다.

touch_freq

자신의 서버가 디렉토리서버에 상태를 업데이트하는 시간간격 기본값은  5

hostname

이것이 주석처리가 되어  있는 상태(없으면) 모든  IP에서 오는  스트림을

listen할수 있고, 이곳에 도메인이나 IP를 적게 되면 icecast 서버는 오직

그 IP에서 오는 스트림만 듣어서 서비스 하게 된다. 잘못된 아이피를 적으

면 작동안함니당..음..

server_name

이곳에 자신의   도메인 네임이나  IP를 적어   줍니다. 꼭~~!!  하세요..

icecast.conf에서 이것만 고치고 저장하고  나면 기본적으로 사용할  수는

있습니다.

force_servername

디렉토리 서버는 기본적으로 아이피를 사용하는데 이것이 1로 되어 있으면

server_name에 쓰여 있는 것을 사용하게 됩니다. proxy 서버의  안쪽에 있

는 경우 유용합니다. -.-;

mount_fallback

보통 클라이언트에서 요청한 스트림이 없는 경우 디폴트  스트림을 전송하

게 됩니다. 그러나 이값이 0으로  되어있으면 요청한 스트림이 없는  경우

HTTP 404 Stream Not Found를 받게 됩니다.

port

icecast server가 소스를 듣거나 연결을 받아 들일 때  사용하는 포트번호

입니다. 두 개의 포트를 사용합니다. 그건 스트림 소스로서의 윈앰프로 스

트림을 서버에 전송하는 경우… 윈앰프가 연결하는 연결포트  = 설정포트

+ 1 하기 때문입니다. 윈앰프를  사용하지 않는 경우 포트를 하나만  써도

관계없습니다.

logfile

서버를 시작할때마다 icecast.log를 비워주는 것이 좋습니다.

logfiledebuglevel

로그파일에 기록될 내용으 정도를  정합니다. 0는 debugging output이  없

고, 1,2는 그저그런 정도 3,4는 무지막지하게 나온답니다.

consoledebuglevel

위 지시자와 같은 내용이지만 출력이 icecast의 콘솔로 나옵니다.

reverse_lookups

1로 하면 아이피를 호스트네임으로 변환할 겁니다. 근데.. 대부분 IP만 가

진 클라이언트일테니 0으로 off 해두는 것이 좋을 것 같네요.

console_mode

icecast server가 시작할때의 모드입니다. 0은 로그정보와 함께  admin 콘

솔로 사용되고, 1은 로그정보없는 admin 콘솔로, 2는  로그파일윈도우로만

사용하고, 3은 icecast server를 daemon process로 시작하게 합니다.

client_timeout

소스스트림(liveice나 shout)의 연결이 끊겼을  때 소스가 서버와  연결이

다시 될 때 까지 몇초 동안 클라이언트의 연결을 기다리게  할지를 정합니

다.

kick_client

client_timeout이 0보다 클 때 효과가 있으며 소스의 연결기다리는 시간이

지난 경우에, 1일 경우 클라이언트와의 연결을 끊어버리고, 0일 경우 다른

스트림으로 클라이언트를 옮겨서 다른 스트림을 들을 수 있게 한다.

staticdir

웹브라우저에서 http://도메인또는IP:Port/file/ 을 했을 경우 에  나타나

는 디렉토리를 정한다.

stats_log

icecast server의 statistics를 덤프해 놓는 파일

stats_time

초단위로 얼마나 자주 statistics file을 업데이트 할지 설정한다.

alias

서버간의 중계와 여러개의 마운트 포인트를 사용할 수 있게 합니다.

예) alias /dubo  http://다른서버의도메인또는IP:포트번호(예를들어8000)

     alias /중경삼림두번째마운트포인트 /중경삼림첫번째마운트포인트

transparent_proxy

1로 셋팅을 하면 icecast server가 일종의 proxy처럼 행동한다.

kick_relays

다른 곳에 있는 icecast 서버의 스트림(방송)을 누군가가  alias된 자신의

서버에서 마운트시켜서 듣고 있다가 연결을 끊었을 경우 여기에 지정된 시

간만큼 소스와의 연결을 가지고 있는다. 그후에 원격지에 있는  다른 서버

의 스트림소스와의 연결을 끊는다.

acl_policy

클라이언트나 소스의 연결에 관한 인증정책의 하나 0은 거부,  1은 연결허

allow

all, client, source, admin 각각의 접속을 허가할 때  호스트마스크와 함

께 쓰일수 있습니다.

예) alllow all  *.co.kr      <– .co.kr로 끝나는 호스트에서의 모든 연

결을 받아 들입니다.

예) alllow all  *.co.kr      <– .co.kr로 끝나는 호스트에서의 모든 연

결을 받아 들입니다.

deny

all, client, source, admin 각각의 접속을 거부 할 때 쓰입니다.

예) deny admin  *        <– 다른 모든 호스트에서의 admin 접속을 불허

합니다.

1.3.1 mp3 직접 보내기(Static file)

icecast.conf에서 staticdir  에 지정한  디렉토리에 있는   *.mp3 파일은

icecast 서버하나 만으로도 스트림을 제공할 수 있습니다.  static에 지정

한 디렉토리는 클라이언트에서 웹브라우저를 실행시킨후  http://도메인또

는IP:Port/file/    하게되면 그안에  있는 파일의  내용을 보여줍니다.

staticdir에 지정한 디렉토리가 http://도메인또는IP:Port/file/ 에  대응

됩니다.

그것을 보고 윈앰프나 xmms 등으로 직접 http://localhost:8000/file/서른

즈음에.mp3  이렇게 적어 주면 그 mp3 파일을 들을 수 있습니다.

단, 이때 문제는 이 mp3 파일이 만들어진 bitrate로 그대로 전송이 된다는

소리죠. 128kbit/s 로 인코딩되어 있다면 그 속도 그대로  가게 됩니다…

결국 모뎀으로 듣게 되면 굉장히 거북한 소리가 나오게  됩니다. 모뎀으로

도 들을 수 있도록 서비스를 하기 원한다면 mp3를 인코딩 할 때 모뎀이 수

용할 수 있는 정도의 bitrate로 인코딩해야 겠죠.  32kbit/s정도면 별탈없

습니다. 서버의 대역폭이 충분치 않은  경우 이 정도로 해도 많은  사람이

듣는 경우 서버의 회선이 느려집니다. 이 문제 때문에 서버간 중계(relay)

가 필요하게 됩니다.

1.3.2 서버간 중계(Relaying)

중계(relay) 하는 방법에는 세가지가 있습니다. icecat.conf에서  alias로

하는 것은  aliased relay이고,   admin console에서도 할  수  있습니다.

pushing과 pulling relay는 admin console에서 하게됩니다.

pushing relay : 자신의 서버의 스트림을 다른 서버에 연결하는 것입니다.

   예)   relay   push   <자신의   서버의   스트림소스ID>

<Host:Port> <명령옵션>

pulling relay : 다른  서버(remote server)의 스트림을 자신의  서버에서

마운트시켜 릴레이해  달라고 요청해 온 것입니다.

   예) relay pull [-m <사용할 마운트명>] <가져올  스트림

의 url>

aliased relay : 다른 서버의 스트림을 alias로 마운트 해놓아서 클라이언

트의 요청이 들어    올 때 마다 연결 합니다.

    예) 콘솔에서 alias add 명령과 alias del  명령을 사용

합니다.

서버간의 릴레이가 필요한 경우는 사용하는 회선의 대역폭  때문인데 일정

한 용량의 bandwith를 가진 방송서버에 여러사람이 접속했을 경우 어느 한

도 이상으로는 더 이상 서버가 회선의 용량 때문에 서비스를 해 줄  수 없

지만, 다른 서버에 일회선의 연결로 중계를 할 수 있으면 그  다른 서버에

서 다시 여러 회선의 서비스를 해줄 수 있는 즉, 트리구조로  같은 방송을

더 많은 사람에게 들을 수 있게 해줍니다. 따라서, 넓거나  여유분이 있는

bandwith를 가진 다른 여러 중계서버(친구들 ^0^)가 있다면  더욱 좋겠죠.

(중계하는 사이트로 www.live365.com과 같은 사이트를 이용하는 것도 좋겠

죠.)

1.3.3 접속 제어

icecast.conf의 access와 deny를 이용 해서 호스트 기반의 접속을 제어 할

수 있습니다.  컴파일할 때  –with-libwrap 옵션을  주고 컴파일  했다면

/etc 디렉토리 안에 있는 hosts.allow와 hosts.deny에 허가하거나  거부할

수 있게 적어 놓을 수  있습니다.(root 권한이 있어야 합니다.)  icecast,

icecast_admin, icecast_source, icecast_client  별로 따로 설정을  할수

있습니다. icecast에 관해서 하면 모든 연결을 제어 할 수 있죠.  이 파일

을 사용하면 소켓에 쓰거나 읽기 전에 접속허용을 결정할 수 있다는 군요.

*.kr로 끝나는 호스트의 연결을  제외하고 모두 거부할때는  hosts.deny에

아래와 같은 줄을 추가하면 된다고 합니다.

예) icecast_client: ALL EXCEPT *.kr

1.4 그외의 내용들

Icecast console 에서의 명령어들과 users.aut, groups.aut, mount.aut 사

용법(클라이언트 인증관련내용)이 더  있습니다. 그리고,  웹브라우저에서

http://도메인또는IP:포트번호/list.cgi 하면 관련내용을 브라우저에서 볼

수 있습니다. list.cgi 자리에 올 수 있는 것은 admin 등이 더 있습니다.

“icecast.conf에서 server_name부분만 수정하면 기본적으로 사용할 수

있습니다.”

2. Shout – a static file streamer

Shout는 이미 인코딩되어 있는 mp3파일을 조금씩 읽어서 Icecast server로

데이터를 전송(streaming) 해주는 도구입니다. 이를 이용해서  플레이리스

트에 적힌 mp3를 순서대로 플레이해  줄수 있습니다. 또한 Static  file을

전송하기 때문에 CPU나 메모리의 사용량이  적습니다.   이게 장점이죠..

^-^

(참고로 liveice를 그냥 펜티엄120, 메모리32M에서 돌려보니 조금  느려지

는 것을 보았습니다. 좀더 가벼운 윈도우매니저를 사용하던가, shout를 사

용하는 것이 좋겠더군요.)

2.1 Shout 설치하기

http://www.icecast.org에 가셔서

Download를 눌러서 저 위에서 icecast소

스를 받은 곳에서 함께 받은 shout소스를 사용합니다.

         #tar xvzf shout-0.8.0.tar.gz

         #cd shout-0.8.0

         #./configure

         #make

         #make install

make 하고 나면 snprintf와 nanosleep이란 함수 선언이 불분명하게 되어있

다고 경고메세지가 두 개 뜨면서 컴피일이 완료가 됩니다.  snprintf는 윈

도바이너리로 컴파일할 때 쓰이는 함수로 짐작이 되고 nanosleep은 패턴을

찾아봐도 없더군요.. (전 프로그래밍 몰릅니당.. ^^;)

암튼 무시해도 되는 메시지입니다.

make install 하고 나면 /usr/local/icecast의 bin 디렉토리에 shout 라는

바이너리가 복사가 되고, etc 라는 디렉토리에  shout.conf.dist라는 파일

이 생기게 됩니다.

2.2 Shout를 이용한 MP3 스트리밍

2.2.1 shout.conf 설정하기

Shout는 실행을 시킬 때 컴맨드라인 옵션으로 주어되  되지만, 기본적으로

icecast 기본디렉토리에서 etc에 있는  shout.conf를 찾도록 되어  있습니

다.

         #cd /usr/local/icecast/etc

         #cp shout.conf.dist shout.conf

         #vi shout.conf

shout.conf의 지시자들 입니다.

server_name

자신의 머신의 IP나 도메인을 적어 주어야 합니다. icecast와 같은 머신에

있을때에만 localhost를 쓸 수 있습니다.

port

icecast.conf에 설정이 된 port번호를 적어야 합니다.

password

기본값은     letmein으로     되어있습니다.    하지만,     icecast에서

encoder_password에 정해준 password (hackme 였죠)와 같게 해야  합니다.

그렇지 않은 경우 Shout가 실행되다가 중단 됩니다.

mount

이 뒤에 적어주는 것이 마운트포인트입니다. 여러채널을 스트림하기  위해

서는 마운트포인트를 다 다르게 적어 주어야 합니다. 기본값은 default 지

만 모  좋아하는 대로  적어 주세요.  예를 들어  “/두보” 라고  적어주면

“http://자신의서버도메인또는IP:포트번호(8000이었죠)/두보” 라고 윈앰프

나 xmms에서 적어주면 이 두보란 스트림을 들을 수 있습니다.

name

뒤에 적는 것이 바로 xmms등 으로 들을 때 처음에 보여지는 방송의 이름입

니다. 전 모 이렇게 적죠.  “두보방송국” 혹은 “두보는 당근을 싫어  합니

다.” 이런 식으로요 아래에 있는 title_streaming을 no로 해놓은 경우에는

이 이름이 계속 떠있게 되죠.

desc

스트림에 대한 세부 설명정도 되죠. 디렉토리서버등 에서 쓰일수 있겠죠.

genre

장르를 써놓습니다. 일반적인 경우  크게 신경쓰실필요는 없습니다.  이것

역시 디렉토리서버에서 보여지게 되는 것입니다.

url

Icecast 서버외에 실제 운영하고 있는 서버가 있다던가 하면 적습니다. 스

트림과 연관된 서버를 적어 놓으면  되죠. 디렉토리 서버나 cgi에서  보여

집니다.

public

공개방송인지 사설 방송인지를 결정. 즉, icecast.conf에서  디렉토리서버

에 자신의 서버가 있다고 설정을 한 경우(icedir 또는  directory)에도 이

부분이 no로 되어 있으면 그 디렉토리 서버에서 보이질 않습니다.

short_titles

playlist에 적어 놓은 파일은 절대 경로로 저장이 되어 있습니다. 이 중에

서 path를 제외하고 타이틀을 보여주게 됩니다.

title_streaming

노래제목(파일이름)을 방송을 듣는 사람에게 보여줍니다.

id3

뭔지 몰릅니다…. ㅠ_ㅠ

title_streaming 할 때 id3 택을 쓴다고 하지만 몬 소린지 몰겠습니다. 신

경안써도 되더군요음냐.. 떠업.. ^^;

autocorrect

각 파일의 bitrate를 유지해 줍니다.

playlist

연주할 mp3파일의 목록을 적어 놓은 파일입니다.  안의 내용은 mp3의 절대

경로를 순서대로 적어 놓은 것입니다.

loop

목록에 적힌 mp3를 다 전송 했을 경우 다시 처음부터 반복 할 것인지를 정

합니다.

shuffle

무작위로 플레이리스트에 적힌 곡을 선택해서 icecast 서버로 전송합니다.

autodetect

mp3파일 고유의 bitrate를 자동으로  검색해서 플레이 합니다. no일  경우

default_bitrate로 스트림을 전송합니다. 하지만, bitrate가 다르면  듣기

거북한 스트림 전송이 일어 날 수 있습니다.

default_bitrate

bitrate를 지정해 주지 않은 경우 default 값으로 사용합니다.

force

다음에 전송할 곡이 default_bitrate와  맞지 않는 경우 건너  뛸것인지를

결정합니다.

daemon

Shout를 daemon 으로 돌릴 걸인지를 결정합니다. 기본값은 no  지만 yes가

더 나을 것 같네요.

verbose

Shout실행시 자세한 정보를 출력할지를 정합니다.

“shout.conf에서 server_name, password, playlist를  고치면 사용가

능 합니다. ”

2.3 Shout를 이용 여러 채널 스트리밍

Shout를   이용해서    여러   채널을   스트리밍하기    위해서는   단지

Configuration file이 여러개 필요합니다. 그 각각의 설정파일을  icecast

의 etc 디렉토리 아래에 놓고, shout를 -C 옵션을 사용해서 실행시킬 때마

다 다른 설정파일의 내용으로 실행을 시키면 됩니다.

(1.3.1이하 버전에서는 -m 옵션과 -B 옵션을 사용해야 했지만, 1.3.5 버전

에서부터는 -B 옵션이 필요 없습니다.)

각 설정파일마다 달라야 하는 부분은 mount 부분과  playlist 부분입니다.

그외에 name등도 달리 써줄수 있겠죠.  각 채널 마다 다르게 나와도  좋을

테니까요.

이런식으로 해서 몇 백개라도 스트리밍하는 것이 가능합니다.  단, 이때는

icecast.conf의 소스개수제한부분의 숫자를 늘려 주어야  합니다.

예) “중경삼림”이란 채널과 “두보”라는 채널을 돌려 봅니다.

플레이리스트

는 편의상 icecast 디렉토리  아래에 channel이라는 디렉토리를  만들어서

그 안에 몰아 놓았습니다. ^-^

/usr/local/icecast의 etc 디렉토리 안에서 합니다.

         #cp  shout.conf   중경삼림.conf

         #cp  shout.conf   두보.conf

         #cp  shout.conf   두보.conf

각각을 편집합니다.

         #vi  중경삼림.conf

         mount /중경삼림

         playlist ../channel/중경삼림.pls

         daemon yes

         #vi 두보.conf

         mount /두보

         playlist ../channel/두보.pls

         daemon yes

이렇게 고친후 저장하고 빠져나온 다음 /usr/local/icecast/bin에서 shout

를 실행 시킵니다.

         #./shout

         #./shout -C 중경삼림.conf

         #./shout -C 두보.conf

이렇게하면 세 개의 채널이 돌아가게 됩니다.

각 채널들을 들으려면 윈앰프나 xmms 등에서  다음의 url을 입력하면 됩니

다.

         첫 번째 스트림 :  http://자신의서버의도메인또는IP:8000

         두 번째 스트림 :  http://도메인또는IP:8000/중경삼림

         세 번째 스트림 :  http://도메인또는IP:8000/두보

첫  번째   것은 mount가   default로  되어   있어서 써주어야   하지만,

icecast.conf 설정시 요청한 스트림이 없을 때 다른  스트림으로 자동으로

넘어가게 설정되어 있어서(기본값) 첫 번째 스트림이 나오게  됩니다. 즉,

뒤에 /default 라고 써주어도 나오게 되죠.

2.4 Shout에 관한 잡다한 얘기

liveice와 함께 여러 채널을 방송하게 되는  경우에는 liveice를 먼저  실

행을 시키고 다음에 shout를  이용해서 여러채널을 스트리밍하는 것이  더

안정적입니다.

또한, 이건 해보지는 않았습니다만  shout를 이용해서도 DJ기능을  이용해

방송을 할 수가 있다고 합니다. 방법은 외부 DJ 프로그램을 이용하는 것입

니다. 이때 사용하는 컴맨드라인 옵션으로 -D <file> 과 -d 옵션이 있습니

다. 매번 곡이 플레이되기 전에 -D <file> 에 적은  file을 실행한답니다.

(DJ 프로그램은 찾아보세염… 푸헐 ^^)

3. Liveice –  a re-encoding streamer

Liveice는 shout와는  달리 실시간으로  다시 encoding을   해서 스트림을

icecast 서버로 전송합니다. 따라서,  믹서기능을 사용할 수 있는  반면에

CPU와 메모리사용이 shout 보다 좀더 많습니다.

Liveice를 설치하기 위해서는 mpg123와 raw  audio data를  mpeg layer 3

로 바꿔줄 수 있는 encoder가 필요 합니다.

이 문서 에서는 notlame이라는 encoder를 사용하도록 하겠습니다.  mpg123

가 없다면 freshmeat에서 찾아서 설치하세요. (Liveice에서 사용할수 있는

encoder 로는 encoder, screamer, Lame3.*, L3enc, mp3enc, XingMp3enc 등

이 있습니다.)

3.1 설치하기 – Liveice with notlame

http://hive.me.gu.edu.au/not_lame에 가셔서 자신의 컴퓨터에 맞는

버전

의   notlame을    다운로드    받습니다.    notlame-370-i686.tgz과

notlame-370-i386.tgz가 있고 RPM버전도 있습니다. RPM 버전을 설치할  경

우 notlame이 PATH에 포함된 디렉토리에  위치해 있는 지 확인 해야  합니

다. 이 문서 에서는 notlame-370-i686.tgz를 사용 합니다.

         #tar xvzf notlame-370-i686.tgz

이렇게 하면 notlame 디렉토리가 생기고 그 안에 사용방법을 나타낸 USAGE

와    notlame   바이너리가    있습니다.    이   notlame    바이너리를

/usr/local/icecast/bin에 복사를 합니다.

         #cp notlame  /usr/local/icecast/bin

Liveice는             CVS를            이용해             받겠습니다.

http://star.arm.ac.uk/~spm/software/liveice.html로 가서  받아도

되지

만, 그곳에  있는 liveice 버전을 사용하여 컴파일하면 mixer 상태가 별로

안좋았기 때문에 http://www.icecast.org의 CVS를 이용해 liveice를  다운

로드 받겠습니다.

CVS를 사용하는 방법은 다음과 같습니다. 자신의 머신에 cvs  client가 있

어야 합니다. 대부분 있을 겁니다. 없다면 역시 설치를 해야 겠죠 .. ^^;

         #CVSROOT=:pserver:anonymous at

cvs.icecast.org:/cvsroot

         #export CVSROOT

         #cvs login

이렇게 하면 패스워드를 물어 봅니다. 하지만, 패스워드는  없습니다. (그

냥 엔터치세염)

자.. 이렇게 하면 바로 그냥 프롬프트가 떨어 집니다. 하지만,  연결은 되

어 있는 상태입니다. 이제 liveice 소스디렉토리를 놓을  곳으로 이동한다

음 다음의 명령으로 복사를 합니다.

         #cvs checkout liveice

그러면, liveice란 디렉토리가 생겨있는 것이 보일 겁니다. 이와 마찬가지

방법으로 icecast와 shout도 받을 수 있습니다. 단지 CVS는 현재 개발하고

있는 버전이기 때문에 약간 불안정할 수도 있습니다. ( 하지만, 모  별 문

제 없더군요.. *^-^* )

이렇게 받은 liveice는  configure가 없습니다. configure.in을  이용해서

만들어 주어야 합니다. 이건 autoconf를 실행하면 됩니다. ( 전 이거 몰라

서 한참 헤메고 다녔어요.. @.@ )

         #cd liveice

         #autoconf

         #./configure

         #make

이건 make  install  은 없습니다.  ls  해보면 나오는  다음의  파일들을

/usr/local/icecast/bin 에 복사를 하는 것으로 설치는 끝납니다.

         liveiceconfigure.tk

         frontend.tcl

         simple_frontend.tk

         liveice

3.2 liveice.cfg 설정하기 – liveiceconfigure.tk

liveice.cfg를   README.liveice를    보고   직접    편집해도   되지만,

liveiceconfigure.tk란     GUI설정도구를    사용할     수    있습니다.

/usr/local/icecat/bin에서 실행합니다.

         #./liveiceconfigure.tk

화면이 뜨면 다음과 같이 설정합니다.

Server 부분

자신의 도메인명또는IP를   적습니다. 콜론뒤의  번호는  포트번호입니다.

icecast.conf에서 설정한 번호를 적습니다.

Name 부분

역시 부분이 자신의 방송의 타이틀이 됩니다.

Genre 부분

자신의 방송의 장르를 써주면 됩니다. various 처럼 원하는 것을  쓰면 됩

니다.

URL 부분

자신의 스트림과 연관된 서버의 주소를 적습니다. 자신이 서버를 운영한다

면 그 서버의 주소를 적습니다.

Directory 부분

private으로 선택하면 디렉토리서버에  meta정보를 보내지 않습니다.  즉,

공개를 안하는 것이죠. 아는 사람만 올수 있도록.  public은 디렉토리서버

에 자신의 스트림이 있다는 것을 공개하는 거죠.

Login Type 부분

icy 와 x-audiocast 가 있는데 x-audiocast가 더 선택할 수 있는  폭이 넓

다고 하지만, 그냥써도 별문제는 없군요.

Password 부분

기본값으로    letmein이     써있지만,     이것을    icecast.conf의

encoder_password에서 지정한 password인 hackme로 바꾸어 주어야 합니다.

그렇지 않으면 스트림을 보낼 수가 없습니다.

PCM Audio Format 부분

기본값으로 22050 Hz가 써있습니다. 이것이 대역폭을 나타내죠. 바꾸어 줄

수 있습니다. 한 스트림에 높은 대역폭을 할당한다면 많은  사람이 듣기에

는 좀 벅찹니다. 다시한번 릴레이가 생각나는 대목이죠.

MONO 부분

STREO 로 선택할 수도 있습니다.

Soundcard 부분

사운드카드가 있다면 enable 시키는 것이 좋겠죠. 없어도 방송은 가능합니

다.

Half_duplex, Full_duplex 부분

사운드 카드를 통해 입출력을 동시에 할수 있도록 하는  것이 Full_duplex

입니다.  mixer   mode를  사용할   때 마이크   입력을   동시에  하려면

Full_duplex여야 하겠죠.

Encoder 부분

종류에 맞는 것으로 선택해 줍니다. 버튼을 누르면 목록이 나옵니다. 기본

값으로 LAME3가 선택이 되어 있습니다. 이 값은 notlame을 사용하는데에도

쓰입니다.

./notlame 을 적어 줍니다.

Bitrate 부분

기본값 32000  즉, 32000bps로 스트림을 전송합니다. 따라서 이정도  속도

면 56K 모뎀으로도 무리없이 들을 수 있겠죠. 하지만, 역시 icecast서버에

접속자가 많아 질 경우 회선의  대역폭이 충분치 않다면 약간씩  끊어지는

현상이 나타날 수 있습니다. 이 경우에는  더 낮은 bitrate 로 바꾸어  주

고, streo인 스트림도 mono로 바꾸어주고 하는 등의 방법을 생각해  볼 수

있겠죠.

VBR Qulity 부분

Xing encoder에서 variable bitrate mode를 사용할 때의 quality factor입

니다. 별 관계없는 듯 하군요.

Soundcard Only, Mp3Mixer mode 부분

Soundcard Only 부분은 CD를 통한 방송이나 Linein을 통한  방송을 할경우

에 선택을 합니다. Mp3Mixer mode 부분은  MP3를 이용한 방송에서  믹서모

드를 사용하는 경우에 선택합니다.

Playlsit 부분

이미 만들어진 playlist가 있다면  그 경로명과 함께 적어줍니다.  없다면

만들고 싶은 playlist의 이름을 적고 옆에 있는 Create 버튼을  누르면 자

동으로 하드디스크를 검색해서 playlist를 작성해 줍니다. ( find / -name

“*.mp3” > playlist  : 이런식으로 만든 것과 같습니다. )

Mixer control 부분

manual로 하면 직접 조정  할 수있습니다. 키보드나 혹은  frontend.tcl을

이용해서 믹서를 조정할 수 있습니다.

Command Log, Track Log 부분

로그파일입니다.

Save Config File As 부분

liveice.cfg 란 파일이름을 다르게 지정할 수도 있습니다. 이 버튼을 눌러

야 config 파일이 만들어 집니다.  저장한 후에 Exit 버튼으로 종료  합니

다.

3.2.1 Liveice를 이용한 MP3와 마이크를 이용한 생방송

Server,  Name,  Genre,   URL, Password(hackme),   Encoder(./notlame),

Playlist 를 적습니다.

Mp3Mixer mode 선택합니다.

liveice.cfg를 저장한 후

         #./liveice

이렇게 하면 터미널 창에 몇가지 정보와 함께 채널선택하는 부분이 보입니

다. 그리고, 하나의 채널이 자동으로 스트리밍됩니다.  그 아래에 있는 채

널을 동시에 내보낼 수도 있고, 하나를 스트리밍하는 동안 다른 곡을 골라

놓은 후 교대로 사용할 수 있습니다. 물론 마이크도 사용가능합니다.

스페이스바를 누르는 것으로 마이크가 활성화  되기도 하고  뮤트도 됩니

다. “#”을 누르면 Playlist를 다시 읽습니다.

키보드 왼쪽의 1,2,3,4,5까지의 숫자와 그 아래의 4줄이 키보드 스위치(전

체 20개)입니다. 하나의 채널에서 위쪽의 두줄(10개)을 쓰고, 다음 채널에

서 아래쪽 두줄을(10개)을 씁니다.

channel 1       channel 2

앞 트랙으로이동   1 a

다음트랙으로 이동 q z

채널의 start/stop         2 s

채널 reset        w x

채널의 start/stop         2 s

채널 reset        w x

볼륨크게          3 d

볼륨작게          e c

플레이속도올림    4 f

플레이속도내림    r v

Sticky mode on/random/off       5 g

채널미리보기      t b

Stiky mode : 자동으로 다음곡을 연주하게 되는데 누를 때마다  위의 세가

지 상태로 갑니다.

키보드 조작으로 믹서기능을 사용하기 번거롭다고 생각한다면, 다음과  같

이 사용해서 GUI로 조작할 수도 있습니다. 그때는 liveice를  다음과 같이

파이프를 통해 실행 시켜야 합니다.

         #./frontend.tcl | liveice

이렇게 하면 마우스를 이용해 스피드, 볼륨, 곡 선택 등이 가능합니다.

3.2.2 Liveice를 이용한 CD 음악 방송

앞에 설정한 것과 대부분은  동일합니다. 이 경우에는 Playlist에  무엇이

적혀있건 관계없습니다. 왜냐하면, 참조하지를 않거든요. CD를 틀어  주기

위해선 다음의 두가지만 확인하면 됩니다.

         #./liveiceconfigure.tk

         Soundcard enabled

         Soundcard Only

즉, 사운드카드로   입력이 들어   가야 하고,   Mp3Mixer  모드가  아닌

Soundcard Only mode가 됩니다. 이렇게 설정을 바꾸어 주고 liveice.cfg를

저장하고 빠져나옵니다.

         #./liveice

이렇게 실행을 하면 터미널에 # 기호만 조금씩 왔다 갔다 합니다. liveice

의 mixer 기능을 사용할 수 없기 때문에 따로 믹서를 사용해야 합니다. 그

래야 CD와 마이크를 번갈아 가며 사용할 수 있습니다. KDE에서 기본제공되

는 믹서는 사운드카드로 들어가는 입력을  선택을 할 수가 없었기  때문에

GNOME에 있는 gmix를  사용합니다.

다음의 네단계로 요약 됩니다

         gmix(오디오 믹서) 띄우기 : #gmix

         gmix에서 CD의 “녹음” 선택 : CD음악이 나가게 됩니다.

         XMMS로 CD음악틀기

         gmix에서 Mic의 “녹음” 선택 : 마이크의 소리가 나가게 됩니다.

스트림이 Soundcard로부터 입력이 되어 Encoding 되고, 이것이 icecast 서

버로 보내지게 됩니다. 따라서, 곡이 끝날때쯤 소리를  줄여가다 gmix에서

Mic 부분의 녹음 부분을 선택하게 되면 마이크입력이 전송되게 됩니다. 이

런식으로 gmix를 통해 선택적으로 스트림을 내보내게 됩니다.

3.2.1에서의 MP3를 이용해서 방송을 할경우에는 마이크입력과 음악이 동시

에 Encoding되어 나갈 수 있지만, 이 CD를 이용한 방송이나 다음의 linein

을 이용한 방송에서는 어느하나만 Encoding 되기 때문에 번갈아 가며 믹서

에서 선택을 해주어야 했습니다.

3.2.3 Soundcard의 linein을 통한 방송 – 외부 입력장치

3.2.3 Soundcard의 linein을 통한 방송 – 외부 입력장치

설정은 3.2.1과  같고, 다만  믹서(gmix)에서 Line의   “녹음”을 선택해야

Liveice를 통해 Icecast 서버로의 스트림이 전송이 됩니다.

Soundcard의 linein에 외부의 오디오나 CD 플레이어, 워크맨  등을 연결하

여 방송을 할 수도 있습니다. 오디오에 마이크 믹싱 기능이 있는  경우 음

악과 동시 출력이 가능 합니다. ( 하지만, 제 미니콤포는 성능이 영 안 좋

군요… ㅠ_ㅠ )

linein을 이용하면 외부의 출력이 그대로 다시 Encodig되어  Icecast 서버

로 전송이 되기 때문에 실제 라디오도 실시간으로 들려 줄 수 있습니다.

외부장치에서 lineout이 있으면 그곳에서  나오는 것을 바로  Soundcard의

linein으로 보내주는 것이 좋겠더군요. 외부장치의 헤드폰 출력을  받아서

Soundcard의 linein으로 보내주었더니 들을  때 약간 출력이 낮게  나오는

경향은 있습니다.

3.3 그 밖의 얘기들

Liveice가 Live 스트림을 동시에 8개까지  내보낼 수 있다고 하는  군요..

하지만, 결국 어떻게 하는지는 모르겠군요. Icecast 서버를 하나  더 띄워

서 Liveice를 두 개를 동시에 띄워 보긴 했습니다만, 별 소용 없는   행동

이 었죠.. 음… 혹 알게 되시면 멜 주시믄 감사 하겠습니다.

4. 더 알고 싶을 때 볼꺼리

README라는 말머리를 가진 문서들 ..

manual.html  .. 이건 넘 길죠

Forum( http://www.icecast.org ) ..

여긴.. 헤메는 곳입니다.. ㅠ_ㅠ

끝났군요.. 글쓰는 거 오랜 만에 해보려니까 정말 힘들군요.  제가 삽질은

잘하는 지라.. ^^; 문서중에 틀린  부분이나 잘못 이해한 부분이 있을  수

있습니다.

그럼.. 즐겁게 방송해 보세요.. 앤에게 방송하는 거 잼납니다.. *^0^*

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

3 Responses

  1. 2024년 9월 19일

    … [Trackback]

    […] Find More on that Topic: nblog.syszone.co.kr/archives/11 […]

  2. 2024년 9월 19일

    … [Trackback]

    […] Information on that Topic: nblog.syszone.co.kr/archives/11 […]

  3. 2024년 9월 30일

    … [Trackback]

    […] Find More on to that Topic: nblog.syszone.co.kr/archives/11 […]

페이스북/트위트/구글 계정으로 댓글 가능합니다.