Artikel ini pada asalnya diterbitkan di Blog Metered: Tutorial WHIP & WHEP WebRTC: Bina Apl Penstriman langsung
WHIP (WebRTC-HTTP Ingestion Protocol) dan WHEP (WebRTC-HTTP Egress Protocol) ialah protokol yang direka untuk menyelaraskan isyarat dalam WebRTC dengan bantuan kaedah HTTP standard
Definisi WHIP: WHIP memudahkan cara peranti klien menghantar strim media ke pelayan.
Definisi WHEP: Protokol WHEP digunakan untuk menghantar strim media daripada pelayan kepada pelanggan. Ia menggunakan protokol HTTP untuk mengendalikan isyarat untuk penggunaan media sekali gus membolehkan peranti klien menerima aliran media tanpa persediaan yang rumit
Peranan dalam Memudahkan Isyarat WebRTC
Kemudahan Pelaksanaan: WHEP dan WHIP menggunakan protokol HTTP dengan itu protokol ini mengurangkan kerumitan yang dikaitkan dengan
Komunikasi Tanpa Kewarganegaraan: Ini kerana HTTP ialah protokol tanpa kewarganegaraan, pelayan tidak perlu mengekalkan maklumat sesi berterusan antara permintaan.
Keserasian yang Dipertingkat: Memandangkan HTTP mempunyai keserasian universal, menggunakan HTTP untuk isyarat adalah yang terbaik untuk keserasian merentas platform dan peranti
Pembangunan pantas: Pembangun boleh melaksanakan aplikasi WebRTC dengan lebih cekap, kerana mereka tidak perlu mengambil kira butiran rumit metodologi isyarat tradisional
Protokol WHIP telah merevolusikan cara aliran media boleh dihantar ke pelayan daripada peranti klien dengan menggunakan kaedah HTTP untuk memberi isyarat
Secara tradisional untuk menyediakan WebRTC, anda perlu menyediakan mekanisme isyarat kompleks menggunakan soket web atau protokol lain. Dengan WHIP proses ini menjadi mudah dengan menggunakan protokol HTTP untuk memberi isyarat dan memulakan sesi WebRTC
Permintaan HTTP POST: Di sini peranti klien menghantar permintaan HTTP POST dengan SDP atau tawaran protokol perihalan sesi dalam badan ke titik akhir WHIP
Maklum Balas Pelayan: Pelayan Media kemudian memproses tawaran SDP dan membalas dengan 200 kod status termasuk jawapan SDP dalam badan permintaan
Pertukaran Calon ICE: Protokol WHIP menyokong protokol ICE dengan membenarkan pelanggan menghantar permintaan HTTP PATCH tambahan apabila calon ICE baharu tersedia
Penubuhan Sambungan: Setelah pertukaran SDP selesai maka sambungan peer to peer diwujudkan membolehkan pelanggan menstrim media ke pelayan
Kesederhanaan: Dengan menggunakan kaedah WHIP, WHIP mengurangkan keperluan untuk sambungan berterusan dan pelayan isyarat.
Kemudahan Pelaksanaan: Pembangun boleh menggunakan HTTP yang mempunyai keserasian universal untuk mempercepatkan proses pembangunan
Skalabiliti: Permintaan HTTP tanpa status membenarkan pelayan mengendalikan berbilang permintaan sambungan serentak dengan itu dengan mudah mengurus sejumlah besar sambungan.
Firewall dan Mesra Proksi: HTTP mesra tembok api, hampir semua jenis firewall membenarkan trafik HTTP
Kos Berkesan: Isyarat yang dipermudahkan melalui HTTP mengurangkan kos yang berkaitan dengan menambah pelayan isyarat
Protokol WHEP memudahkan proses penghantaran media dari pelayan ke peranti klien.
Oleh itu, protokol WHEP membolehkan anda menggunakan HTTP untuk menyediakan isyarat untuk menerima media daripada pelayan peranti klien.
Permintaan HTTP GET: Pelanggan meminta aliran media dengan menghantar permintaan HTTP GET ke titik akhir WHEP pelayan
SDP Exchange: Pelayan bertindak balas dengan tawaran SDP dalam respons HTTP, pelanggan kemudian menghantar semula jawapan SDP dalam permintaan POST seterusnya
Penerimaan Media: Setelah sambungan diwujudkan, strim media diterima melalui sambungan WebRTC yang telah ditetapkan. NOTA: Banyak kali anda memerlukan PUTAR pelayan untuk mewujudkan sambungan WebRTC
Sokongan untuk ICE: WHEP membenarkan pertukaran Calon ICE melalui permintaan tampalan HTTP tambahan sekali gus membolehkan sambungan yang lebih baik
Pelaksanaan Pelanggan Ringkas: Penggunaan permintaan HTTP justeru mengurangkan keperluan untuk mekanisme isyarat yang kompleks
Keserasian yang Dipertingkat: Sokongan universal untuk protokol HTTP memastikan keserasian yang lebih baik merentas peranti
Skala Dipertingkat: Oleh kerana HTTP ialah protokol tanpa kewarganegaraan, ini meningkatkan kebolehskalaan pelayan dan dengan sumber yang kecil anda boleh menskalakan kepada bilangan pengguna yang sangat besar
Traversal Rangkaian yang Lebih Baik: Oleh kerana anda boleh melakukan isyarat dengan HTTP dan tidak memerlukan soket web atau mekanisme lain, ini meningkatkan traversal NAT untuk sambungan. Setelah sambungan diwujudkan, anda memerlukan HIDUPKAN pelayan untuk WebRTC
Kependaman Dikurangkan: Isyarat menggunakan HTTP boleh membawa kepada sambungan yang lebih pantas sekali gus meningkatkan pengalaman pengguna.
Dengan menggabungkan WHIP dan WHEP, pembangun boleh mencipta penyelesaian isyarat yang komprehensif untuk WebRTC
Gabungan ini memudahkan pengingesan dan penghantaran strim media, memastikan pelaksanaan WebRTC yang lebih lancar
Pendekatan Isyarat Bersatu: Menggunakan HTTP untuk kedua-dua pengingesan dan penghantaran menghasilkan metodologi isyarat yang konsisten
Kerumitan Dikurangkan: Pembangun perlu berurusan dengan protokol HTTP sahaja, sekali gus mengurangkan keluk pembelajaran dan penyelenggaraan kod
Prestasi Dipertingkat: Memperkemas kod dengan protokol tunggal untuk memberi isyarat membawa kepada masa sambungan yang lebih cepat dan kependaman yang lebih rendah apabila anda menghantar media
Platform Penstriman Langsung:
Aplikasi Interaktif
Seni Bina Boleh Skala
Melaksanakan WHIP dan WHEP dalam apl WebRTC anda agak mudah. Dalam bahagian ini, kami akan menyediakan pelayan WHIP dan menyepadukannya dalam aplikasi anda menggunakan teknologi moden seperti nod dan docker
Di sini kita akan menggunakan perkhidmatan pelayan Metered.ca TURN untuk traversal NAT
Pra-syarat dan Persediaan Persekitaran:
Node.js dan NPM: Pastikan anda memasang Node dan nvm terkini
Akaun Metered.ca: Buat akaun percuma pada Pelayan TURN Bermeter
Alamat IP Awam: Ini diperlukan untuk pelayan boleh diakses di Internet. Jika anda menggunakan mana-mana pembekal awan untuk aplikasi anda, anda mendapat alamat IP awam percuma dengannya
WebRTC Media Server: Kami memerlukan pelayan media seperti GStreamer atau Janus yang mempunyai sokongan WHIP
Pasang GStreamer dengan Sokongan WHIP
Sediakan Pelayan WHIP dengan GStreamer
gst-launch-1.0 whipserversrc name=whip \ ! queue ! videoconvert ! autovideosink
Arahan di atas memulakan pelayan WHIP yang menerima strim media masuk dan memaparkannya
Konfigurasikan Pelayan untuk Digunakan Metered.ca TURN Server
gst-launch-1.0 whipserversrc name=whip ice-server="turn://YOUR_USERNAME:YOUR_CREDENTIAL@relay.metered.ca:80" \ ! queue ! videoconvert ! autovideosink
Sediakan Proksi Songsang dengan Node.JS (Pilihan):
const express = require('express'); const httpProxy = require('http-proxy'); const app = express(); const proxy = httpProxy.createProxyServer(); app.post('/whip', (req, res) => { proxy.web(req, res, { target: 'http://localhost:PORT_WHERE_GSTREAMER_IS_RUNNING' }); }); app.listen(3000, () => { console.log('Proxy server running on port 3000'); });
Coretan Kod untuk Mengintegrasikan WHIP:
Di sisi pelanggan, anda boleh menangkap strim media dengan bantuan RTCPeerConnection dan menggunakan permintaan HTTP untuk mengendalikan isyarat yang diperlukan untuk mewujudkan sambungan
Tangkap Strim Media:
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
Anda boleh mencipta RTCPeerConnection dengan bantuan Metered TURN Servers
var myPeerConnection = new RTCPeerConnection({ iceServers: [ { urls: "stun:stun.relay.metered.ca:80", }, { urls: "turn:global.relay.metered.ca:80", username: "your-username", credential: "your-credential", }, { urls: "turn:global.relay.metered.ca:80?transport=tcp", username: "your-username", credential: "your-credential", }, { urls: "turn:global.relay.metered.ca:443", username: "your-username", credential: "your-credential", }, { urls: "turns:global.relay.metered.ca:443?transport=tcp", username: "your-username", credential: "your-credential", }, ], });
mediaStream.getTracks().forEach((track) => { pc.addTrack(track, mediaStream); });
const offer = await pc.createOffer(); await pc.setLocalDescription(offer); const response = await fetch('http://YOUR_SERVER_IP:3000/whip', { method: 'POST', headers: { 'Content-Type': 'application/sdp' }, body: pc.localDescription.sdp, }); const sdpAnswer = await response.text(); await pc.setRemoteDescription({ type: 'answer', sdp: sdpAnswer });
Pihak Pelanggan:
Permintaan HTTP POST:
Menjangkakan Maklum Balas:
Sisi Pelayan:
Terima Tawaran SDP:
Jana Jawapan SDP
Memudahkan traversal media melalui NAT dan firewall apabila sambungan terus rakan ke rakan tidak dapat dilakukan
Berikut ialah kelayakan Pelayan TURN dan Pelayan ICE
gst-launch-1.0 whipserversrc name=whip \ ! queue ! videoconvert ! autovideosink
Mempunyai klien WHIP membolehkan apl anda menerima strim media daripada pelayan menggunakan isyarat HTTP.
Pemahaman asas API WebRTC dalam Javascript
Pelayan media yang menyokong WHEP GStreamer Janus atau mana-mana
Metered.ca TURN kelayakan pelayan
Mulakan RTCPeerConnection
gst-launch-1.0 whipserversrc name=whip ice-server="turn://YOUR_USERNAME:YOUR_CREDENTIAL@relay.metered.ca:80" \ ! queue ! videoconvert ! autovideosink
Sediakan pendengar acara untuk menghidupkan semula trek jauh daripada pelayan
const express = require('express'); const httpProxy = require('http-proxy'); const app = express(); const proxy = httpProxy.createProxyServer(); app.post('/whip', (req, res) => { proxy.web(req, res, { target: 'http://localhost:PORT_WHERE_GSTREAMER_IS_RUNNING' }); }); app.listen(3000, () => { console.log('Proxy server running on port 3000'); });
Hantar permintaan GET ke pelayan
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
var myPeerConnection = new RTCPeerConnection({ iceServers: [ { urls: "stun:stun.relay.metered.ca:80", }, { urls: "turn:global.relay.metered.ca:80", username: "your-username", credential: "your-credential", }, { urls: "turn:global.relay.metered.ca:80?transport=tcp", username: "your-username", credential: "your-credential", }, { urls: "turn:global.relay.metered.ca:443", username: "your-username", credential: "your-credential", }, { urls: "turns:global.relay.metered.ca:443?transport=tcp", username: "your-username", credential: "your-credential", }, ], });
Buat jawapan SDP dan hantar ke pelayan melalui permintaan HTTP POST
mediaStream.getTracks().forEach((track) => { pc.addTrack(track, mediaStream); });
Jika anda perlu menghantar calon ICE secara berasingan kemudian kendalikan acara calon ais
const offer = await pc.createOffer(); await pc.setLocalDescription(offer); const response = await fetch('http://YOUR_SERVER_IP:3000/whip', { method: 'POST', headers: { 'Content-Type': 'application/sdp' }, body: pc.localDescription.sdp, }); const sdpAnswer = await response.text(); await pc.setRemoteDescription({ type: 'answer', sdp: sdpAnswer });
var myPeerConnection = new RTCPeerConnection({ iceServers: [ { urls: "stun:stun.relay.metered.ca:80", }, { urls: "turn:global.relay.metered.ca:80", username: "e13b9bsdfdsfsdfb0676cc5b6", credential: "dedewdewfer+gq5iT", }, { urls: "turn:global.relay.metered.ca:80?transport=tcp", username: "e13bdfdsfds6b0676cc5b6", credential: "dewfrefre+gq5iT", }, { urls: "turn:global.relay.metered.ca:443", username: "e13b9fsdfdsfsd86b0676cc5b6", credential: "csdfwefeer+gq5iT", }, { urls: "turns:global.relay.metered.ca:443?transport=tcp", username: "e13b9dsfsdfe6b0676cc5b6", credential: "sdfewtrererer+gq5iT", }, ], });
apabila acara trek dicetuskan, pasangkan strim yang diterima pada elemen video
Mengendalikan Acara Strim Media
var myPeerConnection = new RTCPeerConnection({ iceServers: [ { urls: "stun:stun.relay.metered.ca:80", }, { urls: "turn:global.relay.metered.ca:80", username: "e13b9bsdfdsfsdfb0676cc5b6", credential: "dedewdewfer+gq5iT", }, { urls: "turn:global.relay.metered.ca:80?transport=tcp", username: "e13bdfdsfds6b0676cc5b6", credential: "dewfrefre+gq5iT", }, { urls: "turn:global.relay.metered.ca:443", username: "e13b9fsdfdsfsd86b0676cc5b6", credential: "csdfwefeer+gq5iT", }, { urls: "turns:global.relay.metered.ca:443?transport=tcp", username: "e13b9dsfsdfe6b0676cc5b6", credential: "sdfewtrererer+gq5iT", }, ], });
b. Rundingan diperlukan
pc.addEventListener('track', (event) => { const [remoteStream] = event.streams; // Attach the remote stream to a video element const remoteVideo = document.getElementById('remoteVideo'); remoteVideo.srcObject = remoteStream; });
const whepServerEndpoint = 'http://YOUR_SERVER_IP:3000/whep'; // Replace with your server's WHEP endpoint const response = await fetch(whepEndpoint, { method: 'GET', headers: { Accept: 'application/sdp', }, }); const sdpOffer = await response.text();
Pelayan TURN bermeter
API: HIDUPKAN pengurusan pelayan dengan API berkuasa. Anda boleh melakukan perkara seperti Tambah/Alih keluar bukti kelayakan melalui API, Dapatkan Setiap Pengguna / Bukti kelayakan dan metrik Pengguna melalui API, Dayakan/ Lumpuhkan bukti kelayakan melalui API, Dapatkan semula data Penggunaan mengikut tarikh melalui API.
Penyasaran Geo-Lokasi Global: Menghalakan trafik ke pelayan terdekat secara automatik, untuk kependaman serendah mungkin dan prestasi kualiti tertinggi. kependaman kurang daripada 50 ms di mana-mana sahaja di seluruh dunia
Pelayan di semua Wilayah di dunia: Toronto, Miami, San Francisco, Amsterdam, London, Frankfurt, Bangalore, Singapura, Sydney, Seoul, Dallas, New York
Kependaman Rendah: kurang daripada 50 ms kependaman, di mana-mana sahaja di seluruh dunia.
Kos Efektif: harga bayar semasa anda pergi dengan lebar jalur dan diskaun volum tersedia.
Pentadbiran Mudah: Dapatkan log penggunaan, e-mel apabila akaun mencapai had ambang, rekod pengebilan dan sokongan e-mel serta telefon.
Mematuhi Standard: Mematuhi RFC 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 59244, TLS dan TLS. 🎜>
Berbilang‑Penyewaan: Buat berbilang bukti kelayakan dan asingkan penggunaan mengikut pelanggan atau apl yang berbeza. Dapatkan log Penggunaan, rekod pengebilan dan makluman ambang.
Kebolehpercayaan Perusahaan: 99.999% Masa Beroperasi dengan SLA.
Skala Perusahaan: Tanpa had pada trafik serentak atau jumlah trafik. Pelayan TURN Bermeter menyediakan Kebolehskalaan Perusahaan
5 GB/bln Percuma: Dapatkan 5 GB penggunaan pelayan TURN percuma setiap bulan dengan Pelan Percuma
Saluran Data WebRTC: Panduan
Tutorial Rakan Sebaya Mudah: Tambah Pelayan TURN untuk Video, Saluran Data
Panduan untuk Menyediakan Pelayan TURN WebRTC Anda dengan Bermeter
WebRTC lwn HLS: Mana Yang Terbaik untuk Anda?
Atas ialah kandungan terperinci Tutorial WHIP & WHEP WebRTC: Bina Apl Penstriman langsung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!