Firebase ve WebRTC Codelab

1. Giriş

Bu codelab'de, JavaScript'i kullanarak basit bir görüntülü sohbet Tarayıcınızda WebRTC API'yi ve sinyal için Cloud Firestore'u kullanın. İlgili içeriği oluşturmak için kullanılan adlı uygulamanın adı FirebaseRTC'dir ve basit bir örnek olarak uygulamalar geliştirmenin temellerini anlatacağım.

Neler öğreneceksiniz?

  • WebRTC kullanarak bir web uygulamasında görüntülü görüşme başlatma
  • Cloud Firestore kullanarak uzak tarafa sinyal gönderme

Gerekenler

Bu codelab'i başlatmadan önce şunları yüklediğinizden emin olun:

  • Genellikle Node.js ile birlikte gelen npm - Düğüm LTS önerilir

2. Firebase projesi oluşturma ve ayarlama

Firebase projesi oluşturma

  1. Firebase konsolunda Ekle'yi tıklayın Firebase projesine FirebaseRTC adını verin.

Firebase projenizin proje kimliğini unutmayın.

  1. Proje oluştur'u tıklayın.

Derleyeceğiniz uygulama, mevcut iki Firebase hizmetini kullanıyor web'de:

  • Buluta yapılandırılmış verileri kaydetmek ve anında almak için Cloud Firestore Veriler güncellendiğinde bildirim
  • Statik öğelerinizi barındırmak ve yayınlamak için Firebase Hosting

Bu codelab'de Firebase Hosting'i şurada yapılandırmışsınızdır: proje türünden bahsedeceğiz. Ancak Cloud Firestore için size Firebase konsolunu kullanarak hizmetlerin yapılandırılması ve etkinleştirilmesi.

Cloud Firestore'u etkinleştir

Uygulama, sohbet mesajlarını kaydetmek ve yeni sohbetler almak için Cloud Firestore'u kullanır mesaj.

Cloud Firestore'u etkinleştirmeniz gerekir:

  1. Firebase konsolu menüsünün Geliştirme bölümünde Veritabanı'nı tıklayın.
  2. Cloud Firestore bölmesinde Create database'i (Veritabanı oluştur) tıklayın.
  3. Test modunda başlat seçeneğini belirleyin, ardından şunu okuduktan sonra Etkinleştir'i tıklayın: sorumluluk reddi beyanı.

Test modu, geliştirme sırasında veritabanına serbestçe yazabilmenizi sağlar. Bu codelab'in ilerleyen bölümlerinde veritabanımızı daha güvenli hale getireceğiz.

3. Örnek kodu alın

GitHub deposunu komut satırından klonlayın:

git clone https://github.com/webrtc/FirebaseRTC

Örnek kod, FirebaseRTC dizinine klonlanmış olmalı. Artık komut satırınızın bu dizinden çalıştırıldığından emin olun:

cd FirebaseRTC

Başlangıç uygulamasını içe aktarın

Dosyaları düzenleyicinizde FirebaseRTC uygulamasında açın ve gereken şekilde değiştirin lütfen aşağıdaki talimatları uygulayın. Bu dizinde, henüz işlevsel olmayan bir WebRTC uygulamasından oluşan codelab'den yararlanabilirsiniz. Başaracağız fonksiyonel fonksiyonlara değineceğiz.

4. Firebase komut satırı arayüzünü yükleme

Firebase Komut Satırı Arayüzü (KSA), web uygulamanızı sunmanızı sağlar yerel olarak ve web uygulamanızı Firebase Hosting'e dağıtın.

  1. Aşağıdaki npm komutunu çalıştırarak CLI'yı yükleyin: sh npm -g install firebase-tools.
ziyaret edin.
  1. Aşağıdaki komutu çalıştırarak CLI'ın doğru şekilde yüklendiğini doğrulayın komut: sh firebase --version.

Firebase CLI'ın 6.7.1 veya sonraki bir sürümü olduğundan emin olun.

  1. Aşağıdaki komutu çalıştırarak Firebase CLI'ı yetkilendirin: sh firebase login.

Uygulamanızın Firebase yapılandırmasını almak için web uygulaması şablonunu oluşturdunuz Uygulamanızın yerel dizininden ve dosyalarından barındırma. Ama bunu yapmak için uygulamanızı Firebase projenizle ilişkilendirebilirsiniz.

  1. Aşağıdaki komutu çalıştırarak uygulamanızı Firebase projenizle ilişkilendirin. komut: sh firebase use --add.

  2. İstendiğinde proje kimliğinizi seçin ve ardından Firebase projenize bir takma ad'dır.

Takma ad, birden fazla ortamınız varsa (üretim, hazırlık vb.) kullanışlıdır. Ancak bu codelab için default takma adını kullanalım.

  1. Komut satırınızdaki kalan talimatları uygulayın.

5. Yerel sunucuyu çalıştırma

Uygulamamız üzerinde çalışmaya başlamak için hazırsınız! Şimdi uygulamayı yerel olarak çalıştıralım.

  1. Aşağıdaki Firebase CLI komutunu çalıştırın: sh firebase serve --only hosting.

  2. Komut satırınız aşağıdaki yanıtı görüntülemelidir: hosting: Local server: http://localhost:5000.

Uygulamamızı yerel olarak sunmak için Firebase Hosting emülatörünü kullanıyoruz. Web uygulaması artık http://localhost:5000 adresinden kullanılabilir olacaktır.

  1. Uygulamanızı http://localhost:5000 adresinden açın.

