İnternet Radyosu Kurmak

Raspberry Pi’ı kullanarak kolayca bir Internet radyosu kurabilirsiniz. Raspberry Pi sahip olduğu küçük yapısı ve düşük güç tüketimi ile portatif bir yayın cihazı olarak kullanılabilir. Dilerseniz bir konferansı ya da sunumu internette canlı olarak sunabilir, dilerseniz harici diskinizdeki bir mp3 listesinin internet kullanıcılarına yayın yapabilirsiniz.

Bu kısımda darkice ve icecast2 adındaki yazılımları kullanarak yayının nasıl yapılabileceğine değineceğiz. Öncelikle darkice ve icecast2 yazılımlarının görevlerine ve özelliklerine kısaca değinelim.

Audio streamer (ses akıtıcı) adı verilen Darkice, ses kaynaklarının (mikrofon/sistem sesi ya da bir mp3 dosyası olabilir) ses yayın sunucusuna kesintisiz ve yüksek kaliteli bir şekilde aktarılması görevini üstlenir. Ayarlamak için basitçe metin tabanlı bir yapılandırma dosyası ile sesin aktarılacağı sunucunun adresi ve erişim bilgileri tanımlanır.

Icecast2 ise kendisine ulaştırılan ses akışlarının diğer kullanıcılara ulaştırılmasını sağlayan bir sunucu görevini üstlenir. Icecast kendisine ulaştırılan bir ses akışını aynı anda yüzlerce veya binlerce kullanıcıya yayın yapabilir. Tam da bu özelliği ile icecast2’in kullanıcı sayısına bağlı olarak bant genişliği yüksek bir sunucuda çalıştırılması gerektiğini söyleyebiliriz. Yani icecast, darkice’ın çoğaltıcısı olarak düşünülebilir. Aynı zamanda Icecast bir çok popüler medya yürütücüsü için (vlc player, media player classic, gom player vb..) yürütülebilir akış bağlantıları (URL) da sunar. Böylece herhangi bir işletim sistemindeki medya yürütücülerini kullanarak ses akışlarının dinlenebilmesi mümkün olur. Icecast de xml biçimli bir metin dosyası ile konfigüre edilir ve web arabirimini çalıştığı bilgisayarın 8000. portu üzerinden sunar. Radyoya bağlanmak isteyen kullanıclar bu web arabirimine giriş yaparlar veya doğrudan bu arabirimden sağlanan ses akış URL’lerini medya oynatıcılarında açarlar. Aşağıdaki şema blackice ve icecast2’in görev ilişkisini açıklamaktadır.


