Membuat Radio Server dan Setting Raspberry Pi Sebagai Radio Receiver

tutorial lengkap cara membuat server radio streaming dan membuat raspberry pi streaming radio receiver otomatis

Apa Itu Streaming Server

Adalah server yang didedikasikan khusus untuk menyediakan konten multimedia baik secara live stream ataupun on-demand,front end nya biasanya menggunakan web interface. Streaming server merupakan bentuk stasium pemancar radio virtual yang menggunakan jaringan internet berbasis TCP/IP untuk menyampaikan content multimedia ke pemirsa.

Cara Kerja Streaming Server

Streaming server bekerja seperti tower pemancar radio pada umunya yaitu dengan membrodcast /relay siaran dari source/feed .bedanya dengan tower di real world menggunakan gelombang radio untuk memancarkan siaran sedangkan pada streaming server menggunakan jaringan internet berbasis IP untuk broadcasting content multimedia.

cara kerja icecast radio streaming serversource /feed bisa berupa file mutimedia ,microphone atau gabungan dari keduanya untuk melakukan broadcast live atau on-demand , feed/source bisa berada jauh dari lokasi server dan menggunakan jaringan internet untuk mengirim broadcast ke streaming server

Feed/Source : Sumber dari siaran streaming, bisa berupa mic atau file multimedia seperti mp3 atau video.
Streaming server : berfungsi sebagai broadcaster yang mengantarkan multimedia content ke listener/client/pemirsa

 

Kegunaan/implementasi Streaming server

Secara umum streaming server berguna untuk menyiarkan content multimedia secara live atau on-demand menggunakan jaringan internet,sehingga siaran dapat dinikmati kapanpun dan dimanapun dengan menggunakan berbagai macam device yang terhubung ke internet,mulai dari smartphone,PC,laptop,smart tv dll.

Tetapi dalam tutorial kali ini saya secara pribadi membuat streaming server ini untuk tujuan yang spesifik, dimana menjadikan streaming server untuk sumber music yang akan di play di semua cabang toko /swalayan tempat saya bekerja, sehingga disemua toko /cabang swalayan akan memainkan music yang sama. karena menggunakan jaringan internet maka server bisa diakses dari cabang manapun.

Install Streaming Server

Icecast menjadi pilihan favorit saya,karena kita bisa menginstall streaming server di komputer windows dan Linux dan yang paling utama adalah gratis 100%, berikut  cara membuat streaming server dengan icecast.

Install Icecast

Silakan download icecast di website official http://icecast.org/download/ sesuaikan sistem operasi yang akan digunakan, untuk linux agar penginstallan lebih mudah maka gunakan saja package manager (apt ,yum,pacman)

Installasi pada Linux

icecast sudah tersedia di semua repository linux untuk menginstall gunakan perintah:

sudo apt-get install icecast2 (untuk apt)

sudo yum install icecast.x86_64 (untuk RHEL)

sudo pacman -S icecast (untuk arch-family)

Mengontrol Service

ketika kamu selesai menginstall, icecast tidak otomatis berjalan ,untuk memanage nya kamu bisa menggunakan perintah :

sudo systemctl start icecast.service (untuk menjalankan service daemon)

sudo systemctl stop icecast.service (untuk menghentikan service daemon)

sudo systemctl restart icecast.service (untuk merestart service daemon)

Installasi pada Windows

Install seperti mengisntall aplikasi biasa dengan klik double pada file yang telah kamu download tadi dan ikuti petunjuknya.

untuk menjalankan aplikasi kamu perlu membuka folder installasi icecast " c:\program Files\Icecast" dan jalankan icecast.bat

Konfigurasi Icecast

jangan jalankan service icecast server sebelum kamu merubah konfigurasi default . Untuk Linux edit konfigurasi dengan perintah sudo nano /etc/icecast.xml dan untuk windows edit file icecast.xml yang berada di folder installasi icecast menggunakan text editor favoritmu

tutorial cara setting icecast streaming server

Rubah pada bagian penting berikut ini ,abaikan yang lain dulu . Pada bagian hackme dan admin silakan ganti sesuai dengan yang kamu inginkan. Pada bagian <hostname> isikan domain atau IP server.

<authentication>
 <!-- Sources log in with username 'source' -->
 <source-password>hackme</source-password>
 <!-- Relays log in username 'relay' -->
 <relay-password>hackme</relay-password>
<!-- Admin logs in with the username given below -->
 <admin-user>admin</admin-user>
 <admin-password>hackme</admin-password>
 </authentication>

untuk panduan lengkap nya  kamu bisa membaca dokumentasi di official icecast website http://icecast.org/docs/icecast-2.4.0/config-file.html

Setelah setingan default dirubah,jalankan icecast dengan klik double pada file icecast.bat untuk windows atau menggunakan command sudo systemctl start icecast.service untuk linux.

