 |
 |
 |
 |
|
>> Read No. 2774 article |
|
|
[PHP] vorbis OGG streaming (오타수정)
|
 |
 |
 |
 |

등록 2002-08-22 04:44:00
조회 5
이름 산이

|
 |
 |
(오타수정: streamming -> streaming)
안녕하세요?
-----------------------------
[PHP] vorbis OGG streaming
-----------------------------
[직접 접근할 경우] - 이 경우는 DocumentRoot 안쪽에 있어야 함
http://www.yourhost.com/any/path/to/something.ogg [PHP를 사용할 경우] - DocumentRoot 바깥에 있을 경우
http://www.yourhost.com/any/path/to/play.php?stream=xxx&.ogg ...
[삽질(?)의 시작]
특히 vorbis OGG 파일이 DocumentRoot 안쪽에 있을 경우에는
비교적 쉽게 스트리밍이 되지만 바깥쪽에 있을 경우는 상당히
난해(?)하더군요.
PHP에서 기존 MP3와 같은 방법으로 *.ogg 파일을 읽어서 뿌려지는 형식은
거의 99% 안되더군요.
이 문제를 해결하려고 무려 3일 동안 밤낮(?)으로 헤맸습니다.
이곳 게시판(LSN), phpschool.com, zend.com, php.net, mod_mp3,
freshmeat.net, sourceforge.net, google.com 등등에서 3일 동안
모조리 뒤졌는데 역시 해결 방법은 없더군요..
약 10개 정도의 MP3/OGG server를 테스트해 보았는데,
OGG 파일이 DocumentRoot 바깥에 있을 경우는 거의 90% 안되고
kplaylist 하나만 제대로 잘 되더군요..
오직 하나의 파일로 구성된 kplaylist 분석해 보려고 하니
라인 수가 무려 7000 줄이 훨씬 넘더군요... 헙....
결국 하나의 파일을 조각조각내서 분석하여, 핵심코드만
골라내어 그대로 적용했는데 역시 실패....
원인을 알 수가 없더군요.. 분명 같은 소스를 그대로 사용했는데도...
이럴때의 기분을 뭐라고 해야할지....
결국 답은 아주 사소한 것이더군요..
지금까지 문제의 핵심을 PHP의 header() 함수에 두었는데
예상이 완전히 빗나갔더군요..
[결론]
허공(?)에다 삽질만 했던 노력은 날아가고 ...
문제 해결의 핵심은 player(xmms, winamp, ...)이더군요.
즉 vorbis OGG의 mime-type('application/x-ogg')과는
약간의 거리가 멀고 palyer가 ogg 파일을 연주할때
가상(?)의 확장자(?)를 구별하더군요..
1. http://www.yourhost.com/something.ogg (ok)
2. http://www.yourhost.com/play.php?stream=1 (fail)
3. http://www.yourhost.com/play.php?file=xxx.ogg (ok)
4. http://www.yourhost.com/play.php?stream=1&file=xxx.ogg (ok)
5. http://www.yourhost.com/play.php?stream=1&_file=xxx.ogg (ok)
6. http://www.yourhost.com/play.php?stream=1&tmp.ogg (ok)
7. http://www.yourhost.com/play.php?stream=1&=xxx.ogg (ok)
8. http://www.yourhost.com/play.php?stream=1&.ogg (ok)
즉,
player가 URL으로 연주할때는 2번과 같이 제일 마지막에
'.ogg'가 오지 않으면 거의 xmms/winamp는 연주를 못하더군요.
따라서 PHP에서 playlist를 작성할때 vorbis OGG 파일은 경우는
어떠한 방법으로든지 가상의 확장자(tail)를 '.ogg'로 붙여 줘야하더군요.
(XMPlay 같은 경우는 상관은 없지만)
--------------------------------
<?
## vorbis OGG 파일인 경우 playlist 작성(예)
##
header('Content-Disposition: inline; filename=playlist.m3u');
header('Content-Type: audio/x-mpegurl');
echo "http://yourhost.com/play.php?stream=1&file<>=3&.ogg";
echo "http://yourhost.com/play.php?stream=1&file<>=4&.ogg";
echo "http://yourhost.com/play.php?stream=1&file<>=5&.ogg";
?>
---------------------------------
원래 이런건지는 모르겠네요..
혹시 다른 방법을 알고 계신분 있다면 포스팅 부탁합니다.
http://ftp.linuxchannel.net/devel/php_stream/ 에 PHP 예제 소스가 있습니다.
(참고)
xmms의 경우 vorbis OGG 확장 프러그-인이 있어야 합니다.
|
|
|
페이지로딩: [ 0.39 초 ]
작업시간: [ 0.07 초 ]
|
|
 |
 |
![[TOP]](/images/color///top.gif) 
|
 |
 |
 |
 |
|
|