Sebagai tugas, diputuskan untuk membuat aplikasi sederhana yang memungkinkan panggilan audio-video antara dua (untuk saat ini) perangkat stasioner atau seluler di jaringan lokal tanpa perlu terhubung ke Internet. Instalasi dan konfigurasi awal dari aplikasi semacam itu harus cukup sederhana sehingga setiap enikey tingkat lanjut dapat menangani ini tanpa masalah dan menunjukkan kepada pengguna bagaimana melakukan panggilan, dan jika ia memiliki keterampilan yang sesuai, ia dapat membuat perbaikan kecil dalam hal desain dan kemampuan. Klien harus berupa perangkat apa pun yang dilengkapi dengan perangkat input-output multimedia dan memungkinkan Anda menjalankan browser yang sesuai (Firefox atau Chrome - pengujian pada Mei, versi tampaknya).
Bagaimana melakukannya
Seperti yang Anda ketahui, teknologi WebRTC untuk komunikasi antara dua pelanggan menyarankan penggunaan objek jenis RTCPeerConnection, dan tugas utama pengembang adalah mengatur pertukaran informasi teks (penawaran SDP, jawaban SDP, kandidat ICE) antara pemanggil dan callee. Dengan kata lain, pengembang harus terlebih dahulu membuat obrolan teks dengan API untuk JavaScript browser dan kemudian melampirkan bagian multimedia ke dalamnya - peristiwa dan metode RTCPeerConnection untuk mengirim dan memproses penerimaan data.
Pilihan teknologi untuk implementasi dan API obrolan teks tetap ada pada pengembang. Banyak (dan khususnya Mozilla dalam contoh resmi RTCPeerConnection) lebih suka menggunakan API WebSocket dan server yang sesuai - misalnya, di Node.JS. Namun, dengan mempertimbangkan tugas kami untuk membuatnya sesederhana mungkin untuk penerapan, saya memutuskan untuk tidak membuat aplikasi server terlalu rumit, terutama untuk mengirimkan halaman dan skrip ke perangkat klien, server Web tambahan diperlukan. Oleh karena itu, API memutuskan untuk menggunakan xmlHttpRequest dengan panggilan klien berkala ke server Web yang sama. Saya tidak dapat mengatakan bahwa itu berfungsi dengan sempurna dalam hal konsumsi sumber daya (dan baterai) perangkat klien dan tidak adanya rem, tetapi berfungsi persis jika beberapa nuansa diperhitungkan saat mengembangkan. Mungkin,di beberapa versi berikutnya saya akan menambahkan server WebSocket dan mendesain ulang API yang sesuai, tetapi tidak sekaligus.
Diputuskan untuk membuat bagian server di Lazarus untuk Windows; kemampuan jaringan disediakan oleh paket Synapse. Dalam beberapa hal, ini mungkin penyimpangan, dan saya harus benar-benar mengutak-atik dan mendapatkan beberapa rintangan untuk membuat semuanya berfungsi sebagaimana mestinya. Tetapi satu exe, dua dll (pustaka OpenSSL), file dari sertifikat SSL yang ditandatangani sendiri dan kunci untuk itu, dan beberapa file konfigurasi (ditambah statis) memungkinkan Anda untuk tidak terlalu repot dengan tingkat teknologi untuk server dan cara aplikasi diluncurkan. Saya menguji versi pertama server ini dalam versi 32-bit bahkan pada Asus Eee PC 900 tahun 2009 di bawah Windows XP, meskipun itu bukan tanpa kecurangan dalam bentuk penggantian baru-baru ini dari SSD super lambat biasa dengan yang lebih modern dan tebal. Ini dalam hal performa. Dan "instalasi" server sedang membongkar arsip zip yang diunduh ke folder yang sesuai,mengedit file JSON dari konfigurasi akun pengguna dan meluncurkan file exe program (ada juga tombol di jendela, tetapi Anda dapat menentukan parameter pada baris perintah untuk segera memulai server Web). Dengan satu atau lain cara, saya memikirkan bagian server yang lebih serius, karena saya memiliki pengalaman seperti itu. Segala sesuatu ada waktunya.
Selain organisasi sebenarnya dari API, server kami menyajikan file statis untuk browser (halaman web login dan chat, gaya, gambar, skrip, nada dering). Secara umum, saya mencoba melakukannya tanpa pustaka pihak ketiga sebanyak mungkin, tetapi karena fakta bahwa desain dan tata letak html saya tidak terlalu panas, saya memutuskan untuk menggunakan jQuery.UI dan, karenanya, jQuery, yang juga dikirim oleh server Web sebagai statis. Semua file statis berada dalam subfolder terpisah dari folder program; mereka, tentu saja, dapat disaksikan dan bahkan diubah jika diinginkan dan dengan keterampilan yang sesuai. Dalam JavaScript, kodenya diberi komentar, dan Anda dapat mempelajarinya jika perlu.
Bagaimana mengatur komunikasi
Untuk mengatur komunikasi, hal utama adalah memilih dan menggabungkan perangkat klien (komputer, laptop, smartphone, tablet) dan mesin Windows dengan "server" (dapat juga bertindak sebagai klien) ke dalam jaringan umum. Dari perangkat klien, saya menguji beberapa smartphone murah yang dirilis dalam beberapa tahun terakhir di Android mulai dari versi 7, serta komputer dan laptop di Windows 10, termasuk dengan dua kamera Web yang terhubung; mereka bekerja dengan baik. Untuk bersenang-senang, saya bahkan menguji versi pertama pada Orange Pi One dengan Lubuntu (atau Kubuntu, saya tidak ingat langsung) dari pabrikan. Anehnya, itu bahkan berhasil, meskipun videonya melambat, dan halaman obrolan dibuka untuk waktu yang lama (saya bahkan tidak ingin berbicara tentang memuat sistem dan membuka browser).
Server kami diinstal pada mesin tik "server" dengan cara di atas dan akun pengguna dikonfigurasi. Setiap pengguna perlu diberi login dengan kata sandi.
Semuanya bekerja seperti ini. Pengguna memasukkan mesin tik "server" dengan browser menggunakan protokol https, menggunakan alamat IP atau nama domainnya. Di sana mereka memasukkan nama pengguna-kata sandi mereka dan pergi ke halaman obrolan dengan daftar kontak. Ketika Anda mengklik pada sebuah kontak, sebuah jendela dialog terbuka dengan riwayat pesan teks (omong-omong, server menyimpannya hanya dalam RAM, itu belum dapat disimpan dalam sebuah file), bidang untuk obrolan dan formulir panggilan audio-video dengan kotak centang untuk memilih audio dan (atau) video. Untuk melakukan panggilan video, pengguna menandai kotak centang yang sesuai, menekan tombol panggil dan mengkonfirmasi izin ke browser. Pelanggan yang dipanggil mulai membunyikan nada dering dan formulir tanggapan terbuka dengan bendera yang sama. Setelah mengklik tombol jawab, browser juga akan meminta izin untuk mengakses perangkat multimedia tersebut. Kemudian jendela panggilan terbuka.
Saya tidak dapat mengatakan bahwa saya memiliki banyak pengalaman dengan perangkat lunak untuk konferensi video, konsultasi video, dll., Tetapi, misalnya, di Google Hangouts pada komputer (seperti pada perangkat seluler, saya tidak tahu) saya tidak melihat kesempatan untuk mengubah kekasih saya di layar penuh, yang, secara teori, mungkin diperlukan pada konsultasi jarak jauh ketika Anda perlu melihat dengan baik apa yang Anda tunjukkan kepada lawan bicara Anda (misalnya, melalui kamera belakang ponsel cerdas Anda). Dalam obrolan ini, dalam dialog panggilan, saya memutuskan untuk membuat dua tab dengan video - lawan bicara dan pengguna itu sendiri. Dari versi saat ini di tab pengguna, selain video itu sendiri, ada bidang untuk memilih kamera dan mikrofon; Anda dapat mengubah nilai mereka dengan cepat selama percakapan. Mungkin itu akan berguna bagi seseorang.
Sekarang saya akan menjelaskan secara singkat kerucut yang dipenuhi dengan pembangunan; mungkin itu akan membantu seseorang saat mengembangkan dan men-debug solusi mereka.
Fitur modern dari pekerjaan dan implementasi WebRTC dan umumnya bekerja dengan multimedia dalam JavaScript
Di sini, secara singkat; detailnya dapat ditemukan di komentar di file javascript statis / js / videoChat.js
- Chrome pasti, ditambah, mungkin, browser lain juga memungkinkan Anda bekerja dengan getUserMedia hanya di situs yang dapat diakses melalui HTTPS
- Daftar perangkat input audio dan video hanya dapat diperoleh setelah panggilan berhasil ke getUserMedia
- Mulai otomatis memutar suara menggunakan JavaScript (melalui metode play () dari video html atau elemen audio) hanya mungkin setelah pengguna menampilkan aktivitas di situs - misalnya, mengklik beberapa elemen kontrol.
- promise setLocalDescription , offer. RTCPeerConnection ICE-, .
- ยซ ยป getUserMedia RTCPeerConnection. , , .
- Banyak deskripsi untuk perangkat seluler mengacu pada properti FacingMode untuk memilih kamera depan atau belakang. Sebenarnya, saya tidak tahu caranya di perangkat lama, tetapi dalam obrolan ini pada smartphone yang diuji, peralihan berfungsi bahkan tanpa menggunakan properti ini. Tetapi secara ketat mempertimbangkan klausul 5.
Daftarnya mungkin tidak lengkap. Saya pikir lebih banyak lagi yang akan muncul dalam proses pengembangan lebih lanjut. Jika seseorang tahu bagaimana mengatasi batasan dan, karenanya, menyederhanakan program atau bekerja dengannya, silakan tulis di komentar.
Pengembang aplikasi jaringan Lazarus sukses besar
Synapse saat ini hanya mendukung pustaka OpenSSL 1.0.x; di 1.1 banyak hal sudah diimplementasikan secara berbeda, bahkan nama library lainnya. Selain itu, tidak cukup hanya dengan menempatkan dll di folder program. Kami juga membutuhkan file konfigurasi (openssl.cnf), jalur yang ditetapkan melalui variabel lingkungan OPENSSL_CONF.
Dimana saya bisa mendownload
Distribusi program untuk Win32 dan Win64 dan kode sumber dari sisi server di Lazarus tersedia di halaman program di tautan www.lubezniy.ru/soft/videochat
PS: Omong-omong, apakah ada yang tahu bagaimana Anda dapat menggunakan Lazarus untuk mengotomatiskan pembangunan dari sumber yang sama dua exe yang berbeda - untuk Win32 dan Win64? Kompiler silang dari Win64 ke Win32 sudah aktif dan berjalan, tetapi mengubah opsi dalam proyek setiap saat tidak benar.
PPS: Siapa yang mencobanya, silakan bagikan kesan Anda di komentar.