Icecast Web Panel

untuk mengakses web panel gunakan protocol http ke ip /host name icecast diinstal ditambahkan dengan port 8000 secara default misal :
http://192.168.2.6:8000
melihat stremaing source pada icecast web interface panel

jika telah ada feed /source yang telah terkonek ke icecast server maka otomatis akan ter list di bagian server status, tab administration digunakan untuk memanage streaming feed yang terkoneksi (gunakan username dan password yang telah kita set sebelum nya di file icecast.xml untuk login)

icecast bisa menerima streaming feed dari multiple source,asalkan mount point yang digunakan tidak sama.Mount point diset pada aplikasi streaming feed/source. jika ingin menggunakan source lebih dari 2 baiknya kamu mengubah isi file icecast.xml pada bagian <sources> dan isikan berapa jumlah maximal soure yang bisa dihandle,karena secara default hanya 2.

<Limits>
<clients>100</clients>
<sources>2</sources>

Install Streaming feed/source

Streaming feed /source bertindak sebagai sumber siaran /broadcasting/streaming ,feed /source bisa berada jauh dari lokasi server dengan memanfaatkan koneksi internet /LAN untuk konek ke server. PC atau laptop bisa menjadi streaming feed selama bisa terkoneksi ke server menggunakan aplikasi yang didukung icecast,Ada beberapa aplikasi feed /source yang didukung oleh icecast, saya akan membahas 2 saja yang populer.

1.Edcast

ada 2 jenis edecast,stand alone dan plugin untuk winamp, stand alone bisa digunakan tanpa harus membuka winamp sedangkan plugin hanya bisa digunakan jika kamu menggunakan winamp.

Aplikasi edcast baik yang standalone atau plugin memerlukan microsoft Visual C++ 2005 Redistribute agar bisa berjalan, dan jika tidak terinstall Visual C++ 2005 Redistribute maka pada plugin winamp akan tampil pesan winamp plugins edcast  NOT_LOADED
edcast plugin error winamp not loaded

Cara install Edcast

1.Download  Edcast bundle 
Sengaja saya kumpulkan dan paketkan semua aplikasi yang diperlukan agar streaming feed/source diinstall dan berjalan dengan lancar di komputermu, di dalam paket ini terdapat edcast standalone,plugin,lame encoder,winamp v.5666,dan icecast untuk windows.
download edcast bundle untuk windows

2.Install winamp ,_vcredist_vs2005sp1_x86 dan  install edcast (pilih stand alone atau plugin)

3.Kopikan file lame_enc.dll ke directory winamp (c:\program Files\Winamp atau c:\program files(x86)\winamp) , atau jika kamu menggunakan versi standalone maka kopikan lame_enc.dll ke directory edcast diinstall (c:\program Files\edcast atau c:\program files(x86)\edcast)

4.Buka Winamp > Option >preferences >plug-ins >DSP/Effect>klik pada edcast DSP v3 ,pastikan plugin edcast telah diload dengan ditandai tulisan dsp_edcast.dll disebelah kanan nya.

5.Edcast biasanya akan terbuka otomatis kotak dialog edcast,jika belum maka klik pada configure active plug-in atau bisa dengan mengklik logo 3 pada tray menu untuk merestore kotak dialog edcast.
setting edcast winamp menambahkan encoder dan streaming server

6.Pada bagian basic settings rubah bagian encoder type menjadi MP3 Lame,Server IP diisi dengan hostname atau ip dari server icecast ,server type pilih icecast,server port sesuaikan dengan port yang telah kamu konfigurasi pada icecast.xml ,encoder password adalah password yang kamu telah set pada file icecast.xml di bagian <source-password>, Mount point diisi bebas dan harus diawali dengan garis miring,karena ini akan menjadi URL untuk mengakses streaming mu.

7.YP setting diisi dengan informasi streaming , stream URL disesuaikan dengan IP port dan mount point yang kamu gunakan ,karena nantinya akan ditampilkan di icecast web panel
mengisi informasi detail streaming pada YP setting edcast winamp plugin

8.klik OK lalu connect untuk memulai stream, jika status nya diskonek /gagal konek maka periksa kembali informasi yang dimasukan pada tab basic setting (langkah 6) telah benar sesuai dengan konfigurasi icecast server.

preview stream source pada icecast web interface

Tambahan
Install Null_output_plugin.exe jika kamu menggunakan komputer tanpa soundcard (misal server/vps) untuk menipu winamp agar tetap bisa berjalan tanpa soundcard. set pada bagian output ke N.O.P (Null output plugin )v0.1(x86) pada menu option >preferences>Plug-ins >Output

nop plugin untuk play dan stream winamp tanpa souncard

2.BUTT (Broadcast Using This Tool)