Şekil: Darkice ve IceCast2 işleyiş şeması

  1. Icecast2 kurulumu

    Bu uygulamada darkice ve icecast2’i aynı Raspberry Pi bilgisayarına kurarak ağa bağlı bir cihazdan radyo yayınını nasıl alabileceğimize bakacağız. Öncelikle icecast2 paketini aşağıdaki gibi kuralım:

    pi@raspberry:~ $ sudo apt-get update

    pi@raspberry:~ $ sudo apt-get install icecast2 -y

    Kurulum sırasında icecast bizden bazı ayarlamaları yapmamızı isteyecek. Aşağıdaki sıraya göre ilerleyerek bu ayarlamaları yapalım:

    1. Bunlardan ilki icecast2 sunucusunun yönetici parolasını tanımlamaktır. Parola tanımlanmadan icecast2 sunucusu çalışmaya başlamayacaktır. Kurulum aracı ile yapılandırmaya devam etmek isteyip istemediğinizi soran ” Configure Icecast2?” sorusuna “yes” cevabını verin.
    2. “Icecast2 hostname:” sorusuna icecast2’i kurmakta olduğunuz Raspberry Pi bilgisayarının IP adresini girin. Hali hazırda bir alan adı yönlendirmeniz varsa; bir alan adı da girebilirsiniz. Ben Raspberry Pi’ın eth0 arayüzünün adresi olan 192.168.6.254 adresini giriyorum.
    3. “Icecast2 source password:” için; ses kaynaklarını yönetebilmeye yetki veren bir parolası girin.
    4. “Icecast2 relay password:” için; röle sunucu işlevlerini yönetebilmek için yetki sağlayan bir parola girin.
    5. “Icecast2 administration password:” 8000. Porttan çalışan Icecast2 web arabirimi için bir yönetici parolası girin. Varsayılan yönetici kullanıcısının adı admin’dir.

    Kurulum tamamlandıktan sonra Icecast2 sunucusu hemen çalışmaya başlayacaktır. Aşağıdaki komut ile sunucu servisinin çalıştığını ve yapılandırma dosyasının konumunun /etc/icecast2/icecast.xml olduğunu görebilirsiniz.

    pi@raspberry:~ $ sudo systemctl status icecast2.service

    ● icecast2.service – LSB: Icecast2 streaming media server

    Loaded: loaded (/etc/init.d/icecast2; generated; vendor preset: enabled)

    Active: active (running) since Sat 2018-03-24 19:10:44 UTC; 40s ago

    Docs: man:systemd-sysv-generator(8)

    CGroup: /system.slice/icecast2.service

    └─1461 /usr/bin/icecast2 -b -c /etc/icecast2/icecast.xml

    Ayrıca bir web tarayıcısının adres çubuğuna aşağıdaki gibi http://192.168.6.254:8000 adresini yazarak da Icecast2 sunucusunun web arabirimine erişebilirsiniz. Arabirimde yer alan Administration bağlantısından sunucu istatistiklerinin ve dinlenebilecek ses akış kaynaklarının yer aldığı sayfalara erişim sağlayabilirsiniz. Bu sayfaya erişmek için sorulacak olan kullanıcı adına admin, parolasına ise kurulumun son adımında tanımladığınız yönetici parolasını girin.


    Icecast2 web arabirimi

  2. Icecast2 yapılandırma ayarları

    Icecast varsayılan ayarları ile çoğu zaman tatminkâr sonuçlar verir. Bu kısımda ses aktarım gecikmesini azaltmak için bazı ayarlamalar yapacağız. Icecast2’in yapılandırma dosyasını aşağıdaki gibi nano editörü ile açalım:

    pi@raspberry:~ $ sudo nano /etc/icecast2/icecast.xml

     

  • burst-size: icecast yapılandırma dosyasındaki limits etiketi içindeki burts-size değerini 1 olarak ayarlayın. Bu ayar sesin kaynağından olan gecikmeyi en aza indirecek.
  • admin-user: authentication etiketi içindeki admin-user değeri yönetici kullanıcısının adıdır. Dilerseniz varsayılan yönetici kullanıcısının adı olan admin’i buradan değiştirebilirsiniz. Benzer şekilde source-password ve relay-password parolalarını da buradan değiştirebilirsiniz.
  • source-password: Ses akışı kaynağını yetkilendirmek için kullanılacak paroladır. Sonraki başlıkta yapılandırması yapılacak darkice’ı yetkilendirmek içi bu parola kullanılacak.
  • hostname: Doğrudan genel icecast etiketi içerisinde yer alan hostname değeri Icecast2 sunucusunun yayın yapacağı adrestir. Buraya Raspberry Pi’ın IP adresini ya da alan adını yazabilirsiniz.
  • port: listen-socket etiketi içerisinde yer alan port değeri Icecast sunucusunun çalışacağı port numarasıdır.

Daha birçok ayarı basit bir XML yapılandırma dosyası ile yapmanıza izin veren Icecast2’yi yapılan değişikliklerin geçerli olabilmesi için aşağıdaki gibi yeniden başlatabilir, 8000. Portun icecast tarafından dinlenilip dinlenilmediğini görmek için netstat komutunu çalıştırabilirsiniz:

pi@raspberry:~ $ sudo systemctl restart icecast2.service
pi@raspberry:~ $ netstat -nlp

Icescast sunucusunun hata ve erişim günlüklerini görüntülemek için aşağıdaki log dosyalarını inceleyebilirsiniz:

pi@raspberry:~ $ cat /var/log/icecast2/error.log

