Standart.Fm Web Sitesi, Android Uygulaması ve Stream Karmaşası

Sevgili Mete Avunduk‘un, Standart.Fm‘i hayata geçirmesi üzerinden neredeyse 4 yıl geçmiş. Yanılmıyorsam 2012 yılında yayın başladığı günlerde, ilk web sitesini hızlıca yayınlamak durumunda kalmıştım. Ne de olsa daha sonra istediğimiz gibi güncellerdik! Elbette öyle olmadı. İş yoğunluğu, günlük hayat koşuşturması/krizleri derken 4 yıl geçmiş. Yuh!

Son dönemde Mete’nin çeşitli aracılar! ile bana iletmesi üzerine memnuniyetsizliğini anlamak durumunda kaldım. Fırça yememek için ufaktan işe koyuldum.

Standart.Fm‘i daha önce dinlemediyseniz özellikle canlı programları en azından bir kere dinlemenizi tavsiye ederim. Eski yerli-yabancı 45’likleri(cızır cızır), günümüz Indie ve elektronik müzik yelpazesinden pek çok harika şarkıyı dinleme imkanını bulabilirsiniz.

 

Standart.Fm Nedir?

FM dokulu ilk ve tek internet radyosu. Dünyanın her yerinden dinlenen, programcıların programlarını canlı canlı yaptığı, nefes alan, samimi, dinleyicisiyle her an iletişimde olan web’e ‘hapsolmuş’ bir radyo istasyonudur.

Web site | Facebook | Twitter

 

Paran yoksa html5+Js stream yalan usta!

Önemli değişiklikler olmasada önce web sitesini güncelledim. Web sitesini güncellerken, muhteşem html5 dünyasında playerların ne durumda olduğunu araştırma şansım oldu. Malum, artık Flash Player bu tür uygulamalar için gereksiz bir hal almaya başladı. Eskiden RTMP ile Flash Player’a mahkumdunuz. Devir değişti (mi?).

Stream’in yayıncılığını yapan Medianova, Wowza üzerinden bize üç farklı stream imkanı sunuyor. RTMP, RTSP ve HLS. Bu konulardan biraz anlıyorsanız bir radyo için en uygun stream’in Shoutcast veya Icecast üzerinden sağlandığını(mp3 ya da ogg) biliyorsunuzdur. Başka bir stream sağlayıcı tercih etmememizin temel nedeni anlık kullanıcı sayıları. Gezi olayları sırasında, Red Hack ile yapılan röportajın Standart.Fm’de yayınlandığı sırada 60.000 civarı anlık dinleyiciye ulaşılmıştı. Bu rakamı, çok özel bir altyapı olmadan mevcut stream paketleri ile karşılamak mümkün değil. Ancak Medianova bize destek olarak bu imkanı sağlıyor.

Günümüzde hala cross-browser için tek bir stream mümkün değil. Büyük firmaların hepsi browser’a uygun stream’i servis ediyorlar. Bizim böyle bir imkanımız olmadığı ve RTMP ile RTSP doğrudan elendiği için HLS üzerine biraz araştırma yaptım.  Teknik olarak Apple’ın ürettiği HLS sadece Apple ürünlerinde destekleniyor. İlk başlarda HLS’nin Javascript ile (artık) çözümlenebildiğini okuduğumda oldukça heyecanlandım. VideoJS-HLS, Jwplayer, hasplayer.js, Dailymotion’un ürettiği hls.js gibi kütüphaneleri incelemeye başladım. İçerik video olunca bir noktaya kadar başarıyla destekleniyor. Ama sadece ses stream etmeye başladığınızda ve bu ses mp4 formatında olunca hiçbirisi işe yaramadı. Mecburen eski dost Flash’a geri döndüm. HLS ve DASH için JS kütüphaneleri hızla güncellenmeye devam ediyor, bu kütüphaneleri takip etmeye devam edeceğim. Elbet sonunda js ile bu iş çözülecek.

 

 

Android’ler koyun düşler mi?
-Erol Egemen’e sevgilerle-

Sırada 2013’den beri güncellenmeyen Android uygulaması vardı. Yıllardır Android için uygulama geliştirmediğim için elim bir türlü gitmiyordu. Java’yı sevsemde Android SDK ve Eclipse ikilisi bana hep boğucu gelmiştir. Hele Xcode ile Apple ürünlerine uygulama geliştirdikten sonra Android platformu sancılı bir baş ağrısından farksızdır.

