Date: Tue, 19 Mar 2024 06:54:29 +0100 (CET) Message-ID: <1522062972.45239.1710827669601@docs.flashphoner.com> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_45238_1398008141.1710827669601" ------=_Part_45238_1398008141.1710827669601 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
=D0=92 =D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C config.js
=
=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B =D1=84=D1=83=D0=BD=D0=BA=
=D1=86=D0=B8=D0=B8 =D0=B4=D0=BB=D1=8F =D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=
=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8 =D0=BA=D0=BE=D0=BC=D0=BD=D0=B0=D1=82=
=D1=8B =D0=B8 =D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0 =D0=BA =D0=BB=D0=
=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=BC =D0=BC=D0=B5=D0=B4=D0=B8=D0=
=B0 =D1=83=D1=81=D1=82=D1=80=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0=D0=BC =D0=
=B2 =D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=
=B8 =D1=81 =D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=BC =D0=BA=D0=BE=D0=BD=D1=84=D0=
=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8. =D0=9F=D1=80=D0=B8=D0=BC=D0=
=B5=D1=80 =D1=84=D0=B0=D0=B9=D0=BB=D0=B0 =D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=
=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8:
{ "room": { "url": "ws://127.0.0.1:8080", "name": "ROOM1", "pin": "1234", "nickName": "User1" }, "media": { "audio": { "tracks": [{ "source": "mic", "channels": 2 }] }, "video": { "tracks": [ { "source": "camera", "width": 1280, "height": 720, "codec": "H264", "constraints": { "frameRate": 25 }, "encodings": [ { "rid": "720p", "active": true, "maxBitrate": 900000 }, { "rid": "360p", "active": true, "maxBitrate": 500000, "scaleRe= solutionDownBy": 2 }, { "rid": "180p", "active": true, "maxBitrate": 200000, "scaleRe= solutionDownBy": 4 } ] } =20 ] } } }=20
=D0=94=D0=BB=D1=8F =D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0 =D0=B8=D1= =81=D1=85=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE =D0=BA=D0=BE=D0=B4=D0=B0 =D0= =B2=D0=BE=D0=B7=D1=8C=D0=BC=D0=B5=D0=BC =D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1= =8E =D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F config.js, =D0=BA=D0=BE=D1=82=D0= =BE=D1=80=D0=B0=D1=8F =D0=BD=D0=B0=D1=85=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1= =8F =D0=B7=D0=B4=D0=B5=D1=81=D1=8C
getRoomConfig() code
const getRoomConfig= =3D function(config) { let roomConfig =3D { url: config.url || "ws://127.0.0.1:8080", roomName: config.name || "ROOM1", pin: config.pin || "1234", nickname: config.nickName || "User1" =20 }; return roomConfig; }=20
getVideoStreams() code
const getVideoStrea= ms =3D async function(config) { let streams =3D []; if (config.media && config.media.video && config.media.= video.tracks) { streams =3D await getStreams(config.media.video.tracks); } return streams; }=20
getAudioStreams) code
const getAudioStrea= ms =3D async function(config) { let streams =3D []; if (config.media && config.media.audio && config.media.= audio.tracks) { streams =3D await getStreams(config.media.audio.tracks); } return streams; }=20
getStreams() code
const getStreams = =3D async function(tracks) { let streams =3D []; for (let track of tracks) { let stream =3D await getMedia(track); if (stream) { streams.push({ stream: stream, encodings: track.encodings, source: track.source }); } } return streams; }=20
getMedia() code
const getMedia =3D = async function(track) { //convert to constraints ... const constraints=3D {}; if (track.source =3D=3D=3D "mic") { //audio constraints.audio =3D {}; if (track.constraints) { constraints.audio =3D track.constraints; } if (track.channels && track.channels =3D=3D=3D 2) { constraints.audio.echoCancellation =3D false; constraints.audio.googEchoCancellation =3D false; } } else if (track.source =3D=3D=3D "camera") { ... } else if (track.source =3D=3D=3D "screen") { ... } ... return stream; }=20
getMedia() code
const getMedia =3D = async function(track) { //convert to constraints ... const constraints=3D {}; if (track.source =3D=3D=3D "mic") { ... } else if (track.source =3D=3D=3D "camera") { constraints.video =3D {}; if (track.constraints) { constraints.video =3D track.constraints; } constraints.video.width =3D track.width; constraints.video.height =3D track.height; } else if (track.source =3D=3D=3D "screen") { ... } ... return stream; }=20
getMedia() code
const getMedia =3D = async function(track) { //convert to constraints let screen =3D false; const constraints=3D {}; if (track.source =3D=3D=3D "mic") { ... } else if (track.source =3D=3D=3D "camera") { ... } else if (track.source =3D=3D=3D "screen") { constraints.video =3D {}; if (track.constraints) { constraints.video =3D track.constraints; } constraints.video.width =3D track.width; constraints.video.height =3D track.height; screen =3D true; } ... return stream; }=20
getMedia() code
const getMedia =3D = async function(track) { //convert to constraints let screen =3D false; const constraints=3D {}; if (track.source =3D=3D=3D "mic") { ... } else if (track.source =3D=3D=3D "camera") { ... } else if (track.source =3D=3D=3D "screen") { ... screen =3D true; } //get access to a/v let stream; if (screen) { stream =3D await navigator.mediaDevices.getDisplayMedia(constraints= ); } else { stream =3D await navigator.mediaDevices.getUserMedia(constraints); } return stream; }=20