pi@raspberry:~ $ cat /var/log/icecast2/access.log

  1. Darkice kurulumu

    Darkice’ı Raspberry Pi’a kurmak için aşağıdaki paketi yükleyin:

    pi@pi2:~ $ sudo apt-get update

    pi@pi2:~ $ sudo apt-get install darkice -y

    Kurulum kısa sürede tamamlanacaktır. Darkice varsayılan olarak bir yapılandırma dosya oluşturmaz. Bunun için /usr/share/doc/darkice/examples/ dizinindeki örnek yapılandırma dosyalarını kullanabilirsiniz. /etc dizini içinde yeni bir darkice yapılandırma dosyası oluşturmak için aşağıdaki komutu verin ve yapılandırma bilgilerini girin:

    pi@pi2:~ $ sudo nano /etc/darkice.cfg

    [general]

    duration = 0

    bufferSecs = 1

    reconnect = yes

     

    [input]

    device = plughw:1,0

    sampleRate = 44100

    bitsPerSample = 16

    channel = 1

     

    [icecast2-0]

    bitrateMode = abr

    quality = 1.0

    format = mp3

    bitrate = 128

    server = 192.168.6.254

    port = 8000

    password = parola

    mountPoint = ses_yayinimiz.mp3

    name = ses_yayin1

    darkice.cfg dosyasına yazmış olduğumuz seçeneklerin neler olduğunu açıklamak gerekirse:

    1. duration: Yayının ne kadar süre ile yapılacağını saniye cinsinden tanımlar. 0 girilirse yayın hiç durmadan sürekli olarak devam edecektir.
    2. bufferSecs: Ses kaynağının ne kadar süre ile tamponlanacağını tanımlar. Yayın burada belirtilen süre kadar ön belleğe alınır ve daha sonra gönderilir. Yayında gecikme olmaması için buraya yazılabilecek en küçük değer 1 sn’dir.
    3. reconnect: Akış sunucusu ile olan bağlantı koparsa, otomatik olarak yeniden bağlanmayı dener.
    4. device: Alsa yazım şekline göre 1 numaralı kart’ı ses kaynağı olarak okur. Mevcut aygıtların kart numaralarını görmek için cat /proc/asound/cards komutunu çalıştırabilirsiniz.
    5. sampleRate: Ses kaynağının örnekleme frekansıdır. 44100 Hz insan kulağının aygılayabileceği en yüksek stereo frekansıdır. Daha küçük değerler girilirse seste kalite düşümü olurken bant genişliği kullanımı da azalar. Bu ayarın uygun değerini deneme yanılma yöntemi ile bulabilirsiniz.
    6. bitsPerSample: her bir ses örneğinin kaç bit uzunluğunda örnekleneceğini ayarlar. Düşük değerler sesin kalitesini azaltırken, yüksek değerler artırır.
    7. channel: Ses kaynağının verebileceği kanal sayısına göre azami kaç kanal ile yayın yapılacağını tanımlar.
    8. bitRateMode: Ses akış verisinin dinamik mi yoksa sabit bir veri çerçevesi içinde mi aktarılacağını tanımlar. cbr yani sabit bit hızı (constant bit rate) tanımlandığında bazen ses verisi daha az veri içerebileceğinden gereksiz yere veri trafiği oluşmuş olur. Bu nedenle vbr yani ortalama bit hızı (average bit rate) kullanmak daha iyidir fakat bu yüsek kaliteli ses akışlarını nadiren de olsa sekteye uğratabilir.
    9. quality: En yüksek ses kalitesinin 1.0 ile tanımlanabileceği bu değer akışın ses kalitesini belirter. Daha düşük değerler kalitenin ve bant genişliği kullanımının azalmasına neden olur.
    10. format: Ses akışının kodlama biçimini ayarlar. Ogg vorbis biçimi dahili olarak desteklenirken. Mp3, mp3 ve AAC biçimleri harici kütüphaneleri kullanır.
    11. server: Ses akışının gönderileceği sunucunun IP adresi ya da alan adıdır.
    12. port: Ses akışının gönderileceği sunucu servisinin port numarasıdır.
    13. password: Ses akışının gönderileceği sunucuda (örn: IceCast) tanımlanmış source-password değeridir.
    14. mountPoint: Yayınımızın ses akış sunucusunda hangi isimle sunulacağını tanımlar. Bu isim sunucu adresinin sonuna eklenerek bir URI tanımlar.
    15. name: Ses yayınımızın genel amaçlı sunucu ismidir.

     

    ” adlı başlığında bulabilirsiniz. Yapılandırma dosyamızı oluşturup kaydettikten sonra darkice’ı aşağıdaki gibi çalıştırabiliriz.

    pi@pi2:~ $ sudo darkice

    DarkIce 1.3 live audio streamer, http://code.google.com/p/darkice/

    Copyright (c) 2000-2007, Tyrell Hungary, http://tyrell.hu/

    Copyright (c) 2008-2013, Akos Maroy and Rafael Diniz

    This is free software, and you are welcome to redistribute it

    under the terms of The GNU General Public License version 3 or

    any later version.

     

    Using config file: /etc/darkice.cfg

    Using ALSA DSP input device: plughw:1,0

    Using POSIX real-time scheduling, priority 4

    Eğer herşey yolunda gitmişse darkice mikrofonu dinlemeye başlayacak ve akışı IceCast’e gönderecektir. Dikkat ederseniz darkice komut satırının akışını kesmiştir. Eğer bu aşamadan Ctrl+C tuşlarına basarsanız darkice sonlanır. Darkice’ı arka plana itmek için komut satırının sonuna & (ampersant) karakterini yazabilirsiniz.

  2. Oluşturulan ses akışını dinlemek

    Önceki başlıklarda Raspberry Pi’ımıza IceCast sunucusunu ve darkice’ı kurmuş ve yapılandırmıştık. Şimdi gerçekleştirdiğimiz bu kurulum ve yapılandırmanın ne şekilde dinlenebileceğine bakalım. Eğer IceCast2 sunucusunun web arabiriminin yer aldığı http://192.168.6.254:8000 adresine girerseniz, önceki başlıkta gerçekleştirdiğimiz ses akışının yayında olduğunu görebilirsiniz. Aşağıdaki ekran görüntüsünü inceleyelim:


    Şekil: ses_yayinimiz.mp3 adlı Icecast2 ses akışı

    Ekran görüntüsünde ses_yayin1 isimli yayının /ses_yayinimiz.mp3 URI’si ile sunulduğu gözüküyor. Bu yayının tam URL’ini belirtmek gerekirsek, yayın adresimi şu olur: http://192.168.6.254:8000/ses_yayinimiz.mp3

    Ekran görüntüsünün sağ üst tarafından birçok medya yürütücüsü tarafından otomatik algılanabilecek yürütme listelerine bağlantılar yer alır. Bu yürütme listelerinde de esasen yukarıda verilen URL yazılıdır. Dilerseniz hemen hemen tüm işletim sistemlerine aktarılmış olan Video LAN (VLC) yürütücüsü ile bu URL’i yürütmeyi deneyebilirsiniz.

    VLC ile URL’yi yürütmek için, VLC’nin “Ortam” menüsünden “Ağ akışı aç…” seçeneğine tıklatarak açılan penceredeki alanları aşağıdaki ekran görüntüsündeki benzer olarak doldurun.

    Bir numaralı kutuya URL’i yazın. 2 numaralı kutu ise VLC tarafından sesin kesintiye uğramaması için ne kadar süre ön bellekleme yapılacağını tanımlar. Eğer ağ/internet bağlantınızın yoğunluğu yoksa burayı mümkün olduğunca düşük tutabilirsiniz. 3 numara ile gösterilen ağ önbelleklemesi ise ağdan kaynaklanacak iletim sorunlarına karşı önbellekleme yapılmasıyla ilgilidir. Bu değeri de duruma göre düşürebilirsiniz.

     