Android Studio’yu yüklemekle işe koyuldum. İhtiyaç duyulan SDK’lar ve onların güncellemeleri, kütüphaneler ve onların güncellemeleri o arada çıkan Android Studio güncellemeleri derken tam bir günde ancak sakin, güncellemeye ihtiyacı olmayan, çalışan bir ortama sahip olabildim. Önceleri Gradle’a boş boş baksamda, öğrendikçe çok keyifli geldi. Tabi neredeyse sürekli online olmanız gerekiyor. Android için kendi MediaPlayer kütüphanesini(ki kendisi bir faciadır) ve RTSP stream’i kullanmayı planlıyordum. Ancak Wowza’da bulunan codec sorun çıkartmaya başladı. Kara kara düşünürken Google’ın Android için HLS kütüphanesi hazırladığını gördüm ve üzerine atladım. Android’in MediaPlayer kütüphanesinin ne kadar kötü olduğunu bilenler için belirteyim, ExoPlayer harika bir seçenek. Neredeyse bir kaç saat içersinde her şeyini kontrol edebildiğim player’ı hazırlamıştım. Kendi ortamımda yaptığım testlerde(dört farklı Android cihaz ile) neredeyse hiç kesintisiz yayını dinleyebildim. Tabi asıl sonucu önümüzdeki günlerde, gelecek geri dönüşlere göre anlayabileceğim. ExoPlayer‘ın en az API Level 16 desteklediğini bilmekte fayda var. Bu, Google’ın istatistiklerine göre mevcut cihazların %97’si anlamına geliyor. Ayrıca arka planda yoğun iş(CPU tarafında) yapılması durumunda sorun yaratabilir. Açıkcası o kadar önemsemedim.

Android Studio’nun başka güzelliklerini de keşfettim. Firebase‘in entegre geliyor olması sayesinde Notification ve Analytic’i neredeyse hiç çaba sarf etmeden projenize dahil edebiliyormuşsunuz. Ayrıca Twitter’ın Fabric.io‘sunu deneme imkanım oldu. Android Studio ile son derece başarılı çalışıyor. Fabric.io’yu kullanmaya başladığımda login olmakta sorun yaşıyordum. Destek hattına gönderdiğim epostaya 30dk içersinde cevap verip sorunumu çözdüler. Fabric.io sayesinde Twitter SDK’yı da hiçbir şey yapmadan entegre edebildim.

Sıra Facebook SDK’ya gelince yine çıldırdım. Facebook SDK’yı neredeyse ilk günlerinden beri iş hayatımda kullandım, kullandırdım. Sorun yaşamadığımız tek proje hatırlamıyorum. Üstelik bu sefer ihtiyacım son derece basitti. SDK’yı ekle, share et. O kadar. Olmadı olamadı. Facebook’un dökümanlarındaki adımları tek tek, satır satır okudum. Olmadı. Bu kadar basit bir mevzu neden olamaz diye düşünürken SDK’nın örneklerine bakmaya karar verdim. Tek satır… O sevimli dökümantasyona nedense eklenmemiş tek satır işi çözdü ama sinirlerimi zıplatmaya yetti.

Android Studio’nun UI tarafına gelince durum gerçekten boktan. Xcode’dan çarpılmış bir mantık, doğal yeteneği bu olmayan bir IDE’ye yedirilme çalışınca ortalık çorba olmuş. Bu işi profesyonelce yapanlara gerçekten kolay gelsin. Android Studio’nun UI tarafı katlanılacak bir araç değil. Çakma hatta boktan bir Xcode özentiliğinden ileri gitmiyor. Uygulama tek activity’den oluşmuyor olsa her halde günlerce uğraşacaktım. Hatta görselleri istediğim gibi sürükleyememeye başlayınca si***** böyle işi diyerek oldukları gibi bıraktım 🙂 O yüzden 7’ tablette ayarsız görünüyorlar.

1-1.5 haftada bitirmeyi planladığım Standart.Fm uygulamasını 1.5 günde tamamladım ve 2. günün sabahı yayınlanmıştı. Sonuç: Xcode’un gözünü seveyim 🙂

 

Standart FM
Developer: Selim Anaç
Price: Free

 

AvPlayer’a Sevgilerle

Standart.Fm’in iOS uygulamasını yapmaya başladığımda HLS kullanacağım için çok mutluydum. Çünkü Apple’ın kendi stream protokolüydü ve ne kadar zor olabilirdi ki? Hızlıca AvPlayer ile stream’i çalmaya başladım… Takılmalar, kesilmeler… iOS cihazda, browser’da açıp stream’i url’den çaldığımda mis gibi akıyordu. Ama AvPlayer ile bir türlü aynı şekilde çalmıyordu. AvPlayer sınıfının dökümanlarına daldım. Buffer, buffer, buffer… Yok. Kapalı kutu. Apple size çok basit seçenekler sunuyor: Play, Pause, Stop 🙂 O kadar. Gerisini ben hallederim diyor. O dönem Core Audio üzerine ücretsiz bir kütüphane bulamadığım ve bağlantı iyi olduğunda düzgün çaldığı için mecburen yayınlamak durumunda kalmıştım. Mevcut sürüm sorunlu ve yeni yaptığım araştırmalarda da bir çözüm henüz bulamadım. Bu arada uygulamayı Swift öğrenmek için hazırlamıştım. O dönem Swift 1.0 yeni yayınlanmıştı. Geçtiğimiz günlerde projeyi yeniden açtım. Hata mesajları 100’ü geçince kapattım 🙂 Zaman ayırabildiğimde ve uygun bir low-level kütüphane bulduğumda onuda güncellemek istiyorum.

Bu konuda önerileriniz olursa çok sevinirim. Bana buradan ulaşabilirsiniz.

 

 

 

Selim Anaç

Selim Anaç

More than 20 years of working experience at digital products as games/advergames, mobile & desktop apps and online software production. Multi-discipline software developer, team leader. A video game addict.