Icecast, Shout, Liveice 설정과 사용하기 - 인터넷 라디오 방송 Netsgo Linux & Unix 동호회 (LUX) 5월 세미나 자료 글 쓴이 : 이광우 ( dubo@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로 받겠습니다. 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 인데 어느정도 까지의 대역폭 (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로 끝나는 호스트에서의 모든 연 결을 받아 들입니다. 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> <명령옵션> 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 각각을 편집합니다. #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 과 -d 옵션이 있습니 다. 매번 곡이 플레이되기 전에 -D 에 적은 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@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 볼륨크게 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.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^*