[리눅스 라디오 프로그램 제작기] 1. 개요 & 개발 환경 구축

요즘 예전부터 생각해 왔던 리눅스용 라디오 프로그램을 만들고 있다. 나중에 또 다시 삽질하는 것도 방지하고 혹시나 참고하실 분들이 있을까 싶어 여기에 차근차근 정리해 가면서 진행하려고 한다.

개발 목적
이 프로젝트의 목적은 간단하다. 리눅스에서 간편하게 쓸 수 있는 GUI 라디오 프로그램을 만드는 것이다. kbs의 콩, mbc의 미니, sbs의 고릴라 등의 리눅스 버전이라 생각하면 되겠다. mbc, sbs 등 스트리밍 url이 공개되어 있고 로그인하지 않아도 되는 것들은 바로 그 url을 재생하고 kbs처럼 로그인이 필요한 것은 사이트에 직접 접속하여 스트리밍 url을 얻어와 재생하는 방식으로 구현할 것이다. (사실 이 프로그램을 만들기로 결심한 것은 kbs 때문이다. 공개된 url은 없고, 사이트에서도 온에어 링크가 잘 작동이 안되었기 때문이다. 그런데 어제 다시 kbs 사이트에서 온에어를 실행해보니 팝업 차단을 하면 잘된다..ㅡㅡ;  뭐, 그래도 일단 시작한 것이니 계속 진행 해 봐야지...)


기능
기능은 별 거 없다. 일단 생각하고 있는 것은 이 정도...
1. kbs, mbc, sbs 라디오 채널 재생
2. 기타 채널 추가 기능
3. 녹음 기능
4. 예약 기능
5. 프로그램 정보 읽어 오기


개발 환경
이 참에 GNOME 어플리케이션 공부도 할 겸 개발 환경은 GNOME을 선택했다. 그리고 스트리밍 재생을 위한 프레임워크로는 GStreamer를, HTTP 클라이언트로는 libsoup를 사용하기로 했다. GUI는 일단 Gtk+로 만들고 나중에 GNOME 어플리케이션으로 변경해 보려 한다.

OS : Ubuntu 8.10 x86 / GNOME
Tool : vim / gcc / Anjuta
GUI : Gtk+ (추후 GNOME 어플리케이션으로 변경)
멀티미디어 프레임워크 : GStreamer
HTTP 클라이언트 : libsoup


개발 환경 구축
■ Gtk+ 개발 관련 패키지 설치
먼저 Gtk+로 개발할 때 필요한 파일들이 포함된 libgtk2.0-dev 패키지(및 의존성 걸리는 패키지들)를 설치한다. 설치 후 다음 명령을 실행했을 때 아래와 같이 인클루드 경로와 링크 플래그가 나와야 한다. 이 정보는 gcc로 gtk+ 프로그램을 컴파일할 때 사용된다.

young@y0un5:~$ pkg-config --cflags --libs gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 
young@y0un5:~$

Gtk+ 컴파일도 해보고 예제 참고도 할 겸, gtk2.0-examples 패키지도 설치한다. 이 패키지를 설치하면
/usr/share/doc/gtk2.0-examples/examples/에 예제 소스가 Makefile과 함께 설치된다.
/usr/share/doc/gtk2.0-examples/examples/helloworld$에 helloworld.c 소스 파일이 있다. make를 실행하면 문제 없이 컴파일 되어야 한다(디렉토리 쓰기 권한이 root로 되어 있다는 것에 주의). Makefile을 열어 보면 pkg-config로 얻은 정보가 컴파일 시 사용되는 것을 볼 수 있다.

young@y0un5:/usr/share/doc/gtk2.0-examples/examples/helloworld$ cat Makefile

CC = gcc

CFLAGS = -Wall                 \
    -DG_DISABLE_DEPRECATED          \
    -DGDK_DISABLE_DEPRECATED     \
    -DGDK_PIXBUF_DISABLE_DEPRECATED \
    -DGTK_DISABLE_DEPRECATED

helloworld: helloworld.c
    $(CC) helloworld.c -o helloworld $(CFLAGS) `pkg-config gtk+-2.0 --cflags --libs`

clean:
    rm -f *.o helloworld
young@y0un5:/usr/share/doc/gtk2.0-examples/examples/helloworld$


vim 플러그인 gtk-vim-syntax도 설치하면 vim으로 작업하기 편하다. 당분간은 에디터로 vim을 쓸 것이기 때문에 이 플러그인도 설치하는 게 좋다. 설치 방법은 간단하다. 파일을 다운 받아 "~/.vim/after/syntax/"에 압축을 푼 후 c.vim.example 파일을 c.vim으로 변경하면 된다.


■ GStreamer 개발 패키지 설치
스트리밍 재생 기능을 구현하기 위해 GStreamer 개발 패키지를 설치한다. libgstreamer0.10-dev 패키지를 설치하고 이번에도 pkg-config를 실행하여 그 결과를 확인해 본다.
young@y0un5:~$ pkg-config --cflags --libs gstreamer-0.10
-pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2  -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -lglib-2.0 
young@y0un5:~$

GStreamer 튜토리얼 사이트에 나온 helloworld 예제가 제대로 컴파일 되고 실행되는 지 확인해 본다.
young@y0un5:~$ gcc helloworld.c -o helloworld `pkg-config --cflags --libs gstreamer-0.10`


■ libsoup 개발 패키지 설치
사실 이 라이브러리는 온에어 방송을 듣는 데 필요 없지만 kbs는 사이트 로그인 후에만 스트리밍 재생이 되도록 되어 있기 때문에 HTTP 클라이언트 기능이 있어야 한다. HTTP 클라이언트 라이브러리로 libsoup를 택한 것은 별 다른 이유는 없고 GNOME Development Reference 사이트에 나와 있어서 그냥 쓰기로 했다. libsoup2.4-dev 패키지를 설치하고 역시 pkg-config를 실행하여 제대로 나오는 지 확인해 본다.

이제 IDE를 제외한 개발 환경은 모두 구축되었다. Anjuta IDE는 나중에 GUI를 만들 때 설치하기로 하고, 이제 Gtk+, GStreamer, libsoup를 공부해야 할 시간이다.


※ 참고 사이트