인터넷 라디오 방송 서버 (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^*