Jika kamu menggunakan aplikasi pemutar music selain winamp atau menggunakan OS selain Windows maka kamu bisa menggunakan Butt sebagai aplikasi streaming source, Butt memberikan flexibilitas input untuk streaming,yang perlu diingat adalah butt menggunakan soundcard hardware dan driver yang ada di komputermu untuk menangkap audio,jadi jika audio driver atau hardware kamu tidak lengkap maka tidak bisa memenuhi apa yang kamu inginkan.

Cara install Butt di Windows

1.download butt official server  dan install seperti biasa

Cara install Butt di Windows

lakukan seperti biasa klik next sambil merem juga bisa ya ^_^ .

Cara install Butt di Linux

Pastikan linux kamu sudah mempunyai dependencies fltk-1.3, portaudio, libmp3lame, libvorbis, libogg, libFLAC, libopus, libsamplerate, libfdk-aac , jika belum maka install terlebih dahulu menggunakan package manager linux kalian . untuk ubuntu sudo apt-get install libfltk1.3-dev portaudio19-dev portaudio19-dev libmp3lame-dev libvorbis-dev libogg-dev libflac-dev libopus-dev libsamplerate0-dev libfdk-aac-dev

1.Download butt di official server dan pilih Source Code (tar.gz)

2.Masuk ke directory dimana kamu download file tadi dengan perintah cd /directory/kamu/download

3.Extract dengan perintah tar -xvf butt-0.1.15.tar.gz

4. Masuk ke directory hasil extract cd butt-0.1.15

5.Configure dengan perintah ./configure
Jika hasilnya berakhir error seperti dibawah ini ,dan terlihat bahwa c++ compiler belum terinstall.maka install g++ compiler terlebih dahulu dengan perintah sudo apt-get install g++ (jika menggunakan package manager lain harap disesuaikan sendiri baik untuk yum /pacman) dan jalankan ulang ./configure

[email protected] ~/butt-0.1.15 $ ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
/home/masarie/butt-0.1.15/missing: Unknown `--is-lightweight' option
Try `/home/masarie/butt-0.1.15/missing --help' for more information
configure: WARNING: 'missing' script is too old or missing
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl.exe... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
checking whether the C++ compiler works... no
configure: error: in `/home/masarie/butt-0.1.15':
configure: error: C++ compiler cannot create executables
See `config.log' for more details

5.jika diakhir proses tanpa error sama sekali maka lannjutkan dengan mengetikan perintah make

checking for inline... inline
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible realloc... yes
checking for gethostbyaddr... yes
checking for gethostbyname... yes
checking for memset... yes
checking for pow... no
checking for select... yes
checking for socket... yes
checking for strchr... yes
checking for strdup... yes
checking for strpbrk... yes
checking for strrchr... yes
checking for strstr... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
[email protected] ~/butt-0.1.15 $ make

6. dilanjutkan dengan perintah sudo make install untuk menginstall butt ke sistem

lude -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -MT FLTK/Fl_My_Native_File_Chooser.o -MD -MP -MF $depbase.Tpo -c -o FLTK/Fl_My_Native_File_Chooser.o FLTK/Fl_My_Native_File_Chooser.cxx &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo FLTK/fl_timer_funcs.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I. -I.. -IFLTK -g -O2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -MT FLTK/fl_timer_funcs.o -MD -MP -MF $depbase.Tpo -c -o FLTK/fl_timer_funcs.o FLTK/fl_timer_funcs.cpp &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo aac_encode.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I. -I.. -IFLTK -g -O2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -MT aac_encode.o -MD -MP -MF $depbase.Tpo -c -o aac_encode.o aac_encode.cpp &&\
mv -f $depbase.Tpo $depbase.Po
g++ -g -O2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -L/usr/local/lib -o butt butt.o cfg.o icecast.o lame_encode.o parseconfig.o port_audio.o ringbuffer.o shoutcast.o sockfuncs.o strfuncs.o timer.o util.o vorbis_encode.o vu_meter.o wav_header.o opus_encode.o flac_encode.o FLTK/Fl_ILM216.o FLTK/fl_callbacks.o FLTK/fl_funcs.o FLTK/flgui.o FLTK/Fl_My_Native_File_Chooser.o FLTK/fl_timer_funcs.o aac_encode.o -lfdk-aac -lsamplerate -lpthread -lportaudio -lFLAC -lmp3lame -lopus -lvorbisenc -lvorbis -logg -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11
make[2]: Leaving directory '/home/masarie/butt-0.1.15/src'
make[2]: Entering directory '/home/masarie/butt-0.1.15'
make[2]: Leaving directory '/home/masarie/butt-0.1.15'
make[1]: Leaving directory '/home/masarie/butt-0.1.15'
[email protected] ~/butt-0.1.15 $ sudo make install                           <<--------------------------------PERHATIKAN COMMAND NYA
Making install in src
make[1]: Entering directory '/home/masarie/butt-0.1.15/src'
make[2]: Entering directory '/home/masarie/butt-0.1.15/src'
 /bin/mkdir -p '/usr/local/bin'
 /usr/bin/install -c butt '/usr/local/bin'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/masarie/butt-0.1.15/src'
