(Pafupifupi) kusakatula kopanda phindu kuchokera pa msakatuli. Gawo 2. WebRTC
Mwanjira ina mkati ΠΎΠ΄Π½ΠΎΠΉ kuyambira zolemba zakale komanso zosiyidwa kale, ndidalemba za momwe mungaulutsire makanema mosavuta komanso mwachilengedwe kuchokera pansalu kudzera pa ma websockets. Munkhaniyi, ndidalankhula mwachidule za momwe mungajambulire kanema kuchokera pa kamera ndi mawu kuchokera pa maikolofoni pogwiritsa ntchito MediaStream API, momwe mungasinthire mtsinje wolandiridwa ndikutumiza kudzera pa ma websockets ku seva. Komabe, kwenikweni samachita izi, chifukwa chowulutsa amagwiritsa ntchito mapulogalamu apadera omwe amafunika kukhazikitsidwa ndikukonzedwa: offhand, izi zitha kukhala. Tsegulani Mapulogalamu Otsatsa, kapena amagwiritsa ntchito WebRTC, yomwe imagwira ntchito kunja kwa bokosi, ndiye kuti, sikutanthauza kukhazikitsa mapulagini aliwonse a la flash player, omwe adzadulidwa mu msakatuli wa Chromium kale mu December.
Lero tikambirana za WebRTC.
Web Real-Time Communication (WebRTC) si protocol imodzi, ndi gulu lonse la miyezo, ma protocol ndi JavaScript API zomwe pamodzi zimapereka kulumikizana kwapanthawi yeniyeni kwamavidiyo ndi audio, komanso kutha kugwiritsidwa ntchito kusamutsa chilichonse. data binary. Nthawi zambiri asakatuli amakhala ngati anzawo, koma amathanso kukhala pulogalamu yam'manja, mwachitsanzo. Kuti mukonzekere kulumikizana kwa p2p pakati pa makasitomala, chithandizo cha msakatuli chamitundu yosiyanasiyana yamavidiyo ndi ma encoding amawu chimafunika, kuthandizira ma protocol osiyanasiyana a netiweki, kuwonetsetsa kuyanjana kwa Hardware ndi osatsegula (kupyolera mu zigawo za OS): ma webukamu, makadi amawu. Matekinoloje onsewa amabisika kuseri kwa JavaScript API abstraction kuti wopanga athandizire.
Zonse zimatengera ma API atatu:
MediaStream API - Anathyoledwa nthawi yotsiriza, lero ndilemba zambiri za iye. Imatumikira kuti ilandire mavidiyo / ma audio kuchokera pa hardware
RTCPeerConnection - imapereka kulumikizana pakati pa makasitomala awiri (p2p)
RTCDataChannel - imathandizira kusamutsa deta yosagwirizana pakati pa makasitomala awiri
Kukonzekera ma audio ndi makanema kuti atumizidwe
Zonse zimayamba ndi "kujambula" ma webukamu ndi maikolofoni media mitsinje. Zachidziwikire, mitsinje yaiwisi si yoyenera kukonza ma teleconference, mtsinje uliwonse uyenera kukonzedwa: kusintha mtundu, kulunzanitsa mawu ndi kanema, ikani zizindikiro zolumikizirana pamayendedwe a kanema, ndikuwonetsetsa kuti bitrate ikugwirizana ndi bandwidth yomwe ikusintha nthawi zonse. . Msakatuli amasamalira zonsezi, wopanga sakhala ndi nkhawa kuti apereke encoding ya media media. Mkati mwa msakatuli wamakono, muli kale zigawo za mapulogalamu ojambulira, kuwongolera khalidwe (chotsani echo ndi phokoso pamawu, sinthani chithunzi), mavidiyo ndi ma encoding. Dongosolo lachidule likuwonetsedwa mkuyu. 1:
Mpunga. 1. Zigawo za audio ndi kanema processing mu msakatuli
Timatchula iceServers ngati imodzi mwazosankha - iyi ndi seva yomwe imathandizira kupereka kulumikizana pakati pa asakatuli awiri kumbuyo kwa NAT'om. Ndiye kuti, vutoli likuthetsedwa apa: momwe mungapezere ip ya interlocutor ngati ali kumbuyo kwa NAT wa wothandizira wake? Protocol ya ICE imabwera kudzapulumutsa, kwenikweni, ICE sigwira ntchito ku WebRTC konse, koma zambiri pambuyo pake.
Chotsatira, chochitika chomwe chikufunika chikuwotcha pa peerConnection, mu chothandizira chomwe tiyenera kupanga chopereka (molingana ndi SDP - Session Description Protocol) ndikuchipereka kwa peerConnection kudzera pa setLocalDescript njira. Za SDP - zomwe zili komanso mawonekedwe operekera ndi mayankho - tikambirana zambiri.
Pambuyo popereka LocalDescript peerConnection, msakatuli "amasonkhanitsa" okonda ayezi, ndiko kuti, amapeza njira zosiyanasiyana zolankhulirana kudzera mu NAT. Chochitika cha onicegatheringstatechange chikuyaka. Mu onicegatheringstatechange handler, timalola kuti kulumikizana ndi seva ya webrtc-signaling-server kusinthanitsa Mafotokozedwe a Gawo pakati pa anzathu:
peerConnection.oniceconnectionstatechange = (event) => {
console.log('Connection state: ', peerConnection.iceConnectionState);
if (peerConnection.iceConnectionState === 'connected') {
// ΠΠΎΠΆΠ΅ΠΌ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Start broadcast
setBroadcasting(true);
setBroadcastingBtnActive(true);
}
};
// Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠ°Π·Ρ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΡΡ ΠΌΠ΅Π΄Π°ΠΈΠ°ΠΏΠΎΡΠΎΠΊ Π² peerConnection
peerConnection.onnegotiationneeded = (event) => {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ SDP offer
peerConnection.createOffer().
then((offer) => peerConnection.setLocalDescription(offer)).
catch(console.error);
};
// Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ICE ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ
peerConnection.onicegatheringstatechange = (ev) => {
let connection = ev.target;
// Now we can activate broadcast button
if (connection.iceGatheringState === 'complete') {
let delay = 50;
let tries = 0;
let maxTries = 3;
let timerId = setTimeout(function allowStreaming() {
if (isOnline) {
setBroadcastingBtnActive(true);
return;
}
if (tries < maxTries) {
tries += 1;
delay *= 2;
timerId = setTimeout(allowStreaming, delay);
} else {
// TODO: show user notification
console.error("Can't connect to server");
alert("Can't connect to server");
}
}, delay);
}
};
Webrtc-signaling-server ndi seva yofunikira kusinthanitsa kufotokozera gawoli pakati pa anzawo awiri, ikhoza kukhala websocket yosavuta kapena xhr-server pa PL iliyonse. Ntchito yake ndi yosavuta: kuvomereza kufotokozera kwa gawo kuchokera kwa anzawo ndikusamutsira wina.
Pambuyo pa kusinthana kwa mafotokozedwe a Gawoli, mbali zonse ziwiri zakonzeka kufalitsa ndi kulandira mavidiyo, kumbali yomwe imalandira mtsinje wa kanema, chochitika cha ontrack chimayambika pa peerConnection, mwa wothandizira omwe, mayendedwe omwe adalandira angaperekedwe. ndipo yang'anani pa interlocutor yomwe mumakonda. Chiphunzitso china ndi tsatanetsatane.
https://hpbn.co/ - Book High Performance Browser Networking. Nkhani zowonetsetsa kuti ntchito zapaintaneti zikuyenda bwino zimakambidwa mwatsatanetsatane. Pamapeto pake, WebRTC ikufotokozedwa. Bukulo ndi lakale (2013), koma silitaya kufunikira kwake.
Mu gawo lotsatira, ndikufuna kupereka gawo lochulukirapo la chiphunzitso komanso kuchitapo kanthu kusanthula kulandila ndi kukonza mavidiyo pa seva pogwiritsa ntchito pion, transcoding ku HLS kudzera pa ffmpeg kuti iwulutsidwe kwa owonera mu msakatuli.