Hikaye 2016 da başladı.
WhatsApp ve Periscope u incelemeye başladım. Tarih 05.01.2016 ve araya Meerkat yazılımını da kattım. Neyi nasıl yapmışlar diye merak ettim. Sadece googling yapmakla olmuyor başka işlerde yaptım yani deep diving !? 🙂 WhatsApp daha kolay sonuçta Erlang ve Ejebbard yerine başka XMPP de kullanabilirsiniz. Ancak Periscope hakikaten uçmuş. Çok iyi kod yazmışlar. 1 sene sürmüş kodlarını da gayet güzel karıştırmışlar ki derin dalış yapanlar anlayamasın. Ama bana işlemez. Geçmişte böyle kodu karıştırılan ve global bir firmaya ait içinde sadece Türkiye için 20 milyon veri olan bir .Net uygulamasını 1 ayda istek üzerine kırmıştım. Meerkat daha alt düzey kodlama da periscope a göre. Gördüm onun için yazıyorum hani nereden uyduruyor demeyin sakın. (Meerkat daha sonra kapandı, Periscope Twitter a satıldı- $100M )
Ya dedim ki periscope un ana bileşenlerinin tümünü yazacağım ne olursa olsun diye kendime söz verdim. Kendi kodlarıma sahip olacağım. Yani know-how benim olsun istedim. Bu adı geçenlerin ne yaptıklarını neyi nasıl kullandıklarını gayet iyi biliyorum ki 5 Ocak dan 15 Ocak a kadar gece gündüz inceledim her açıdan. Elimdeki notebook um da da zaten hazine var geçmiş çalışmalarımla ilgili.
Sonunda 27 Şubat 2016 günü ana hatlarını tam çalışır şekilde bitirdim. Toplam 15 e yakın farklı android yazılımı entegrasyonu var bu yazılımda. Yine bu sayıda her parçayı ayrı bir Android uygulaması olarak kendi başına çalışır şekilde ayrı ayrı yazdım. Hepsini tek tek ana projeyle birleştirdim. En sonunda bu tür mobil uygulamalar için olmazsa olmaz API yi de yazıp entegre yaptım. Periscope 5-10 kişiyle 1 sene de ve Meerkat de bir o kadar kişiyle 2 ayda yazmış. Ben 40 gün içinde onlara yakın yazmış oldum. Tabii diğer başka uygulamaları buna entegre yapmak da vardı sonrası için. Benim arka planımda çalışanlar neredeyse Periscope ile aynı. (Yazılımın Altyapısının ne olduğunu da yazının sonraki bölümlerinde görebilirsiniz.)
Peki ne lazım bu yazılımı yazmak için:
1) Video encoding yapan bir yazılım yazmanız ya da şanslıysanız bulmanız lazım. Bulsanız da iyileştirme yapmanız lazım. Video kodlama uzmanlığı en az orta seviye olmalı. (ben 12 sene önceden deneyimliyim bu konuda J )
2) İnsan yüzü yani kişileri tanıma özelliğini canlı video çekimlerinde kullanmanız için çok iyi bir matematik lazım. Ipucu vereyim: Yüzdeki parçaların birbirlerine uzaklığı ve oranları vs vs. Yani yazılım FACE RECOGNITION I canlı video yayınında kullanan ilk yazılım.
3) Media Stream yapabileceğiniz bir Server yazılım gerekiyor. RTSP, RTMP nedir bilginiz olmalı.
4) Android animasyon tekniklerini iyi öğrenin.
5) Yoğun test ve ayarlama ortamınızın olması gerekiyor. Çok iyi port yönlendirme port açma ve TCP/IP bilgisi gerekiyor. 3G üzerinden evde ki server larınıza hem test hem de network performansını görmeniz için lazım.
6) Signaling Server gerekiyor. Yani XMPP server. Isterseniz bedava OpenFire vb veya başka yerden bulmanız gerekir.
7) Google API leri hem GMS hem de Map kullanımına aşina olmanız lazım.
8) VMWARE sanallaştırma vb. Bir Server ınızın orada çalışması iyi olur. SQL Server , Web Server vb.
9) API için ben SQL Server 2012 ve ASP.NET Web API kullandım (C#) . VS 2013 veya 2015 Community edition indirin. Video başladığı andan sonra oradan bir resim alıp (THUMB) saklayacağınız ve listelemede de kullanıcıya göstermeniz için ayrı bir Web Server ınızın olması gerekir. Periscope bu iş için S3 bucket kullanıyor. Ben IIS 8.0 da normal bir web kullandım. API ye video dan parça alıp (frame) string olarak diğer bilgilerle gönderiyorum ve API string I resme çevirip kesip biçip diğer web uygulamasının dizininin içine atıyor. Basit değil mi?
10) Proje de Retrofit, OKHttp, picasso ve Twitter fabric kullanın derim. Rest Servis JSON nedir iyi kullanmalısınız.
11) Player için ben özelleştirdiğim klasik Android ExoPlayer kullandım. Ancak bunda da sorun olunca en iyisi Vitamio Lib kullanmak dedim onu kullandım. Periscope özelleştirilmiş ExoPlayer kullanıyor. Latency yani canlı video da gecikme 3 saniye ve bende de sonuç aynı. Yani çok övünmelerine gerek yok.
12) Bu işlere giren mutlaka fiddler kullansın. Network den ne gelir ne gider çok iyi anlarsınız. JSON testlerini oradan yapmak çok keyifli.
13) GPS I açmadan lokasyon bulma tekniklerini öğrenin. Sokağa kadar öğrenebilirsiniz açıkçası. J GPS çok pil harcatıyor.
14) Token, API key, Secret ve Publish key nedir aşina olun.
15) Hata, Bug vb içib Fabric in crashlytics I ni kod içinde kullanın.
16) Uykusuz geceler ruhsuz gündüzlere hazır olun. Dünya da ne oluyor ilişkinizi kesin. Arada yazılımla başınız derde girdiğinde hava alın demeyeceğim J başka bir yazılımla uğraşın (nasıl yani değil mi?) . Ben webRTC ile uğraştım güçlendirip skype nin kralını yazdım J oleyyy diyorum. Sonra da onu alıp bu yazılımın içine koydum.
17) Baktım sıkıldığım zamanlarda pokemon benzeri bir yazılım ve karakterleri caddelerde arayıp bulacağınız bir şey yazayım dedim. Ekrana radar ve harita da koydum ki kolay bulunsun. Puanları alıp sonuçları görüyorsunuz..
18) Yine sıkıldım ve Snapchat in küçük bir parçasını yazayım ekrandan yüze konulacak objeleri seçip 15 saniyelik eğlendirici video lar hazırlıyorsunuz.. Onu da koydum yazılıma. ALL-IN-ONE yani.
Yazılımın en zor tarafı animasyonlar. Yani kalpler ve akarak kaybolan mesajlar. Bir de ekrana basarak kalp göndermeniz harika oluyor J Canlı video da yüz tanıma da oldukça zorluyor. Aslında zor diye bir şey yok ve kodlarken eğlendiğiniz sürece sonunda mutlaka başarabiliyorsunuz.
Gelelim altyapıya.
Hollanda da DB, API, Media Server ABD de Signaling (XMPP Server), Kanada da TURN ve STUN Server larım vardı. 2 yıl kadar ancak kendim finanse edebildim. Android Play Store da 2 yıl kaldı ve 10 bin e yakın indirme ve kullanılma yapıldı. Android üzerinde çok fazla cihaz çeşidi ve çok fazla version olduğundan tüm bunlarla uğraşmak ve bir yerde çalışan diğer yerde neden çalışmaz ya da patlar bunları düzeltmek için çok fazla test ve kod yazmak zorunda kaldım. IOS ve Apple üzerinde yazmak daha kolay hakikaten 3-5 model var sonuçta. Ama hiç bu kadar keyif almadım ve hiç bu kadar zorlandığım bir proje hatırlamıyorum.
EEEE sonuçta şimdi yaptın da ne oldu diye sorarsınız. Keyfi burada bu işin. Keyifteyim yani. Keyfe ortak olacaklar mostly welcome ! 🙂 Sizler de keyifte olun. Kalın sağlıcakla…
Isteyen aşağıda linkini verdiğim projelerimden SEC Blockchain, Smartlib ASP.NET Framework ve BPM Workflow vb çözümlerime bakabilir.
Zihni sinir projelerimin bazıları: https://www.youtube.com/user/socialmediagent