WebRTC Nedir ?

Buşra Deniz Akın
6 min readJul 11, 2016

WebRTC son zamanlarda, özellikle 2015 yılıyla birlikte adını daha da sık duyduğumuz bir teknoloji olmaya başladı. Genellikle Türkiye’deki konferanslarda, etkinliklerde tanıştığım insanların WebRTC’yi ya hiç duymadıklarını ya da sadece isim olarak bildiklerini ama çok bir fikirlerinin olmadığını gözlemledim.

Benim WebRTC ile tanışmam ise Netaş’taki işime başlamamla birlikte oldu. 2014 Şubat’ında Netaş’ta Google’ın WebRTC kütüphanesini kullanarak Android ve iOS platformlarında native gerçek zamanlı görüşme sağlayan SDK’ler yazılan bir projeye dahil oldum. Bu zamana kadar hep mobil uygulama geliştirip ve temelde sunucudan veri alıp, binbir çeşit şekilde gösterim döngüsünde ilerlediğim için SDK geliştirme ve hiç bilmediğim WebRTC bana ilginç gelmiş ve sıfırdan başlayan bir projeye dahil olmuştum.

Ama işte tembelliğim yine ön plana çıktı ya da hayatın cilvesi midir bilemem, WebRTC ile ilgili ilk blog yazımı 2 yıl çalıştığım projeden ve Netaş’tan ayrıldıktan sonra yazıyorum :)

Başlamadan önce şu karışıklığı açıklamak gerek sanırım. WebRTC hem W3C ve IETF organizasyonları tarafından yürütülen ve tanımlanmaya çalışılan bir standarttır hem de bu standart tanımının Google tarafından geliştirilen projesinin ismidir. Standart olarak WebRTC (WebRTC 1.0) henüz tamamlanmamış durumda ve güncellenmeye devam ediyor, en güncel WebRTC tanımına burdan ulaşabilirsiniz. Benim bu yazıda bahsedeceğim WebRTC ise Google tarafından geliştirilen ve WebRTC 1.0 spesifikasyonunun bir uygulaması olan açık kaynak projedir. WebRTC’nin Ericsson tarafından geliştirilen OpenWebRTC isimli yine açık kaynaklı uygulaması da bulunmaktadır.

Google WebRTC

Şu sıralar 5. yaşı kutlanan WebRTC projesi Google tarafından 2011 I/O sırasında duyuruldu ve herkese açıldı. WebRTC en temelde peer-to-peer olarak gerçek zamanlı sesli ve görüntülü iletişimi ve data paylaşımını sağlamaktadır.

En büyük avantajlarından bir tanesi Chrome, Firefox, Opera gibi oldukça kullanılan tarayıcılarda hali hazırda gömülü olarak gelmesi ve kullanıcıların ekstra hiç bir eklenti yüklemeden WebRTC uygulamalarını direkt olarak tarayıcılarında çalıştırabilmeleridir. WebRTC’nin plugin-free olması sizi uygulama geliştirici olarak güvenlik, eklenti kurma gibi kullanıcılarınıza zorluk yaratacak adımları ortadan kaldırması anlamına geliyor.

Ayrıca peer-to-peer iletişim sayesinde sisteminizde herhangi bir medya sunucusu bulundurmadan uygulamalarınıza multi-media özelliği kazandırabiliyorsunuz. (Bazı kısıtlı ağ tiplerinde P2P çalışılamadığını ve başka çözümlere ihtiyaç duyacağınızı şimdiden söyleyeyim ama Google’a göre aramaların %86 sı P2P olabiliyor.) SIP (Session Initiation Protocol) gibi bu zamana kadarki telekom dünyası çözümlerinde her zaman bir medya sunucusu bulundurmanız ve devam ettirmeniz gerekiyordu. Bu oldukça pahalı çözümler nedeniyle telekom dünyasında genellikle hep büyük oyuncular rol almış ve iş yapmış ama WebRTC dünyasına baktığınızda birçok WebRTC çözümünü sunmuş ve ciddi yatırımlar, satın almalar olan startuplar göreceksiniz. WebRTC biraz da küçük oyuncuları telekom dünyasına girişini sağlamıştır.

Yine SIP gibi telekom çözümlerinde bir uygulama çıkarabilmek için protokole özel bir uzmanlık gerekiyor. SIP alanında çalışmış, çalışma mantığını bilen insanlar ile ancak bir çözüm çıkarabilyorsunuz fakat WebRTC sağladığı basit API ile tüm telekom ve real time iletişim karmaşıklığını size soyutluyor ve bir mobil ya da web geliştiricisi olarak basit bir API kullanımı ile uygulamaya multi-media özelliği ekleyebiliyorsunuz.

Son olarak WebRTC ücretsiz ve BSD lisansı ile duyurulmuş açık kaynaklı bir proje, yani istediğiniz şekilde indirip kullanabiliyorsunuz.

Desteklenen Platformlar

WebRTC şuan native olarak Chrome, Opera, Firefox, Chrome Android, Firefox Android ve Opera Android tarayıcılarında ve Android ve iOS platformlarında native kütüphane olarak desteklenmektedir. WebRTC özelliklerinin tarayıcı bazında desteklenme durumlarına burdan bakabilirsiniz.

Safari’nin WebRTC destekleyeceği düşünülüyor ama henüz hiç bir API’si desteklenir durumda değil, WebRTC için eklenti yazmanız gerekiyor.

Microsoft tarafında işler biraz daha ilginç, Google’ın WebRTC’yi duyurmasından sonra Microsoft da ORTC projesini duyurmuştu. ORTC Edge’de şuan desteklenir durumda ve WebRTC’yi de destekleyeceği duyuruldu.