make[1]: Leaving directory '/home/masarie/butt-0.1.15/src'
make[1]: Entering directory '/home/masarie/butt-0.1.15'
make[2]: Entering directory '/home/masarie/butt-0.1.15'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/masarie/butt-0.1.15'
make[1]: Leaving directory '/home/masarie/butt-0.1.15'

7.jalankan butt dengan mengetikan perintah butt & ke terminal , penambahan & dimaksudkan agar butt tetap berjalan di background walau kita menutup jendela terminal
cara install dan menjalankan butt di linux

Cara Setting butt streaming source

1.Jalankan Butt dan klik settings

2.pada tab “Main” >server setting klik add dan isikan informasi yang dibutuhkan sama seperti saat setting edcast mulai dari ip server,port,mount point,user password , klik save untuk menyimpan
setting butt untuk icecast stremaing server

3.pada bagian streeam infos klik add dan masukan informasi tentang stream mu, informasi ini akan muncul di Icecast web panel dan akan dilihat user.
mengisi informasi detail streaming source dengan butt

4.Pada tab stream pilih audio source yang ingin dicapture, jika ada suara maka pitch indicator pada butt mainwindow akan menyala
memilih audio device untuk stream source butt

5.Mulai stream dengan klik play,main window butt akan menampilkan status stream,mulai dari strteam time,jenis server,bitrate,codec,samplerate dll.
memulai stremaing dengan butt

6.Buka icecast panel dan lihat status streaming kita ^_^
preview streaming source dengan butt pada web panel icecast

Streaming Receiver

Untuk bisa menikmati streaming kita memang bisa menggnakan beberapa media seperti browser,vlc,mplayer dan player lain yang mendukung streaming play.Namun dalam projek ini diharuskan semua berjalan otomatis tanpa operator,jadi kita memilih raspberry pi sebagai Radio Streaming Receiver. Raspberry pi akan play stream otomatis begitu dihidupkan dari streaming server yang telah kita setting.

Kenapa memilih raspberry pi? alasan mendasar adalah bentuk nya kecil dan menghemat tempat serta bisa dibuat otomatis sesuai dengan yang kita inginkan,dalam hal ini Radio Player dari streaming server yang telah kita buat.

Raspberry pi Streaming Receiver

Setelah raspberry pi diinstall dan sound telah diarahkan ke 3.5mm jack, maka kamu hanya perlu mengikuti step dibawah ini :

Install VLC

Kita akan menggunakan VLC untuk play streaming dari streaming server yang telah kita buat, install dengan menggunakan perintah sudo apt-get install vlc 

Auto start dan play VLC setelah booting

Agar vlc kita memplay otomatis maka kita perlu membuat vlc run saat start up, disini kita akan membuat infinite loop menggunakan bash scripting sederhana untuk mempertahankan VLC ketika kehilangan source dan mengalami quit /exit.

Karena VLC tidak bisa dijalankan oleh root user maka kita akan menjalankan VLC menggunakan pi user.

edit file rc.local dengan perintah nano /etc/rc.local dan tambahkan baris berikut ini sebelum exit 0 statment pada file rc.local

while /bin/true; do
if pgrep -x "vlc" > /dev/null
then
    echo "VLC is up and Running"
    sleep 60s
else
    echo "VLC is Stopped"
    (sleep 20s;su - pi -c "cvlc http://ip_server:port/stream_mount_point  vlc://quit")
    sleep 25s
fi
done &

 sehingga akan terlihat seperti contoh dibawah ini

Mengatur Volume 3.5mm Jack Raspberry pi

untuk mengatur volume level gunakan perintah alsamixer dan tekan f6 untuk memilih soundcard,dan gunakan panah atas bawah untuk mengontrol volume, ctrl + C untuk keluar
cara mengatur volume raspberry pi

Kesimpulan

Dengan sedikit kreatifitas,kita bisa  membangun streaming server dari komputer biasa (karena tidak memerlukan banyak resource) baik windows atau Linux dan menggunakan nya untuk tujuan yang kita kehendaki,misalnya membuat siaran music terpusat yang bisa dipakai oleh semua toko/swalayan di semua cabang.

Menggunakan raspberry pi tidak menjadi keharusan karena pada kasus saya memang saya harus menggunakan raspberry pi sebagai player yang otomatis play dan lebih hemat biaya dibanding membeli 1 unit komputer hanya untuk nyetel lagu 😀 .

Semoga tutorial ini bermanfaat,jika ada kesulitan silakan drop komen di bawah.