Apakah WebRTC membutuhkan backend?
Apakah WebRTC tanpa server apa pun, bahkan server pensinyalan mungkin
Ringkasan
WebRTC adalah serangkaian komponen yang memungkinkan media real-time dan saluran data antar browser. Namun, masih membutuhkan layanan backend untuk fungsionalitas tertentu. Dalam artikel ini, kami akan mengeksplorasi alasan mengapa layanan backend diperlukan, komponen dan perangkat keras yang terlibat dalam pengaturan WEBRTC, codec audio dan video yang didukung, dan pentingnya direktori dan server stun.
1. Apa itu WEBRTC?
WebRTC adalah serangkaian komponen yang memungkinkan pengembang untuk mengatur media real-time dan saluran data antar browser. Itu dibuat oleh Google dan berisi komponen -komponen utama yang dikirim dalam Chrome, Firefox, Opera, dan Microsoft Edge (ORTC).
2. Mengapa Anda masih membutuhkan layanan backend?
Terlepas dari kemampuan WEBRTC, layanan backend diperlukan untuk fungsionalitas tertentu. Misalnya, untuk menelepon seseorang, Anda perlu mengetahui alamat mereka, yang biasanya dinamis. Informasi ini perlu disimpan dan dikelola di server. Selain itu, layanan backend dapat melacak semua perangkat untuk pengguna dan memberi tahu mereka tentang panggilan yang masuk.
3. Komponen dan perangkat keras apa yang terlibat dalam menyiapkan WebRTC?
WebRTC membantu mengatur lingkungan fisik, seperti kamera, speaker, dan mikrofon, serta perangkat keras lainnya seperti pembatalan gema dan perangkat keras pembatalan latar belakang. Ini juga membantu dalam mengkonfigurasi jaringan menggunakan stun (utilitas traversal sesi untuk nat).
4. Audio codec apa yang didukung oleh WEBRTC?
WebRTC mendukung berbagai codec audio termasuk G711, ILBC, dan Opus. Opus adalah codec variabel berkualitas tinggi yang banyak digunakan di WebRTC.
5. Video codec apa yang didukung oleh WebRTC?
WEBRTC Mendukung Codec VP8 dan VP9, yang merupakan variasi bebas royalti Google dari H.264/jam.265. Itu juga mendukung h.264.
6. Mengapa codec audio penting di webrtc?
Audio codec menangani tugas seperti kehilangan paket, pengkodean dan decoding audio, koreksi kesalahan, pembatalan kebisingan, pembatalan gema, dan leveling volume. Mereka berkontribusi pada popularitas WEBRTC di perangkat seluler dan desktop.
7. Apa direktori siapa yang tersedia untuk dihubungi?
Untuk memulai panggilan, Anda perlu mengetahui alamat penerima. Direktori berfungsi sebagai halaman putih yang dinamis, memungkinkan pengguna untuk check -in dengan server dan memberikan informasi kontak. Ini dapat diimplementasikan menggunakan XMPP, SIP, atau protokol khusus.
8. Mengapa Anda membutuhkan server setrum?
Server stun (sesi traversal utilities for nat) membantu menentukan alamat IP eksternal suatu perangkat dan memeriksa apakah dua perangkat dapat berkomunikasi secara langsung. Ini memainkan peran penting dalam membangun koneksi antara teman sebaya.
9. Apa itu server giliran?
Jika sesi peer-to-peer tidak dimungkinkan karena keterbatasan firewall, diperlukan server Turn (Traversal menggunakan relay di sekitar NAT). Ini membantu dalam menyampaikan data antar perangkat dengan melewati pembatasan firewall.
10. Mengapa Anda harus mempertimbangkan menggunakan layanan backend seperti Sinch?
Menyiapkan dan memelihara server untuk pensinyalan, setrum, dan belokan bisa menjadi rumit dan mahal. Sinch, sebagai penyedia layanan backend, menawarkan solusi yang dapat diskalakan dan hemat biaya. Mereka menangani satu miliar menit per tahun dan menyediakan SDK WEBRTC yang dioptimalkan untuk perangkat dan kondisi jaringan yang berbeda.
11. Apakah WebRTC hanya tentang backend?
Tidak, WEBRTC melibatkan aspek frontend dan backend. Sinch, misalnya, menyesuaikan dan mengkonfigurasi WebRTC SDK mereka untuk memastikan kinerja yang optimal di seluruh perangkat dan kondisi jaringan. Mereka mengimplementasikan fitur seperti opus adaptif untuk menyesuaikan kualitas perekaman berdasarkan metrik kualitas dari lalu lintas.
12. Apa manfaat menggunakan Sinch?
Sinch menawarkan keahlian dalam komunikasi real-time dan menyediakan SDK WEBRTC yang disesuaikan, codec yang dioptimalkan, dan jaringan terdistribusi. Harga mereka untuk transfer data hemat biaya dan mereka memastikan komunikasi latensi rendah melalui server yang berlokasi strategis.
13. Seberapa nyata latensi jaringan dalam percakapan?
Sekitar 250ms latensi jaringan terlihat selama percakapan. Faktor -faktor seperti latensi jaringan, waktu pemrosesan, dan pengkodean data dapat berkontribusi pada latensi keseluruhan.
14. Fungsionalitas apa yang disediakan layanan backend di WebRTC?
Layanan backend menangani tugas seperti manajemen direktori, pensinyalan, stun dan manajemen server yang berbelok, dan pelacakan perangkat untuk pengguna.
15. Apa yang membuat WebRTC populer di perangkat seluler dan desktop?
Dukungan WebRTC untuk codec audio dan video, bersama dengan kemudahan penggunaan dan kemampuan real-time, berkontribusi pada popularitasnya di perangkat seluler dan desktop.
Apakah WebRTC tanpa server apa pun, bahkan server pensinyalan mungkin
Kemudian, buka dua tab di browser Anda (atau di dua browser yang berbeda), dan masukkan Localhost: 7000. Seperti yang disebutkan sebelumnya, yang terbaik adalah memiliki dua kamera yang tersedia untuk contoh ini berfungsi. Jika semuanya berjalan dengan baik, Anda akan melihat satu umpan video di setiap tab.
Webrtc dan mengapa Anda masih membutuhkan layanan backend
Bergabunglah dengan komunitas Dzone dan dapatkan pengalaman anggota penuh.
Artikel ini awalnya muncul di blog Sinch oleh Christian Jensen.
Apa itu WEBRTC?
WebRTC adalah serangkaian komponen yang berbasis dari beberapa inovasi dari perusahaan yang dibeli Google pada tahun 2010. WebRTC memungkinkan pengembang untuk mengatur media real-time dan saluran data antara dua browser (atau ponsel jika Anda mengkompilasinya untuk itu). Ini berisi beberapa komponen utama dan semuanya dikirim dalam krom, firefox, dan opera, dan versi yang ada di Microsoft’S New Browser Edge (ORTC).
Menyiapkan aliran data dan perangkat keras
WebRTC membantu mengatur lingkungan fisik (seperti kamera, speaker, dan mikrofon) dan perangkat keras lainnya (seperti pembatalan gema dan perangkat keras pembatalan latar belakang – yang Anda temukan sebagian besar di ponsel), ditambah membantu mencari tahu jaringan bersama dengan setrum dengan setrum.
Codec audio dan codec video
Salah satu manfaat utama menggunakan WEBRTC atas perangkat lunak lain saat berhadapan dengan audio dan video real-time adalah codec bebas sumber/royalti bahwa Google cukup baik untuk dikirim.
Codec audio
- G711, digunakan dalam jaringan telepon biasa
- ILBC, kode sempit tua, juga digunakan dalam jaringan telepon
- Opus, variabel berkualitas tinggi dan codec (dukungan untuk adaptif) yang merupakan codec terbaru yang digunakan di webrtc.
Ada lebih banyak dikirim, tetapi ini adalah yang utama dan yang paling banyak digunakan.
Codec video
- VP8 dan Segera VP9, ini Google’S variasi royalti gratis h.264/jam.265 codec
- H.264 (ditambahkan pada 2015 sebagai perjanjian untuk ORTC)
Audio codec melakukan banyak pekerjaan untuk Anda, mengurus kehilangan paket, pengkodean dan decoding audio, koreksi kesalahan, pembatalan noise, pembatalan gema, leveling volume, dan banyak lagi. Fakta bahwa itu berisi codec juga membuatnya sangat populer di perangkat seluler dan desktop.
Jadi, sekarang saya dapat membuat panggilan berbasis browser saya sendiri di JavaScript murni menggunakan (tambahkan kerangka kerja JS sisi klien favorit Anda di sini). Sayangnya, itu’Tidak sesederhana itu untuk mengatur panggilan karena ada dua hal utama yang hilang di sini.
Direktori siapa yang tersedia untuk dihubungi (atau penemuan rekan)
Untuk menelepon seseorang, Anda perlu mengetahui alamatnya, dan tidak seperti nomor telepon biasa, alamat di internet sebagian besar adalah alamat IP yang dinamis. Untuk menyelesaikan ini, Anda harus mencatat di mana semua orang berada. Ini dapat dilakukan dalam beberapa cara menggunakan XMPP, SIP, Protokol Kustom, dll., Tapi semuanya bermuara pada siapa pun yang siap menerima panggilan check -in dengan server dengan satu atau lain cara, dan memungkinkan server tahu cara menghubungi rekan itu (tersirat untuk pengiriman lebih lanjut dari penawaran/undangan/SDP dll.).
Anggap saja sebagai halaman putih yang benar -benar dinamis. Ini biasanya dilakukan pada interval waktunya untuk menjaga firewall atau serupa terbuka untuk server pensinyalan untuk memberi tahu klien jika seseorang ingin berkomunikasi dengan mereka. Jadi, ini adalah bagian pertama yang perlu Anda bangun di atasnya.
Selanjutnya Anda mungkin ingin melacak semua perangkat untuk pengguna tertentu dan memberi tahu mereka di semua perangkat jika ada panggilan. Menggunakan Sinch, kami mengurus bagian ini untuk Anda.
Server setrum
Setelah server pensinyalan Anda menemukan perangkat dan mengirimkan penawaran, Anda memerlukan server setrum. Server STUN akan memfasilitasi untuk menentukan alamat IP eksternal Anda serta jika dua (atau lebih) perangkat dapat berbicara satu sama lain secara langsung. Sinch akan mengurus ini untuk Anda juga.
Server Relay Media (Turn Server)
Jika sesi peer-to-peer tidak dimungkinkan (data kami sendiri menyarankan akun ini untuk sekitar 25% dari sesi), Anda akan memerlukan server giliran. Turn Server pada dasarnya akan menggeser bit untuk Anda melalui lubang terbuka di firewall antara kedua klien. Mengapa ini terjadi? Yang paling umum adalah firewall asimetris dan kemungkinan untuk meninju lubang di berbagai pelabuhan di firewall.
Oke, tapi kenapa Don’T saya mengatur ini sendiri?
Nah, Anda bisa. Ini mungkin sedikit berlebihan, dan satu lagi kompetensi di tim operasi Anda akan diperlukan. Giliran dan server setrum Anda mungkin akan sangat dimanfaatkan dan mahal. Dan di sinilah ekonomi yang dapat diskalakan masuk. Karena Sinch melakukan lebih dari satu miliar menit per tahun, harga kami untuk transfer data lebih murah daripada yang bisa didapat oleh kebanyakan perusahaan.
Anda mungkin ingin memiliki jaringan terdistribusi juga. Jika Anda misalnya memiliki server giliran di u.S. Dan panggilan terjadi di antara klien di Eropa, Anda akan menambahkan latensi hanya karena semua lalu lintas perlu melintasi lautan. Aturan praktis yang baik adalah bahwa sekitar 250 ms terlihat dalam percakapan (lebih banyak kualitas info layanan di sini). Jadi, tanpa menambahkan latensi jaringan apa pun pada klien dan waktu pemrosesan untuk menyandikan data, Anda pada dasarnya dijamin memiliki terlalu banyak latensi antara klien.
Apakah ini hanya tentang backend?
Dia’S tidak hanya tentang backend. Di Sinch kami memiliki pengalaman luas tentang komunikasi waktu nyata, dan kami menyesuaikan dan mengkonfigurasi WebRTC SDK kami untuk bekerja paling baik di semua perangkat dan di berbagai kondisi jaringan yang berbeda. Beberapa contoh adalah implementasi opus adaptif, yang akan menyesuaikan kualitas perekaman berdasarkan metrik kualitas dari lalu lintas kami. Kami juga tahu codec apa yang akan digunakan dalam keadaan tertentu, dan mana yang harus dipilih untuk meminimalkan transkode dan latensi di seluruh dunia.
Diterbitkan di Dzone dengan izin Christian Jensen . Lihat artikel asli di sini.
Pendapat yang diungkapkan oleh kontributor dzone adalah milik mereka.
Apakah WebRTC tanpa server apa pun, bahkan server pensinyalan mungkin?
Saya mencoba mengatur plugin A cordova untuk iOS yang mengimplementasikan fungsi WebRTC tanpa menggunakan server mana pun dan itu akan hanya digunakan di jaringan lokal. Saya tahu ada plugin ini, yang terlihat menjanjikan tetapi saya memiliki beberapa masalah dengannya. Rencana saya bukan untuk menggunakan trun, setrum atau server pensinyalan apa pun. Mungkin Anda berpikir sekarang: “Ok ini tidak mungkin. Tidak ada pensinyalan sama dengan tidak ada koneksi.“Tapi izinkan saya menjelaskan dulu. Seperti yang ditunjukkan di sini dan di sini dimungkinkan untuk menghindari menggunakan trun, setrum atau server es. Saya pikir ini adalah cara yang baik untuk memulai proyek saya tetapi masih ada pertanyaan terbuka. Bagaimana perangkat dapat menemukan satu sama lain jika tidak ada pensinyalan jenis apa pun (dalam contoh mereka menggunakan node.JS Server)? Saat ini saya sedang bermain dengan ide kode-QR yang berisi semua informasi yang diperlukan. Pada akhirnya itu harus terlihat seperti ini (Black Arrwos lebih penting): idenya adalah bahwa setiap orang yang datang ke ruangan harus memindai kode-QR pada RP dan kemudian perangkat mengetahui IP, port, dll. dari RP dan koneksi WEBRTC dengan Datachannel akan dibuat. Saya telah mencari jawaban selama berhari -hari sekarang, tetapi karena fakta (atau setidaknya salah satu alasannya) bahwa WebRTC bahkan tidak didukung pada iOS secara asli tidak ada banyak contoh WebRTC di luar sana yang bekerja di iOS dan tidak ada seorang pun untuk jaringan lokal untuk jaringan lokal. Jadi pertanyaan saya adalah: apakah saya berada di jalan yang benar atau apakah ini tidak mungkin? (Saya tidak menemukan contoh untuk ini di mana pun, tetapi jika saya meletakkan semua posting yang saya baca bersama, saya pikir itu harus dimungkinkan.)
Ditanya 10 Agustus 2017 pukul 12:38
3.257 3 3 Lencana Emas 11 11 Lencana Perak 19 19 Lencana Perunggu
Tidak masalah bagaimana Anda memecahkan penemuan, tetapi untuk membuat koneksi WebRTC, Anda perlu mendapatkan penawaran dan menjawab pesan di antara rekan -rekan. Pesan -pesan itu secara otomatis mengandung kandidat es jika Anda menunggu pengumpulan es selesai terlebih dahulu. Lihat Stackoverflow.com/a/29056385/918910.
WEBRTC: Contoh yang berfungsi
Baru -baru ini saya harus menggunakan WEBRTC untuk proyek sederhana. Teknologi itu sendiri memiliki banyak keunggulan dan sedang dikembangkan sebagai standar terbuka, tanpa perlu plugin apa pun. Namun, saya cukup baru di WEBRTC dan memiliki beberapa masalah untuk mendapatkan konsep -konsep dasar, serta menciptakan solusi yang berfungsi. Ada banyak tutorial yang tersedia (seperti ini, yang menginspirasi solusi saya). Tetapi kebanyakan dari mereka tidak lengkap, usang, atau memaksa saya untuk menggunakan beberapa layanan pihak ketiga (e.G. Google Firebase), yang hanya membuat seluruh proses lebih rumit untuk diatur dan lebih sulit untuk dipahami.
Saya memutuskan untuk mengumpulkan informasi dari semua sumber daya itu dan membuat contoh sederhana dan berfungsi dari aplikasi WebRTC. Itu tidak memerlukan layanan pihak ketiga kecuali Anda ingin menggunakannya melalui jaringan publik (dalam hal ini memiliki server akan benar-benar membantu). Saya berharap ini akan memberikan titik awal yang baik untuk semua orang yang tertarik untuk menjelajahi WebRTC.
Ini tidak akan menjadi tutorial lengkap dari teknologi WebRTC. Anda dapat menemukan banyak tutorial dan penjelasan terperinci di seluruh internet, misalnya di sini. Anda juga dapat memeriksa API WEBRTC jika Anda ingin informasi lebih lanjut. Posting ini hanya akan menunjukkan kepada Anda satu contoh kerja yang mungkin dari WebRTC dan jelaskan cara kerjanya.
Gambaran umum
Kode sumber lengkap dari contoh ini tersedia di GitHub. Program ini terdiri dari tiga bagian:
- aplikasi web
- server pensinyalan
- Putar server
Itu aplikasi web sangat sederhana: satu file html dan satu file javascript (ditambah satu ketergantungan: stopkontak.io.JS, yang termasuk dalam repositori). Ini dirancang untuk bekerja dengan hanya dua klien (dua browser web atau dua tab dari browser yang sama). Setelah Anda membukanya di browser Anda (diuji pada Firefox 74), ia akan meminta izin untuk menggunakan kamera dan mikrofon Anda. Setelah izin diberikan, video dan audio dari masing -masing tab akan dialirkan ke yang lain.
Catatan: Anda mungkin mengalami beberapa masalah jika Anda mencoba mengakses kamera yang sama dari kedua tab. Dalam tes saya, saya’VE menggunakan dua perangkat saat menguji pada mesin saya (kamera laptop bawaan dan webcam USB).
Itu server pensinyalan digunakan oleh aplikasi WebRTC untuk bertukar informasi yang diperlukan untuk membuat koneksi langsung antara rekan. Anda dapat memilih teknologi apa pun yang Anda inginkan untuk ini. Contoh ini menggunakan websockets (Python-Socketio di backend dan stopkontak.IO-CLIENT di frontend).
Itu BERBELOK Server diperlukan jika Anda ingin menggunakan contoh ini melalui jaringan publik. Proses ini dijelaskan lebih lanjut dalam posting ini. Untuk pengujian jaringan lokal, Anda tidak akan membutuhkannya.
Pensinyalan
Server pensinyalan ditulis dalam Python3 dan terlihat seperti ini:
dari aioHttp impor web impor socketio room = 'room' sio = socketio.Asyncserver (cors_allowed_origins = '*') app = web.Application () sio.lampirkan (app) @sio.Acara Async Def Connect (Sid, Environ): Print ('Connected', Sid) Await Sio.emit ('siap', kamar = kamar, skip_sid = sid) sio.enter_room (sid, kamar) @sio.Event Def Disconnect (SID): SIO.ceave_room (sid, room) cetak ('terputus', sid) @sio.Event Async Def Data (SID, Data): Print ('Pesan dari <>: <>'.Format (Sid, Data)) menunggu sio.emit ('data', data, kamar = kamar, skip_sid = sid) if __name__ == '__main__': web.run_app (app, port = 9999)
Setiap klien bergabung dengan kamar yang sama. Sebelum memasuki ruangan, a siap Acara dikirim ke semua klien saat ini di ruangan. Itu berarti bahwa koneksi Websocket pertama tidak akan mendapatkan pesan apa pun (ruangan kosong), tetapi ketika koneksi kedua dibuat, yang pertama akan menerima a siap acara, menandakan bahwa setidaknya ada dua klien di dalam ruangan dan koneksi WebRTC dapat dimulai. Selain itu, server ini akan meneruskan data apa pun (data acara) yang dikirim oleh satu websocket ke yang lain.
Pengaturan cukup sederhana:
CD Signaling Pip Instalasi AIOHTTP Python-Socketio Python Server.py
Ini akan memulai server pensinyalan di Localhost: 9999.
WEBRTC
Proses yang disederhanakan menggunakan WEBRTC dalam contoh ini terlihat seperti ini:
- Kedua klien memperoleh aliran media lokal mereka
- Setelah aliran diperoleh, setiap klien terhubung ke server pensinyalan
- Setelah klien kedua terhubung, yang pertama menerima a siap acara, yang berarti bahwa koneksi WebRTC dapat dinegosiasikan
- Klien pertama membuat objek RTCPeerConnection dan mengirimkan penawaran ke klien kedua
- Klien kedua menerima penawaran, membuat objek RTCPeerConnection, dan mengirimkan jawaban
- Informasi lebih lanjut juga dipertukarkan, seperti kandidat es
- Setelah koneksi dinegosiasikan, panggilan balik untuk menerima aliran jarak jauh dipanggil, dan aliran itu digunakan sebagai sumber dari video elemen.
Jika Anda ingin menjalankan contoh ini di localhost, server pensinyalan dan aplikasi web adalah semua yang Anda butuhkan. Bagian utama dari file HTML adalah elemen video tunggal (sumber mana yang akan diatur nanti oleh skrip):
Contoh Kerja WebRTC
Bagian javascript sedikit lebih rumit, dan saya’LL jelaskan langkah demi langkah. Pertama, ada variabel konfigurasi:
// variabel konfigurasi const Signaling_server_url = 'http: // localhost: 9999'; const pc_config = <>;
Untuk localhost, Pc_config bisa tetap kosong, dan Signaling_server_url harus menunjuk ke server pensinyalan Anda’ve dimulai pada langkah sebelumnya.
Selanjutnya, kami memiliki metode pensinyalan:
Biarkan Socket = IO (Signaling_Server_url, < autoConnect: false >); stopkontak.on ('data', (data) => < console.log('Data received: ',data); handleSignalingData(data); >); stopkontak.on ('ready', () => < console.log('Ready'); createPeerConnection(); sendOffer(); >); Biarkan sendData = (data) => < socket.emit('data', data); >;
Dalam contoh ini, kami ingin terhubung ke server pensinyalan hanya setelah kami mendapatkan aliran media lokal, jadi kami perlu mengatur . Selain itu, kami memiliki file senddata metode yang memancarkan a data acara, dan kami bereaksi terhadap data acara dengan menangani informasi yang masuk dengan tepat (lebih lanjut tentang itu nanti). Juga, menerima a siap Acara berarti bahwa kedua klien telah memperoleh aliran media lokal mereka dan telah terhubung ke server pensinyalan, sehingga kami dapat membuat koneksi di pihak kami dan menegosiasikan penawaran dengan sisi jarak jauh.
Selanjutnya, kami memiliki variabel terkait WEBRTC:
Biarkan PC; Biarkan LocalStream; Biarkan RemotestreamElement = Dokumen.queryselector ('#remotestream');
Itu PC akan menahan koneksi rekan kami, localstream adalah aliran yang kita peroleh dari browser, dan RemotestreamElement adalah video elemen yang akan kami gunakan untuk menampilkan aliran jarak jauh.
Untuk mendapatkan aliran media dari browser, kami akan menggunakan getLocalStream metode:
Biarkan getLocalStream = () => < navigator.mediaDevices.getUserMedia(< audio: true, video: true >) .lalu ((stream) => < console.log('Stream found'); localStream = stream; // Connect after making sure that local stream is availble socket.connect(); >) .catch (error => < console.error('Stream not found: ', error); >); >
Seperti yang Anda lihat, kami akan terhubung ke server pensinyalan hanya setelah aliran (audio dan video) diperoleh. Harap dicatat bahwa semua jenis dan variabel terkait WEBRTC (seperti navigator, RtcpeerConnection, dll.) disediakan oleh browser, dan tidak mengharuskan Anda menginstal apa pun.
Membuat koneksi rekan relatif mudah:
Biarkan createPeerConnection = () => < try < pc = new RTCPeerConnection(PC_CONFIG); pc.onicecandidate = onIceCandidate; pc.onaddstream = onAddStream; pc.addStream(localStream); console.log('PeerConnection created'); >Catch (kesalahan) < console.error('PeerConnection failed: ', error); >>;
Dua panggilan balik yang akan kita gunakan Onicecandidate (dipanggil saat sisi terpencil mengirimi kami kandidat es), dan onaddstream (Dipanggil setelah sisi jarak jauh menambahkan aliran media lokalnya ke koneksi rekannya).
Selanjutnya kami memiliki logika penawaran dan jawaban:
Biarkan sendOffer = () => < console.log('Send offer'); pc.createOffer().then( setAndSendLocalDescription, (error) => < console.error('Send offer failed: ', error); >); >; Biarkan sendanswer = () => < console.log('Send answer'); pc.createAnswer().then( setAndSendLocalDescription, (error) => < console.error('Send answer failed: ', error); >); >; Biarkan setandsendlocaldescription = (sessionDescription) => < pc.setLocalDescription(sessionDescription); console.log('Local description set'); sendData(sessionDescription); >;
Rincian negosiasi penawaran WebRTC bukan bagian dari posting ini (silakan periksa dokumentasi WEBRTC jika Anda ingin tahu lebih banyak tentang prosesnya). Dia’cukup untuk mengetahui bahwa satu sisi mengirim tawaran, yang lain bereaksi terhadapnya dengan mengirimkan jawaban, dan kedua belah pihak menggunakan deskripsi untuk koneksi rekan yang sesuai.
Callback WebRTC terlihat seperti ini:
Biarkan OnicEcandidate = (event) => < if (event.candidate) < console.log('ICE candidate'); sendData(< type: 'candidate', candidate: event.candidate >); >>; Biarkan onAddStream = (event) => < console.log('Add stream'); remoteStreamElement.srcObject = event.stream; >;
Yang diterima kandidat ICE dikirim ke klien lain, dan ketika klien lain menetapkan aliran media, kami bereaksi dengan menggunakannya sebagai sumber untuk kami video elemen.
Metode terakhir digunakan untuk menangani data yang masuk:
Biarkan HandLesignalingData = (data) => < switch (data.type) < case 'offer': createPeerConnection(); pc.setRemoteDescription(new RTCSessionDescription(data)); sendAnswer(); break; case 'answer': pc.setRemoteDescription(new RTCSessionDescription(data)); break; case 'candidate': pc.addIceCandidate(new RTCIceCandidate(data.candidate)); break; >>;
Saat kami menerima penawaran, kami membuat koneksi rekan kami sendiri (yang jauh siap pada saat itu). Kemudian, kami mengatur deskripsi jarak jauh dan mengirim jawaban. Saat kami menerima jawabannya, kami hanya mengatur deskripsi jarak jauh dari koneksi rekan kami. Akhirnya, ketika kandidat es dikirim oleh klien lain, kami menambahkannya ke koneksi rekan kami.
Dan akhirnya, untuk benar -benar memulai koneksi WebRTC, kita hanya perlu menelepon getLocalStream:
// Mulai koneksi getLocalStream ();
Berlari di Localhost
Jika Anda memulai server pensinyalan pada langkah sebelumnya, Anda hanya perlu meng -host file HTML dan JavaScript, misalnya seperti ini:
CD Web Python -M HTTP.Server 7000
Kemudian, buka dua tab di browser Anda (atau di dua browser yang berbeda), dan masukkan Localhost: 7000. Seperti yang disebutkan sebelumnya, yang terbaik adalah memiliki dua kamera yang tersedia untuk contoh ini berfungsi. Jika semuanya berjalan dengan baik, Anda akan melihat satu umpan video di setiap tab.
Di luar localhost
Anda mungkin tergoda untuk menggunakan contoh ini pada dua komputer yang berbeda di jaringan lokal Anda, mengganti localhost dengan mesin Anda’alamat ip, e.G. 192.168.0.11. Anda akan dengan cepat memperhatikan bahwa itu tidak’t bekerja, dan browser Anda mengklaim itu navigator tidak terdefinisi.
Itu terjadi karena WEBRTC dirancang untuk aman. Itu berarti untuk bekerja, itu membutuhkan konteks yang aman. Sederhananya: semua sumber daya (dalam kasus kami server http dan server pensinyalan) harus di -host baik di localhost atau menggunakan https. Jika konteksnya tidak aman, navigator akan tidak ditentukan, dan Anda tidak akan diizinkan untuk mengakses media pengguna.
Jika Anda ingin menguji contoh ini pada mesin yang berbeda, menggunakan localhost jika jelas bukan opsi. Menyiapkan sertifikat bukan bagian dari posting ini dan bukan tugas yang mudah sama sekali. Jika Anda hanya ingin dengan cepat memeriksa contoh ini di dua komputer yang berbeda, Anda dapat menggunakan trik sederhana. Alih -alih hosting sumber daya melalui https, Anda dapat mengaktifkan konteks yang tidak aman di Firefox. Pergi ke tentang: config, menerima risikonya, dan ubah nilai -nilai kedua variabel ini BENAR:
- media.perangkat.merasa tidak aman.diaktifkan
- media.getusermedia.merasa tidak aman.diaktifkan
Seharusnya terlihat seperti ini:
Sekarang Anda harus dapat mengakses aplikasi web di dua komputer yang berbeda, dan koneksi WebRTC harus ditetapkan dengan benar.
Menjadi global
Anda dapat menggunakan contoh ini melalui jaringan publik, tetapi’S akan membutuhkan sedikit lebih banyak pekerjaan. Pertama, Anda perlu mengatur server giliran. Sederhananya, belok server digunakan untuk menemukan rekan kerja WebRTC di atas jaringan publik. Sayangnya, untuk langkah ini, Anda akan membutuhkan server yang terlihat publik. Berita baiknya adalah, setelah Anda memiliki server sendiri, proses pengaturan akan sangat mudah (setidaknya untuk OS berbasis ubuntu). SAYA’ve menemukan banyak informasi berguna dalam diskusi ini tentang Stack Overflow, dan saya’Saya hanya akan menyalin bit terpenting di sini:
sudo apt menginstal coturn turningerver -a -o -v -n ---no -dtls ---no -tls -u Nama pengguna: kredensial -r RealMname
Ini akan memulai server belokan menggunakan port 3478. Bendera itu berarti:
- -A: Gunakan mekanisme kredensial jangka panjang
- -Hai: Mulai proses sebagai daemon (lepaskan dari cangkang saat ini)
- -V: ‘Sedang’ mode verbose
- -N: Jangan gunakan file konfigurasi, ambil semua parameter dari baris perintah saja
- –No-dtls: Jangan mulai pendengar klien DTLS
- –No-tls: Jangan mulai pendengar klien TLS
- -U: akun pengguna, dalam bentuk ‘Nama pengguna: Kata sandi’, untuk kredensial jangka panjang
- -R: ranah default yang akan digunakan untuk pengguna
EDIT: Untuk memeriksa apakah pengaturan server giliran Anda benar, Anda dapat menggunakan validator ini. Untuk menguji contoh di atas, Anda harus memasukkan nilai -nilai berikut:
Klik “Tambahkan server”, Hapus server lain, dan pilih “Kumpulkan kandidat”. Jika Anda mendapatkan komponen jenis menyampaikan, Itu berarti pengaturan Anda berfungsi.
Selanjutnya, Anda perlu sedikit mengubah konfigurasi koneksi rekan. Edit utama.JS, menggantikan dengan IP yang sebenarnya dari server Anda:
const turn_server_url = ': 3478'; const turn_server_username = 'username'; const turn_server_credential = 'kredensial'; const pc_config = < iceServers: [ < urls: 'turn:' + TURN_SERVER_URL + '?transport=tcp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >, < urls: 'turn:' + TURN_SERVER_URL + '?transport=udp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >]>;
Tentu saja, Anda juga harus meng -host server pensinyalan Anda dan aplikasi web itu sendiri pada IP publik, dan Anda perlu berubah Signaling_server_url dengan tepat. Setelah selesai, contoh ini harus berfungsi untuk dua mesin yang terhubung ke internet.
Kesimpulan
Ini hanyalah salah satu contoh dari apa yang dapat Anda lakukan dengan webrtc. Teknologi ini tidak terbatas pada audio dan video, dapat digunakan untuk menukar data apa pun. Saya harap Anda menemukan posting ini bermanfaat dan itu akan membantu Anda memulai dengan ide -ide Anda sendiri!
Hasil survei: dan pengembang WebRTC mengatakan…
Kami menjalankan survei pengembang singkat dengan bloggeek.saya beberapa minggu yang lalu (lihat posting ini). Kami menerima 97 responden pada Jumat lalu, 1 Agustus. Tsahi memilih 3 pemenang secara acak – dia sudah menghubungi mereka jadi jika Anda tidak mendapatkan emailnya, Anda minta maaf untuk mengatakan Anda tidak memenangkan 2 eBook gratis. Namun, Anda masih memenuhi syarat untuk diskon 20%, dan seharusnya menerima email dengan instruksi dengan kode kupon.
97 Responden tentu bukan ukuran sampel yang valid secara statistik dari kumpulan ribuan pengembang WEBRTC aktif (mungkin lebih), tetapi ada beberapa titik data yang berguna yang dapat kami ekstrak dari data.
Jenis Pengembang
Direktori Alat Pengembang kami dibagi menjadi opsi -opsi ini dengan pengecualian Devop. Setahun yang lalu alat khusus DevOps untuk WebRTC tidak ada. Saya mulai mendengar lebih banyak tentang ini dan saya berharap itu akan menjadi yang lebih substansial “alat” kategori dalam waktu dekat.
Seharusnya ada lebih banyak pengembang frontend daripada back-end, jadi sedikit mengejutkan bahwa backend ditunjukkan terlebih dahulu. Tidak banyak pengembang web Pure Frontend sama sekali (lihat beberapa tabel di bawah). WebRTC umumnya tidak berfungsi tanpa pengembangan backend di suatu tempat (pengecualian dengan proyek WebRTC tanpa server di sini). Anda dapat xaas dari orang lain tetapi itu umumnya menyiratkan beberapa biaya. Ini bisa berarti WebRTC masih sulit bagi sebagian besar pengembang frontend murni.
Juga, Warga asli cukup jauh di bawah daftar. Dalam pengalaman saya, penduduk asli masih cukup sulit dilakukan tanpa mengeluarkan uang tunai untuk SDK berbayar. Kami’ll lihat bagaimana itu berubah di android dengan webrtc asli datang ke android-l datang.
Ini adalah satu -satunya pertanyaan yang merupakan multiselect, yang berarti responden dapat memilih sebanyak yang tepat. Lebih dari segalanya, saya terkejut melihat mayoritas responden melakukan lebih dari satu jenis pengembangan, dengan sepertiga banyak melakukan 3 atau lebih:
Tipe dev dipilih | # | % |
1 | 41 | 42% |
2 | 22 | 23% |
3 | 25 | 26% |
4 | 3 | 3% |
5 | 6 | 6% |
Hitungan responden yang memilih lebih dari satu jenis pengembang berdasarkan hitungan
Ini membuat saya penasaran dengan pertanyaan seperti:
- Lakukan pengembang back-end mengetahui lebih banyak jenis pengembangan yang berbeda dari pengembang asli?
- Jenis pengembangan mana yang cenderung menjadi superset dari yang lain?
Inilah kabel silang penuh:
Frontend Web | Backend Web | Warga asli | Telekomunikasi | Devop | |
Frontend Web | 100% | 84% | 32% | 29% | 23% |
Backend Web | 78% | 100% | 30% | 37% | 27% |
Warga asli | 72% | 72% | 100% | 36% | 28% |
Telekomunikasi | 37% | 51% | 21% | 100% | 21% |
Devop | 72% | 89% | 39% | 50% | 100% |
Persentase responden yang memilih lebih dari satu jenis pengembang berdasarkan jenis pengembang
Berdasarkan dataset ini (dan mengasumsikan kebenaran), pengembang DevOps cenderung memiliki keterampilan terbanyak di bidang lain. Pengembang asli tahu banyak bagian depan dan belakang.
Dan apa kelompok yang paling mungkin mencatat hanya satu keterampilan pengembangan: telekomunikasi; Hampir setengah dari responden telekomunikasi “telekomunikasi” dengan tidak ada yang lain. Responden telekomunikasi menjadi sederhana atau mereka perlu meningkatkan keterampilan mereka relatif terhadap rekan -rekan mereka di kategori lain.
Tipe dev | 1 | 2 | 3 | 4 | 5 | Hasil akhir |
Frontend Web | 14% | 30% | 39% | 5% | 11% | 100% |
Backend Web | 10% | 33% | 42% | 5% | 10% | 100% |
Telekomunikasi | 47% | 12% | 21% | 7% | 14% | 100% |
Warga asli | 20% | 8% | 40% | 8% | 24% | 100% |
Devop | 11% | 0% | 50% | 6% | 33% | 100% |
Jumlah jenis pengembang yang dipilih sebagai persentase dari total tipe dev berdasarkan jenis pengembangan
Kerangka kerja front-end
Yang ini membuat saya pribadi dan beberapa anggota tim Webrtchacks secara pribadi penasaran. Salah satu buku hadiahnya adalah tentang Angular. Saya telah menggunakan jQuery untuk proyek saya belakangan ini dan bertanya -tanya apakah ada cara yang lebih baik karena saya mempertimbangkan aplikasi yang lebih canggih.
“Lainnya” adalah respons yang signifikan di sini – dalam kelompok itu jQuery muncul 4 kali (4%). Tidak ada atau kebiasaan yang dicatat oleh 8 (8%)
Kerangka dan alat back-end
Pertama, kami mohon maaf karena mengabaikan untuk menempatkan “lainnya” kategori di sini. Opsi lain seharusnya ada di sana. Tanpa memiliki “lainnya” Opsi, sulit untuk memprediksi berapa banyak yang akan memilih itu, tetapi aman untuk mengatakan ini akan menurunkan respons untuk item di atas dengan setidaknya beberapa poin persentase.
Tidak ada kejutan besar pada tanggapan di atas, tetapi saya ingin tahu bagaimana ini cocok dengan berbagai jenis pengembang:
Jenis Pengembang | ||||||
Kerangka/ Alat | Total | Frontend Web | Backend Web | Warga asli | Telekomunikasi | Devop |
Node.JS | 36% | 46% | 43% | 24% | 30% | 33% |
Jawa | 20% | 16% | 20% | 20% | 19% | 11% |
Python atau Rails | 14% | 13% | 12% | 16% | 16% | 22% |
Tanda bintang || Freeswitch | 12% | 4% | 5% | 8% | 23% | 17% |
Php | 10% | 14% | 13% | 20% | 5% | 6% |
.BERSIH | 7% | 7% | 7% | 12% | 7% | 11% |
Cross Tab Framework/Tool Question VS. Jenis pengembang ditampilkan sebagai % dari total kolom
Tidak ada tren yang jelas di sini selain preferensi umum untuk node.JS. Saya sedikit terkejut melihat Telekomunikasi Begitu terfragmentasi – Saya akan mengharapkan pengelompokan yang lebih kuat di sekitar alat telekomunikasi yang lebih tradisional seperti Java dan Asterisk/Freeswitch. Ingat data ini agak dikaburkan karena pertanyaan tipe pengembang adalah multi-select.
Alat dan Xaas spesifik WEBRTC
Kami juga memiliki pertanyaan bentuk bebas untuk memungkinkan responden memasukkan alat apa pun yang mereka gunakan. 86% responden memasuki sesuatu. Di bawah ini adalah kecuali semua alat yang disebutkan lebih dari sekali:
Siapa’S berikutnya untuk WebRTC – IE, Safari, atau iOS?
Tidak banyak yang ditambahkan di sini. Kami dapat terus memeriksa status.modern.yaitu untuk yang terbaru di internet explorer. Semoga berhasil mencari tahu apa yang akan dilakukan Apple.
Bagaimana belajar tentang webrtc?
Senang melihat kita memiliki audiens yang setia dengan WebRTchacks datang pertama �� . Ada juga 4 “lainnya” Respons (4%) untuk GitHub. Itu mengingatkan saya untuk menyebutkan bahwa saya telah meluruskan halaman gitub Webrtchacks untuk proyek saya.
Pikiran terakhir
Take-aways utama saya adalah:
- Node.JS, Angular, dan Easyrtc memenangkan kontes popularitas ini.
- DevOps membuat penampilan yang bermakna – ini bisa menjadi indikator bahwa WebRTC menjadi siap produksi.
- Keterampilan pengembangan telekomunikasi peringkat cukup rendah, tetapi tidak serendah pengembangan asli dan DevOps
- Keterampilan telekomunikasi adalah yang paling terkonsentrasi – responden kami dengan keterampilan telekomunikasi perlu memperluas set keterampilan pengembangan mereka untuk memasukkan lebih banyak web
Saya pasti ingin melakukan ini lagi di masa depan dan memberikan dorongan yang lebih besar untuk meningkatkan tingkat respons. Untuk sementara kita’ll tetap membuka survei – jangan ragu untuk menjawab jika Anda belum melakukannya. Kami’LL check-in di atasnya secara berkala dan perbarui posting ini seperlunya.
Jika Anda ingin melakukan analisis sendiri atau melihat bagaimana saya memotong data, Anda dapat melihat hasil mentah (dikurangi informasi pengenal apa pun) dan workfile saya di sini.
Anda juga dapat memeriksa Tsahi’S posting pada hasil di sini.
Sekali lagi terima kasih kepada semua responden – kontribusi Anda terus membantu komunitas WebRTC!