Şuan 2 milyardan fazla WebRTC’nin eklentisiz olarak kullanılabildiği kullanıcı sayısından bahsediliyor.

WebRTC kullanım durumu, nerelerde kullanılıyor?

Gitgide daha da iyi bir duruma gelen (hala özellikle mobil için bilinen sıkıntıları olsa da) WebRTC aslında günlük hayatta kullandığımız çoğu uygulama tarafından kullanılıyor. Facebook Messenger, Hangouts, Whatsapp, Snapchat, beta durumda olan Slack bunlardan bazıları. Atlassian’ın HipChat i, AT&T’nin müşterilerine açtığı WebRTC API’leri ve Skype for Business’ın WebRTC desteği ile aslında indirme sayısı milyarları geçen WebRTC uygulamalar markette yerini alıyor.

Son kullanıcıya yönelik uygulamalar dışında PaaS (Platform-As-A-Service ) şeklinde kendi çözümlerini sunan birçok startup şirket var. CafeX, Tokbox, Twilio, Bistri ve Kandy gibi şirketler kendi WebRTC SDK’lerini müşterilerine sağlayarak daha hızlı ve kolay multi-media entegrasyonu sağlıyorlar. WebRTC’nin sektördeki durumunu daha detaylı olarak buradaki yazıdan öğrenebilirsiniz.

Geliştirici tarafından bakıldığında ise WebRTC topluluğu diğer teknolojilere göre biraz daha küçük sayılır. Aktif sayılabilecek bir mail grubu bulunuyor fakat kendi sitesi dışında düzenli ve tecrübelerden oluşan blog sayıları çok az. WebRTC ile biraz zaman geçirdikten sonra yaşadığınız sorunların (çok temel problemler hariç) cevabını öyle hemen bulabilmeyi ümit etmeyin :) Stackoverflow’da bile webrtc etiketi ile açılmış soru sayısı 3000'i bulmamış durumda :(
Tabi WebRTC’nin daha telekom dünyasına özel bir teknoloji olması da bunda etkili olmuştur.

Ama Google genel olarak sorularınıza cevap alabildiğiniz, aktif ve erişilebilir bir WebRTC takımı barındırıyor.

WebRTC API

Burda detaylı olarak WebRTC API’sinden bahsetmeyeceğim. İlerleyen ve daha teknik olan WebRTC yazılarımda buna değinmeyi planlıyorum ama en temelde yapılan iş bazında WebRTC API’sini 3 ana bölüme ayırabiliriz :

MediaStream (aka getUserMedia)

MediaStream; genel olarak medya akışları (stream) ile ilgilidir. Cihazda bulunan kamera ve mikrofon seçeneklerine erişiminizi sağlayan, bunların kullanımı için gerekli izinlerin alınmasını yöneten ve buralardan aldığı ses ve görüntü streamlerini içeren API’dir. getUserMedia() methodu ile alındığı için bu ismiyle de kullanılıyor. MediaStream objesi bir etiket ve getAudioTracks()/getVideoTracks() methodları ile alabileceğiniz MediaStreamTrack nesnelerini içerir. MediaStreamTrack ise ‘audio’ ve ‘video’ olacak şekilde bir tipe, bir isime ve bir yada birden fazla ses ve görüntü kanalını içerirler.

PeerConnection

RTCPeerConnection, eşler arasındaki veri akımının, P2P iletişimin yönetildiği WebRTC’nin en temel bileşenidir.

Aşağıdaki WebRTC mimarisinde de görüldüğü gibi PeerConnection aslında daha alt katmanlarda gerçekleşen ve real time iletişimi sağlayan tüm işleri biz ObjC, Java, JS geliştiricisinden soyutlar ve

  • Medyanın karşıdaki kullanıcıya gönderilip, alınması
  • Medya kodlaması/çözümlemesi (encoding/decoding) işlemleri
  • Güvenlik
  • Band genişliği ve paket yönetimi
  • Yankı giderimi (echo cancellation)
  • Automation Gain Control
  • Gürültü azaltımı ve önlenmesi (noise reduction ve suppression )

gibi real-time iletişim için gerekli kritik işlemleri yönetir.

DataChannel

WebRTC’nin en öne çıkan özelliği P2P sesli ve görüntülü iletişim olsa da, aslında DataChannel API aracılığıyla istediğiniz biçimdeki veriyi yine peer-to-peer olarak iletebiliyorsunuz. Eşler arasında güvenli ve düşük gecikme miktarlarıyla veri iletimi yapabiliyorsunuz. Genellikle dosya transferi, uzak masaüstü bağlantı uygulamaları, gerçek zamanlı mesajlaşma uygulamaları ve oyunlarda DataChannel API’si tercih edilebiliyor.

Son

WebRTC 101 tadındaki bu yazıdan sonraki planım ise daha teknik detaylarla dolu WebRTC ortamı, WebRTC dünyasında girdiğinizde sıklıkla duyacağınız bazı sunucular, protokoller ve mobil platformlar için build edilmesinden bahsetmeyi planlıyorum.

Daha detaylı olarak dinlemek isterseniz de aşağıdaki sunumumu inceleyebilirsiniz.

http://www.slideshare.net/BuraDenizCSM/webrtc-voxxed

GDG DevFest Ukraine 2015 , WebRTC on Mobile

VoxxedDays İstanbul 2015, WebRTC on Mobile

Yazının orjinali http://www.busradeniz.com/webrtc-nedir/ yayınlanmıştır.

--

--