Firebase projesi.

Uygulama otomatik olarak Firebase projenize bağlandı.

6. Yeni oda oluşturma

Bu uygulamada, her görüntülü sohbet oturumu oda olarak adlandırılır. Bir kullanıcı oluşturabilir yeni bir oda ekleyebilirler. Bu işlem, kimlik oluşturur Uzak tarafın aynı odaya katılmak için kullanabileceği bir şifre sistemi. Kimlik, anahtar olarak kullanılır Cloud Firestore'da kullanılabilir.

Her odada hem teklif hem de teklif için RTCSessionDescriptions bulunur yanı sıra her partiden ICE adaylarının yer aldığı iki ayrı koleksiyon hazırlanır.

İlk göreviniz, yeni bir oda oluşturmak için eksik kodu uygulamaktır. arayanın ilk teklifi. public/app.js sayfasını açın ve // Add code for creating a room here yorumunu bulup aşağıdaki kodu ekleyin:

const offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);

const roomWithOffer = {
    offer: {
        type: offer.type,
        sdp: offer.sdp
    }
}
const roomRef = await db.collection('rooms').add(roomWithOffer);
const roomId = roomRef.id;
document.querySelector('#currentRoom').innerText = `Current room is ${roomId} - You are the caller!`

İlk satır, teklifi temsil edecek bir RTCSessionDescription oluşturur yardımcı olabilir. Bu, daha sonra yerel açıklama olarak ayarlanır ve son olarak yeni oda nesnesini ekler.

Ardından, veritabanında yapılan değişiklikleri dinler ve arayan eklendi.

roomRef.onSnapshot(async snapshot -> {
    console.log('Got updated room:', snapshot.data());
    const data = snapshot.data();
    if (!peerConnection.currentRemoteDescription && data.answer) {
        console.log('Set remote description: ', data.answer);
        const answer = new RTCSessionDescription(data.answer)
        await peerConnection.setRemoteDescription(answer);
    }
});

Bu işlem, çağrı alan kullanıcı için RTCSessionDescription cevapla ve bunu arayanın uzaktan açıklaması olarak ayarla RTCPeerConnection.

7. Bir odaya katılma

Sonraki adım, mevcut bir odaya katılma mantığını uygulamaktır. Kullanıcı Bunu, Odaya katıl düğmesini tıklayıp odanın kimliğini girerek yapabilir. tıklayın. Burada göreviniz, Yanıt için RTCSessionDescription ve veritabanındaki odayı güncelleyin buna göre hazırlar.

const offer = roomSnapshot.data().offer;
await peerConnection.setRemoteDescription(offer);
const answer = await peerConnection.createAnswer();
await peerConnection.setLocalDescription(answer);

const roomWithAnswer = {
    answer: {
        type: answer.type,
        sdp: answer.sdp
    }
}
await roomRef.update(roomWithAnswer);

Yukarıdaki kodda, ilk olarak, arayan kişiden teklifi alıp uzak açıklama olarak ayarladığımız bir RTCSessionDescription. Ardından, bu yanıtı yerel açıklama olarak ayarlayın ve veritabanını güncelleyin. Güncelleme arayan tarafında onSnapshot geri çağırmasını tetikler. Bu da ardından, aranan kişinin yanıtına göre uzaktaki açıklamayı ayarlar. Bu işlem, RTCSessionDescription nesnelerinin ve aranan kişiye atanır.

8. ICE adaylarını toplayın

Arayan ve arayanın birbiriyle bağlantı kurabilmesi için öncelikle şunları yapması gerekir: webRTC'ye uzaktaki benzer ile nasıl bağlantı kurulacağını anlatan ICE adayları gibi Bir sonraki göreviniz, ICE adaylarını dinleyen ve yeni öğeleri dahil eden veritabanındaki bir koleksiyona taşımanızı sağlar. collectIceCandidates fonksiyonunu bulun ve aşağıdaki kodu ekleyin:

async function collectIceCandidates(roomRef, peerConnection,
                                    localName, remoteName) {
    const candidatesCollection = roomRef.collection(localName);

    peerConnection.addEventListener('icecandidate', event -> {
        if (event.candidate) {
            const json = event.candidate.toJSON();
            candidatesCollection.add(json);
        }
    });

    roomRef.collection(remoteName).onSnapshot(snapshot -> {
        snapshot.docChanges().forEach(change -> {
            if (change.type === "added") {
                const candidate = new RTCIceCandidate(change.doc.data());
                peerConnection.addIceCandidate(candidate);
            }
        });
    })
}

Bu işlev iki şey yapar. ICE adaylarını WebRTC API'den toplar ve bunları veritabanına ekler ve eklenen ICE adaylarını uzaktan kumandadan dinler eşlenir ve RTCPeerConnection örneğine ekler. Proje planınızda veritabanı değişikliklerini dinlemek, yeni bir ekleme işlemi olmayan her şeyi filtrelemek, Aksi takdirde, aynı ICE adaylarını tekrar tekrar ekleyecektik. tekrar.

9. Sonuç

Bu codelab'de Cloud'u kullanarak WebRTC için sinyal uygulamayı nasıl uygulayacağınızı öğrendiniz Firestore ve basit bir görüntülü sohbet oluşturmak için nasıl kullanılacağı bir uygulamadır.

Daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin:

  1. FirebaseRTC Kaynak Kodu
  2. WebRTC örnekleri
  3. Cloud Firestore