Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π³Π΄Π΅:
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ, Π΄Π»Ρ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°:
var call = peer.call(presenterPeerID, null);
call.on('stream', function(theirWebcamStream) {
showWebcamStream(theirWebcamStream);
});
ΠΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ peer.call(presenterPeerID, null)
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ undefined
.
ΠΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡΡ Π±Π΅Π· ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ MediaStream?
ΠΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ΡΡ Π½Π° ΡΡΠΎΡ Π²ΡΠΏΡΡΠΊ
ΠΡ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ² ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΊ Π·ΡΠΈΡΠ΅Π»Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠ°ΠΌ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΠΈ ΠΎΡΠ²Π΅ΡΠ°Ρ Π½Π° Π²ΡΠ·ΠΎΠ² Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅Π΄ΠΈΠ°ΠΏΠΎΡΠΎΠΊΠ°?
Π― ΡΠΎΠΆΠ΅ Π½Π°Π΄Π΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. Π‘ΠΌΠΎΡΡΠΈΡΠ΅ Π²ΡΠΏΡΡΠΊ β158
+1
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΡΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π»ΡΠ±ΡΠΌ ΡΡΠ΅ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Ρ ΠΎΠ±ΠΎΠΈΠΌΠΈ:
export const createEmptyAudioTrack = () => {
const ctx = new AudioContext();
const oscillator = ctx.createOscillator();
const dst = oscillator.connect(ctx.createMediaStreamDestination());
oscillator.start();
const track = dst.stream.getAudioTracks()[0];
return Object.assign(track, { enabled: false });
};
export const createEmptyVideoTrack = ({ width, height }) => {
const canvas = Object.assign(document.createElement('canvas'), { width, height });
canvas.getContext('2d').fillRect(0, 0, width, height);
const stream = canvas.captureStream();
const track = stream.getVideoTracks()[0];
return Object.assign(track, { enabled: false });
};
...
const audioTrack = createEmptyAudioTrack();
const videoTrack = createEmptyVideoTrack({ width:640, height:480 });
const mediaStream = new MediaStream([audioTrack, videoTrack]);
peer.call('id', mediaStream);
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΡΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Ρ Π»ΡΠ±ΡΠΌ ΡΡΠ΅ΠΊΠΎΠΌ ΠΈΠ»ΠΈ Ρ ΠΎΠ±ΠΎΠΈΠΌΠΈ: