BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Apache > Apache-5  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



5. Apache Modules .. [ mod_mp3 ]

mod_mp3 module 은 apache 자체적으로 mp3 스트리밍을 가능하게 하는 작용을 한다. 이
모듈은 http://media.tangent.org 에서 modMP3 라는 프로젝트로 진행중이며 현재 최신
버젼은 0.35 이다.




http://media.tangent.org/download/
ftp://ftp.tangent.org/pub/apache/




mod_mp3 는 apache 에 정적으로 설치하거나 또는 DSO 방식을 이용하여 모듈로 올릴 수
가 있다. apache 에 정적으로 설치 하기 위해서는 apache 를 다시 compile 을 해야 하
기 때문에 소스 안의 INSTALL 파일을 참고하여 직접 설치 해 보기를 바라며, 여기서는
간단하게 DSO 방식의 동적으로 apache 모듈로 올리는 방법을 제시한다.

일단 소스의 임의의 디렉토리에 소스를 풀고 아래의 과정에 따라 설치를 하도록 한다.
Redhat 사용자중 RPM 으로 아파치를 사용하고 있는 사람들은 아래의 과정을 그대로 따
라하면 무리가 없이 설치가 될 것이고, 다른 배포본이나 소스 컴파일을 하여 사용하는
사람들은 적당하게 path 를 지정해 줘야 한다.

 Hanterm - Installation of mod_mp3

 [root@bbuwoo ~root]$ cd /usr/local/src
 [root@bbuwoo src]$ wget ftp://ftp.tangent.org/pub/apache/mod_mp3-0.35.tar.gz

 소스를 받아오는 것은 ftp 를 이용하든 자유이다. 위의 예제는 wget을 이용해서 받아
 오는 것을 예제로 보여줄 뿐이다.

 [root@bbuwoo src]$ tar xvfpz mod_mp3-0.35.tar.gz

   mod_mp3-0.35/
   mod_mp3-0.35/src/
   mod_mp3-0.35/src/proto.h
   mod_mp3-0.35/src/version.h
   mod_mp3-0.35/src/directives.c
   mod_mp3-0.35/src/mysql_dispatch.c
   mod_mp3-0.35/src/directives.h
   mod_mp3-0.35/src/mysql_dispatch.h
   mod_mp3-0.35/src/internal_dispatch.c
   mod_mp3-0.35/src/internal_dispatch.h
   mod_mp3-0.35/src/id3.c
   mod_mp3-0.35/src/utility.c
   mod_mp3-0.35/src/id3.h
   mod_mp3-0.35/src/ogg.c
   mod_mp3-0.35/src/load.c
   mod_mp3-0.35/src/mod_mp3.c
   mod_mp3-0.35/src/common.c
   mod_mp3-0.35/src/pgsql_dispatch.c
   mod_mp3-0.35/src/shout.c
   mod_mp3-0.35/src/ice.c
   mod_mp3-0.35/src/mod_mp3.h
   mod_mp3-0.35/src/pgsql_dispatch.h
   mod_mp3-0.35/src/shout.h
   mod_mp3-0.35/src/log.c
   mod_mp3-0.35/src/encode.c
   mod_mp3-0.35/MANIFEST
   mod_mp3-0.35/LICENSE
   mod_mp3-0.35/utils/
   mod_mp3-0.35/utils/protobuild.pl
   mod_mp3-0.35/VERSION
   mod_mp3-0.35/faq.html
   mod_mp3-0.35/support/
   mod_mp3-0.35/support/mp3.conf
   mod_mp3-0.35/support/mysql_schema
   mod_mp3-0.35/support/pgsql_schema
   mod_mp3-0.35/Makefile.tmpl
   mod_mp3-0.35/Makefile.STATIC
   mod_mp3-0.35/README
   mod_mp3-0.35/configure
   mod_mp3-0.35/Makefile.libdir
   mod_mp3-0.35/ChangeLog
   mod_mp3-0.35/INSTALL
   mod_mp3-0.35/TODO
   mod_mp3-0.35/CONTRIBUTORS

 [root@bbuwoo src]$ cd mod_mp3-0.35
 [root@bbuwoo src]$ ./configure --without-select --with-apxs=/usr/sbin/apxs \
                                --with-perl=/usr/bin/perl --with-debug \
                                --with-content_disposition

 라인 제일 뒤의 \ 표시는 한줄로 붙여서 쓰라는 의미일 뿐이다.

 [root@bbuwoo src]$ make clean
 [root@bbuwoo src]$ make
 [root@bbuwoo src]$ install -m755 src/mod_mp3.so /usr/lib/apache/mod_mp3.so

 mod_mp3.so  가 위치해야 하는 디렉토리는 아파치의 libexec 디렉토리이다.  보통 RH
 의 RPM 을 이용한다면 /usr/lib/apache 가 되며,  소스컴파일을 직접 할 경우에는 아
 마 /usr/local/apache/libexec 가 될 것이다. 소스 컴파일은 정확하게 나도 모르겠다.

 [root@bbuwoo src]$




 Hanterm - cat httpd.conf

 [root@bbuwoo conf]$ cat /etc/httpd/conf/httpd.conf

 상단 생략 .. 제일 아래 부분에 다음과 같이 설정

   LoadModule mp3_module         /usr/lib/apache/mod_mp3.so
   AddModule mod_mp3.c

   동적으로 컴파일을 한 모듈을 아파치 웹서버에 인식을 시킨다. mod_mp3.so 의 풀패
   스를 지정해 주면 된다.

   <IfModule mod_mp3.c>
     Listen 80
     Listen 8000

     Listen 80 이  httpd.conf 에 이미 지정이 되어 있을 경우에는 중복 설정하지 않
     는다. Listen 8000 의 경우에는 8000 번 포트를 아무도 사용하지 않을 경우이다.

     NameVirtualHost 211.xxx.xxx.xxx:8000

     8000 번 포트에 대한 가상 호스트를 사용하겠다고 아파치에 인식을 시킨다. 아래
     는 가상호스트 설정이다.

     <VirtualHost 211.xxx.xxx.xxx:8000>
       ServerName mms.oops.org
       DocumentRoot /data/music
       Timeout 0

       SetEnvIfNoCase User-Agent "mozilla|Konqueror|php|wget" is_browser
       SetEnvIfNoCase User-Agent "Lynx|Link|Opera|Namo|web" is_browser
       SetEnvIfNoCase User-Agent "URL|java|bot|Scooter|fast|Slurp" is_browser

       브라우저로 다운로드 받는 것을 막기 위하여 is_browser 라는 환경변수를 구한
       다.

       BrowserMatchNoCase "WebZIP|Tlelport" no_get
       BrowserMatchNoCase "NamoWeb|WebSymmetrix" no_get
       BrowserMatchNoCase "WebTrack-HTTPP|WebGet" no_get
       BrowserMatchNoCase "AD2000|WebSpy" no_get
       BrowserMatchNoCase "WebStripper" no_get
       BrowserMatchNoCase "WebSnatcher" no_get
       BrowserMatchNoCase "Microsoft URL Control" no_get

       긁어가는 프로그램으로 다운로드 하는 것을 막기 위하여 no_get 이라는 환경변
       수를 구한다.

       MP3Engine On

       mod_mp3 모듈을 시작하겠다는 것을 선언한다.

       MP3LimitPlayConnections 5

       MP3LimitPlayConnections 는 접속할 수 있는 총 연결수를 지정한다. 이를 너무
       크게 설정을 할 경우 접속자가 많을 경우 모든 대역폭을 점유 당할 수가 있다.
       보통 대역폭의 90% 를 넘지않게 설정을 해야한다. 만약 DSL 768/768 라인을 사
       용하고 mp3 파일들이 128 bitrate 의 대역폭을 가질 경우

       (768000-(768000/10))/128000 =5

       와 같이 5명이 최대 접속 가능한 유저로 본다. 다시 당부하는바 대역폭의 5% -
       15% 정도를 여유를 남겨 놓아야 한다.

       MP3CastName "Let's ROCK!"

       방송의 타이틀을 정한다.

       MP3Genre "Hard Rock"

       방송의 장르를 지정한다.

       MP3Cache On

       요청이 있을때 마다 디스크에서 해당 파일들을 가져오지 않고, cache 메모리에
       올려 놓았다가 요청이 들어오는 것을 처리한다.  MP3 지시자나 MP3Playlist 지
       시자 보다 상단에 위치해야 한다. 곡이 아주많을 경우에는 그만큼 많은 메모리
       를 사용해야 한다는 것이 단점이다.

       MP3 /data/music

       MP3 파일들이 존재하는 디렉토리를 지정한다. 이 지시자는 여러번 지정을 할수
       있으며 지정한 디렉토리에 있는 mp3 파일들을 apache 가 알아서 로드를 한다.

       #MP3Playlist conf/mp3.playlist

       MP3Playlist 지시자는 MP3 파일이 너무 많을 경우 MP3 지시자를 사용하면 아파
       치 로딩 속도가 느려지는 것을 위해 사용할 수 있다.  MP3 파일의 playlist 를
       만든다음 MP3 지시자 대신 MP3Playlist 지시자에 playlist 파일의 경로를 지정
       해 주면 된다. playlist 는 다음의 방법을 이용하여 생성할 수 있다.

       shell> find -name /pull_path/mp3/*.mp3 > playlist.pls

       #MP3Random On

       스트리밍을 무작위로 순서를 정한다.  이 옵션은 WinAmp 나 Media Player 같은
       에이전트로 특정곡을 지정하지 않고 서버로 접근을 했을 경우에 작동을 한다.

       MP3MimeType audio/mpeg

       이 가상호스트로 접근을 했을 경우 적용할 마임타입을 지정한다.

       MP3Allow *.mp3

       허락할 파일들을 지정을 한다.  MP3Playlist 지시자 대신 MP3 지시자를 사용할
       경우 지정된 디렉토리 경로에  mp3 파일 외에도 여러가지 파일들이 존재 할 경
       우에 위와 같이 설정을 해 주면 아파치 서버를 로딩하는데 큰 도움이 된다. 위
       의 설정과 반대로 MP3Deny 지시자로 접근 거부할 파일을 지정할 수도 있다.

       MP3Log /var/log/httpd/mp3.log

       mod_mp3 모듈을 통해 출력된 노래 목록들이 남을 로그를 남긴다. 개인적으로는
       설정할 필요성은 못느낀다.

       MP3Encoder "/usr/bin/lame -h -b 64 --tt % --silent % -"

       이 지시자는 외부의 Encoder 를 사용하게 해준다. 위의 예제는 lame 을 이용하
       여 출력되는 mp3 stream 을 64 bitrate 로 고정을 시킨 예제이다. 하지만 필자
       가 위와 같이 설정을 하여 사용을 하고 있으나 64 bitrate 이상이 스트리밍 되
       고 있다. 필자의 streaming 에 관한 지식이 너무 미약하기 때문에 이에 대해서
       는 조언을 줄 힘이 없으며, 필자 역시 제대로 사용을 하지 못하고 있다.  혹시 
       이에 대해 잘 알고 계신 분이 있으면 리포팅을 해 주시면 감사하겠다.


       #MP3DefaultOperation select

       이 지시자는 브라우저로 mod_mp3 모듈로 접근을했을 경우에 사용하는 지시자이
       나, 우리는 mod_mp3 를 컴파일 할때 select 를 하지 못하게 했으며, 또한 위에
       서 다운로드가 불가능 하도록 브라우져의 접근을 막았으므로 설정할 필요가 없
       다.

       <Directory /data/music>
         Deny from env=is_browser env=no_get
       </Directory>

       MP3 파일이 있는 디렉토리에 브라우져와 긁어가는 프로그램들의 접근을 막고있
       다.

     </VirtualHost>
   </IfModule>

 [root@bbuwoo conf]$


위의 설정은 필자가 사용하는 설정으로 잔재주를  좀 부려서 다운로드를 막기 위한 설
정이 포함이 되어 있다. 왠만하면 위의 설정을 그대로 사용해도 무방할 것이다.

자, 여기까지 설정을 마쳤으면, 아파치 서버를 재시작 하도록 한다음 윈앰프나 미디어
플레이어, WMMS 등으로 http://211.xxx.xxx.xxx:8000 으로 접근을 하도록 해서 노래가
나오면 성공이다. 특정곡만 듣기 위해서는 다음과 같이 접근을 하도록 한다.

http://211.xxx.xxx.xxx:8000?op=play&song=47ef8a7244edab30216e440cda08578f

과 같이 한다. song 은 들을노래의 절대경로를 md5 화 해서 지정을 하도록 한다. 예를
들어 /home/music/hello.mp3 md5 값을 알기 위해서는 php 를 사용할 수 있을 경우에는
웹상에

 Hanterm - cat /home/httpd/html/md5.php

 [root@bbuwoo html]$ cat /home/httpd/html/md5.php

   <?php
   echo md5("/home/music/hello.mp3");
   ?>

 [root@bbuwoo html]$


와 같은 파일을 만들어 브라우져로 블러 들이면 해당 값을 찾을 수가 있다.




Web Interface 는 mod_mp3 를 이용한 웹방송국 프로그램이라고 생각을 할 수 있다. 이
를 가능하게 하는 Web Interface 에는 Ampache, PHPJuke, OOPS BroadCast 가 있다. 눈
치 빠른 사람은 OOPS 를 보고선 필자가 만든 것임을 눈치챈 사람들도 있을 것이다. 필
자가 다른 ampache 와 phpjuke 를 사용하다 불편한 점 때문에 직접 만든 것이니 이 두
인터페이스 보다 감히 낳을 것이라고 말해본다. 이에 대해 궁금한 사람은 아래의 링크
를 참조하도록 한다.

OOPS BroadCast
http://oops.org/?type=broadcast
http://oops.org/DATA/broadcast.en.php

Ampache
http://ampache.kveton.com/

PHPJuke
http://mp3.runlinux.net/




mod_mp3 는 MySQL 과 Postgresqsl 과 연동이 가능하다. 이에 궁금한 사람은 modMP3 프
로젝트 홈페이지로 직접 가서 찾아보기 바란다.

mod_mp3 는 EPAI 패치가 된 apache 에서는 한곡이 2분30초 정도 지나면 끊어지고 다음
곡으로 넘어가는 현싱이 발생한다. 이에 대해서는 정확하게 버그라고는 못하겠지만 만
약 이런 현상이 발생할 경우에는 아파치 서버를 깨끗한 소스 상태로 컴파일 하여 별로
도 돌리는 것을 권장한다.



>> 이전 : Apache Modules .. [ mod_rewrite ]



    



 Home > Lecture > Apache > Apache-5

Copyright 1997-2024 JoungKyun Kim 
LAST MODIFIED: 2017/01/19