Blog

Cara Baby Monitor Timmy Berfungsi dari Segi Teknikal

WebRTC, Firebase dan perlindungan hujung ke hujung, diterangkan tanpa jargon yang mengelirukan.

Tiga Komponen Asas, Satu Matlamat

Di sebalik tabir, Timmy dibina dengan cara yang cukup praktikal: Flutter untuk aplikasi, WebRTC untuk audio dan video masa nyata, serta Firebase untuk penyelarasan. Saya tidak mahu membina platform besar yang menghantar semuanya melalui awan. Setiap bahagian sepatutnya hanya mengetahui sesedikit mungkin, namun tetap berfungsi dengan baik bersama bahagian lain.

WebRTC: Sambungan Terus, Disulitkan Secara Lalai

WebRTC (Web Real-Time Communication) membawa audio dan video antara peranti bayi dan ibu bapa. Dalam keadaan terbaik, data mengalir terus antara dua peranti, secara peer-to-peer, tanpa pelayan media di tengah.

Setiap sambungan WebRTC menggunakan DTLS-SRTP secara lalai. Jika seseorang memintas paket rangkaian, mereka tidak akan memperoleh audio yang boleh didengar atau video yang boleh ditonton. Penyulitan ini ialah sebahagian daripada protokol dan tidak boleh dimatikan begitu sahaja dalam WebRTC.

Itulah perkara penting bagi saya: media bilik bayi tidak sepatutnya melalui pelayan saya. Media itu kekal antara peranti anda.

Pensinyalan melalui Firebase Firestore

Sebelum WebRTC boleh bermula, peranti perlu mencari satu sama lain dan merundingkan cara untuk bersambung. Bahagian ini dipanggil pensinyalan. Timmy menggunakan Firebase Firestore, pangkalan data awan Google, untuk tujuan ini.

Hanya data teknikal sambungan yang dipertukarkan:

Audio dan video tidak dihantar ke Firebase. Firestore hanya mengangkut data teknikal sambungan. Timmy turut menyulitkan lapisan pensinyalan ini supaya Firestore tidak menjadi tempat pertukaran data SDP dan ICE dalam bentuk teks biasa.

Pelayan TURN: Apabila Laluan Terus Tidak Berfungsi

Sesetengah rangkaian menyekat sambungan terus, contohnya tembok api yang ketat atau pembekal mudah alih tertentu. Dalam keadaan itu, WebRTC memerlukan geganti TURN (Traversal Using Relays around NAT).

Timmy mula-mula mencuba pelayan TURN setempat dan menggunakan Cloudflare sebagai sandaran apabila geganti setempat tidak tersedia atau terlalu sibuk. Geganti itu meneruskan paket yang disulitkan. Ia tidak menerima kunci untuk audio atau video; penyulitan WebRTC kekal utuh.

Bukti kelayakan TURN diperoleh daripada Firebase Cloud Function dan hanya sah selama 24 jam. Menyimpan bukti kelayakan kekal dalam aplikasi monitor bayi terlalu berisiko bagi saya.

Nearby Connections: Peranti Mencari Satu Sama Lain Secara Automatik

Untuk mengelakkan langkah persediaan yang leceh antara peranti bayi dan ibu bapa, Timmy menggunakan Nearby Connections. Google menyediakan lapisan pengesanan ini melalui Bluetooth dan WiFi.

Penggandingan automatik dalam Timmy berfungsi tanpa perlu memasukkan kod secara manual: peranti mengesan satu sama lain dan menemukan titik pertemuan yang sama untuk pertukaran kunci. Jika proses itu gagal, anda boleh memasukkan kod 4 aksara. Kod penggandingan tidak pernah meninggalkan peranti; Firestore hanya melihat cincangan kriptografi (SHA-256) sebagai pengecam dokumen.

Pengesahan Tanpa Nama

Timmy menggunakan Firebase Anonymous Authentication. Ketika pertama kali dibuka, setiap peranti menerima ID sementara tanpa nama. Tiada akaun, alamat e-mel atau kata laluan. ID ini hanya digunakan untuk menguatkuasakan peraturan Firestore: hanya peranti yang disahkan boleh membaca atau menulis data sesi.

Seni Bina: Siapa Menghantar, Siapa Menerima

Timmy mempunyai dua mod:

Kawalan seperti push-to-talk dan menghidupkan atau mematikan kamera menggunakan DataChannel, satu lagi saluran WebRTC yang menghantar mesej kecil yang disulitkan secara terus antara peranti.

Mengapa Flutter?

Flutter ialah rangka kerja Google untuk aplikasi pada pelbagai platform. Bagi Timmy, ini bermakna saya boleh menulis sebahagian besar logik sekali sahaja dan menggunakannya pada Android serta iOS. Timmy tersedia pada Android, dan versi iOS hampir dilancarkan. Lebih sedikit kod pendua bermakna lebih sedikit tempat yang boleh menjadi punca pepijat.

Ringkasan

Prinsip teknikalnya mudah: Timmy hanya patut mengakses data yang benar-benar diperlukan. WebRTC melindungi media, Firebase menyelaraskan persediaan sambungan, TURN hanya melihat paket yang disulitkan, dan Nearby Connections memudahkan proses penggandingan.

Teknologi yang baik hampir tidak disedari dalam kehidupan seharian. Ia berfungsi tanpa menjadikan bilik bayi suatu projek berasaskan awan.


Lebih Banyak Artikel