KULLANIM SARTLARI

Bu web sitesinin içeriginin tüm haklari saklidir. Kitabin/site içeriginin hiçbir bölümü, yazarinin yazili izni olmaksizin tekrar üretilemez, bir erisim sisteminde tutulamaz, herhangi bir biçimde elektronik, mekanik, fotokopi, ses kayit ya da diger yollarla iletilemez. Ancak istisna olarak; ticari olmayan amaçlar için yazara önceden bilgi vermek ve raspberrypikitabi.com adresini kaynak göstermek kaydiyla 10 sayfaya kadar kullanilabilir. Kitapta kullanilan logolar, firmalarin tescilli logolaridir. Raspberry Pi, Raspberry Pi Vakfi'nin ticari markasidir.



BILGILENDIRME

Bu kitapta Raspberry Pi, çesitli çevre birimleri ile düsük voltaj elektronik bilesenlerin bir arada kullanildigi uygulamalar yer almaktadir. Uygulamalarin tamami Raspberry Pi'in üzerinde kosan Linux çekirdegi ve açik kaynak kod özgür yazilimlar kullanilarak gerçeklestirilmistir. Uygulamalar gerçeklestirilirken ortaya çikabilecek elektriksel sorunlar veya kullanici hatalari nedeniyle cihazlar zarar görebilir veya veri kaybi yasanabilir. Ayrica, kitapta anlatilan konularin uygulanmasi sonucu ortaya çikabilecek her türlü lisans ihlali/kanuni ihlal ve zararin sorumlulugu uygulayan kisiye aittir. Olusabilecek herhangi bir zarardan yazar sorumlu tutulamaz.

Leave a comment

Your email address will not be published. Required fields are marked *