>> Edit article
이름
제목
패스워드
(오타수정: 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 확장 프러그-인이 있어야 합니다.
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved