Kasım 2018 başında 2.5 yıl önce yazdığım (2016 Şubat ayı) ve Google Play Store da 1 yıl indirilen Hubblescope canlı video yayını Android yazılımımı elden geçirmeye karar verdim.
2016 Şubat ayında bu yazılımı ilk yazmaya başlamamın hikayesini de aşağıdaki linkten okumanızı isterim..
https://selcukcelik.org/whatsapp-veya-periscope-nasil-yazilir/
Bu yazılım sadece canlı video değil ek olarak canlı görüntülü görüşmeyi de aynen Turkcell veya skype de olduğu gibi destekliyor.. Tam 5 kişiye kadar aynı anda konuşma desteği ve canlı görüntü var. Bir de light snapchat diyebileceğimiz eğlenceli bir bölümü de var ve 15 saniyelik sizin seçtiğiniz bir obje ki sakal , gözlük vb sizi görüntülüyor ve hem bunların tümünün resmini hem de 15 saniyelik video sunu yapıyor.. Ayrıca face recognition dediğimiz yüz tanıma sistemi var ama tamamen kişi tanıyor diyeyim.. Canlı görüşme aynı zamanda web den de yapılabiliyor… Yani isterseniz canlı video yayını yapabilir ve izleyenlere izin verebilir görebilir, engelleyebilir mesaj bile gönderebilirsiniz.. Yine bundan başka canlı görüşme yapabilir ve yine görüşmede mesaj da anında gönderebilir hatta görüşme de dil secip o dilde mesajı ekran altına otomatik konuşma esnasında yazılmasını sağlayabilir (Dilsiz ve sağırlar için) , İsterseniz snapchat benzeri 15 saniyelik komik video lar hazırlayabilirsiniz.. Kısaca hepsi bir arada bir uygulama.. Tüm bunları youtube kanalımda görebilirsiniz.. Ayrıca bu yazının en sonunda da 2 adet hem canlı video yayını ve canlı görüşme video larını da seyredebilirsiniz..
Canlı video yayınında latency yani gecikme 3 saniye ve Canlı görüşmede 0.5 saniye altındadır.. Canlı video yayınında ana iletişim RTSP teknolojisi ve Canlı görüşmede ise WEBRTC ve PEER kullanılmıştır.. Hepsinde XMPP de signaling olarak kullanılmıştır..
Öncelikle amacım tüm bana göre değerli projelerimi kütüphane ve derleyiciler açısından güncel tutmak ve daha hızlı, etkili, az hata veren sağlam bir yapıya yaklaştırabilmek. Bir de bilgilerimi tazelemek. Bu yazının amacı da tüm bunları sizlerle paylaşmak.
Bu proje açısından 2.5 yıl oldukça değişikliğe sebep olmuş. Android Studio versionundan tutun da gradle ve diğer repository ler , kullandığım kütüphanelerin eskiyenleri, işe yaramayan hale gelenleri her şey daha ilk derlemede hata verdi. Bunları düzeltmek ve daha önemlisi rtsp yayın kütüphanesini daha sağlam hale getirip kodların ve yazılımın içinde bazı çıkarmalar ve eklemeler yapmak da buna ek olarak yapmam gerekenlerdi..
10 günden fazla bir süre bazan günde 12-14 saat çalışarak tam 12 Kasım da bitirdim.
Gelelim yazılıma.. Hubblescope ile ilgili başka bir yazım yine bloğumda var. Ne gibi özellikler var vb. Ama istedim ki sizinle biraz daha fazla bilgi paylaşayım. Biraz daha kodsal ve teknik olsun ama diğer okuyanları da sıkmadan.
Bu son durumdaki video sunu da youtube da bulabilirsiniz.. Youtube adresi zaten bu blogun her sayfasının başında var. Buraya da yine yazayım :
https://www.youtube.com/user/socialmediagent
*** AYRICA: Resimleri daha büyük görmek için sağ tıklayıp resmi yeni sekmede aç vb yaparak daha net görebilirsiniz.
Öncelikle veri tabanı olarak MS SQL 2012 kullandım.
Web API de ise C# kullandım. Web Server IIS 8.5.
Android tarafta bu API ile konuşacak rest servisleri ve interface ler için ise retrofit kütüphanesini kullandım.
Media Server olarak WOWZA 4.3 standalone ve XMPP olarak da Pubnub ı kullandım. Ayrıca RED5 i de kullandım ancak B planı olarak..
Canlı yayın ve/veya playback lerin tümünde rtsp protokolünü kullandım.
Skype benzeri canlı görüşme de ise WEBRTC (android) teknolojisini ve signaling olarak yine XMPP kullandım.. Bundan başka WEBRTC varsa tabii ki STUN ve TURN server da kullanmamız gerekir ki ben de kullandım.. Ne olduguna bakarsınız internetten..
Authentication için twitter fabric ve hatalar için de crashlytics kullandım.
Ayrıca canlı yayın başlamadan internet hattının kalitesini kontrol etme özelliği var..
Yine canlı yayın sonrası video olarak lokal cihazınıza indirme seçeneği de var ve yayın bittiğinde soru olarak soruluyor..
Tüm bunları uygun bir modelleme ve tasarım ile birleştirdiğiniz zaman işte bu yazılım ortaya çıkıyor.
Veritabanı ve özellikle konfigürasyonu tutan CONFIG tablosu oldukça önemli. Aşağıda VMWare sanal makinadaki 2012 SQL Server dan resmi görebilirsiniz.
Şimdi bu veritabanını Business Entity olarak kod tarafında logical bir class diyagramı ve tabii esas API projesi ile size resim olarak aşağıda göstereyim
Yani iş veritabanından başlıyor alttaki yazılım parçalarına doğru devam ediyor. Önce android yazılımı yazıp sonra API yi yazmak daha doğru da olabilir. API bizim android uygulamamız ile veritabanı arasındaki arabirim katmanımız. İsteği android taraftan buraya yapacağız ve bu API deki kodlarla veritabanından bilgiler alınıp geri android uygulamaya gönderilecek.
Ve şimdi aşağıdaki resimde size android tarafta bu API yi nasıl çağıracağımızın birkaç adım ve birkaç resim ile göstermeye çalışacağım.
Önce Rest servisimizin kodunu gösterelim. Tüm veriler android den API ye ve geriye JSON formatında olacaktır.
Bunun ardından veritabanımızdaki ilgili tabloya denk gelen BL class ının buradaki karşılığı olan LIVE class ını da gösterelim.
Yukarıda LIVE class ını ve rest servisinden sonra sıra rest servis interface ine geldi. Bunun resmi de altta:
Bu interface rest servis class ında APIService objesini oluşturmak için kullanılacak ve bu obje yi de API mizi çağırmak yani istediğimiz işi yapacak interface içindeki komutlarımızı çağırıp diğer taraftaki API ile iletişime geçmesini sağlamış olmak ana amaç.
Şimdi yukarıdaki rest servis resmi ve buraya kadar olan resim ve anlatımları android kod içinde bakın nasıl kullanıyoruz size 2 adet resmini vererek göstermek istiyorum:
Şimdi gelelim web server a. IIS 8.5 üzerinde 2 adet web tanımladım ve belli port noları üzerinden yazılımdan bunları çağıracağım.. Önce API mizin web admin taraftaki resmini vereyim:
Ve şimdi de thumb resimlerin atılacağı web in tanımını aşağıdaki resimdeki gibi yapıyoruz.
Android tarafta yayın başladığında dobroadcast isimli metod çağrılıyor ve her şey başlıyor..
Resimler şöyle:
Yukarıdaki kod içinde çağrılan XMPP Server a bağlanma işi de aşağıdaki resimde:
Yine dobroadcast içinde thumb resimlerin görüntü buffer ından alınıp string olarak API ye gönderilmesi ve API tarafında image e çevrilerek ilgili dizine atılması işleminin resmi aşağıda:
Son olarak kişi stop a basarsa yapılacak işlerin kodları da aşağıdaki resimde:
Kalpleri ve mesajları nasıl gönderiyor ve alıyorsun derseniz :
Önce cihaz ekranında dokunmayı yakalayacak kodumuzun resmi:
VE bu kod içinden çağrılan sendheart metodunun kod resmi:
Kalp gönderme yukarıdaki gibi.
Peki kalpleri aynı anda bu canlı yayını izleyenler nasıl alıyor. Sizinle uçan kalpler yazımda bu animasyonun tamamının kodunu paylaşmış ve bu tür bir uygulamada da nasıl herkesin görebileceğinin ipuçlarını yazmıştım.. İşte onun kod resmi de aşağıda:
Peki Mesaj gönderme ve alma nasıl yapılıyor. Yani video canlı da iken seyredenler mesaj gönderiyor veya gönderilen mesajları nasıl görüyorlar İşte böyle önce gönderme kod resmi sonra alma:
Çalışan yazılımın 2 telefonla yaptığım canlı video yayını test video su asagida :
Canlı video görüşme video su aşağıda..
Hepsi bu kadar. Tabii iş bu kadar la bitmiyor daha yüzlerce satır kodu sizinle paylaşmadım. Artık o mantığı da siz böyle bir yazılımı yazmaya cesaret ederseniz kolayca yapabilirsiniz diye düşünüyorum.
Kalın sağlıcakla.
Selcuk Celik