рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
libs рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
DOMException: 'RTCPeerConnection' рдкрд░ 'setRemoteDescription' рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рд╕рддреНрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ред [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] рд▓рд╛рдЗрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ: v=
http://localhost/sip-0.11.4%20 (1).js:9733:38 . рдкрд░
рдореБрдЭреЗ рдЙрд╕реА рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реБрдИ:
`/**
* рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореАрдбрд┐рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рджреВрд░рд╕реНрде рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рдХрд░реЗрдВ
* @рдкрд░рдо {рд╕реНрдЯреНрд░рд┐рдВрдЧ} рд╕рддреНрд░ рд╡рд┐рд╡рд░рдг рдореАрдбрд┐рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд╕рдЖрдИрдкреА рд╕рдВрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╡рд░рдг
* @рдкрд░рдо {рдСрдмреНрдЬреЗрдХреНрдЯ} [рд╡рд┐рдХрд▓реНрдк] рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ getDescription рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ
* @рдкрд░рдо {MediaStreamConstraints} [options.constraints] MediaStreamConstraints https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints
* @рдкрд░рдо {рдСрдмреНрдЬреЗрдХреНрдЯ} [options.peerConnectionOptions] рдЕрдЧрд░ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдирдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдкреАрдпрд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдЧрд╛
* @рдкрд░рдо {рдРрд░реЗ} [рд╕рдВрд╢реЛрдзрдХ] рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╡рд░рдг рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА
* @returns {рд╡рд╛рджрд╛} рд╡рд╛рджрд╛ рдЬреЛ рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
*/
рд╕реЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди: {рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп: рд╕рддреНрдп, рдорд╛рди: рдлрд╝рдВрдХреНрд╢рди рд╕реЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди (рд╕рддреНрд░ рд╡рд┐рд╡рд░рдг, рд╡рд┐рдХрд▓реНрдк, рд╕рдВрд╢реЛрдзрдХ) {
рд╡рд░ _рдпрд╣ = рдпрд╣;
var self = this;
options = options || {};
if (options.peerConnectionOptions) {
this.initPeerConnection(options.peerConnectionOptions);
}
modifiers = modifiers || [];
if (!Array.isArray(modifiers)) {
modifiers = [modifiers];
}
modifiers = modifiers.concat(this.modifiers);
var description = {
type: this.hasOffer('local') ? 'answer' : 'offer',
sdp: sessionDescription
};
return SIP.Utils.Promise.resolve().then(function () {
// Media should be acquired in getDescription unless we need to do it sooner for some reason (FF61+)
if (this.shouldAcquireMedia && this.options.alwaysAcquireMediaFirst) {
return this.acquire(this.constraints).then(function () {
this.shouldAcquireMedia = false;
}.bind(this));
}
}.bind(this)).then(function () {
return SIP.Utils.reducePromises(modifiers, description);
}).catch(function (e) {
if (e instanceof SIP.Exceptions.SessionDescriptionHandlerError) {
throw e;
}
var error = new SIP.Exceptions.SessionDescriptionHandlerError("setDescription", e, "The modifiers did not resolve successfully");
_this.logger.error(error.message);
self.emit('peerConnection-setRemoteDescriptionFailed', error);
throw error;
}).then(function (modifiedDescription) {
self.emit('setDescription', modifiedDescription);
return self.peerConnection.setRemoteDescription(modifiedDescription);
}).catch(function (e) {
if (e instanceof SIP.Exceptions.SessionDescriptionHandlerError) {
throw e;
}
// Check the original SDP for video, and ensure that we have want to do audio fallback
if (/^m=video.+$/gm.test(sessionDescription) && !options.disableAudioFallback) {
// Do not try to audio fallback again
options.disableAudioFallback = true;
// Remove video first, then do the other modifiers
return _this.setDescription(sessionDescription, options, [SIP.Web.Modifiers.stripVideo].concat(modifiers));
}
var error = new SIP.Exceptions.SessionDescriptionHandlerError("setDescription", e);
_this.logger.error(error.error);
_this.emit('peerConnection-setRemoteDescriptionFailed', error);
throw error;
}).then(function setRemoteDescriptionSuccess() {
if (self.peerConnection.getReceivers) {
self.emit('setRemoteDescription', self.peerConnection.getReceivers());
} else {
self.emit('setRemoteDescription', self.peerConnection.getRemoteStreams());
}
self.emit('confirmed', self);
});
} },`
рдирд┐рд░реАрдХреНрд╖рдг рдЬреЗ рдПрд╕ рдХреЛрдб рдиреЗ рдореБрдЭреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ "modifiedDescription.sdp" sdp рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддрди рд╡рд╕реНрддреБ рд╣реИ
рдХреГрдкрдпрд╛ рдПрдХ рд╕рд╛рд░ рдореЗрдВ рдкреВрд░реНрдг рд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред рдХреНрдпрд╛ рдЖрдк рд╕реНрд╡рдпрдВ SDP рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рддрд╛рд░рдХ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рд╕реЗ рд▓реЙрдЧ? рдФрд░ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╕рдЪ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ?
рдореИрдВрдиреЗ 0.11.4 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рд┐рдк.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореИрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдПрд╕рдбреАрдкреА рдирд╣реАрдВ рд╣реВрдБред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓
[рдЬрд┐рд╕реНрдЯ] (https://gist.github.com/kakabara/d39058805af90637a62931893900fb55) рд▓реЗрдХрд┐рди рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА "рдПрд╕рдбреАрдкреА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рд▓рд╛рдЗрди 1 рдкрд░ рдПрд╕рдбреАрдкреА рдкрд╛рд░реНрд╕ рддреНрд░реБрдЯрд┐: рдмрдлрд░ рдХреЗ рдЕрдВрдд рд╕реЗ рдкрд░реЗ рд▓рд╛рдЗрди рдХрд╛ рдЕрдВрддред" рдЗрд╕реЗ 326 рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рджреЗрдЦреЗрдВред
Google рдХреНрд░реЛрдо рдореЗрдВ рдЕрд╕рдлрд▓ рдкрд╛рд░реНрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рд░рд┐рдореЛрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди
рддрд╛рд░рд╛рдВрдХрди ICE рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рд╕рд╛рд░ рдореЗрдВ рдореБрджреНрджрд╛ рд╡рд╣реА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛ред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реЗ рдЧрд▓рдд рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╣рд▓реЗ рд╣реИред рдореИрдВ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛, рдХреЙрд▓рд░ рдмрд░реНрдл рдЙрдореНрдореАрджрд╡рд╛рд░ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рд░рд╛рдВрдХрди рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ?
рдорд╛рдлрд╝ рдХрд░рдирд╛ред рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ред WebRTC рдХреЛ ICE рдФрд░ DTLS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рддрд╛рд░рдХреАрдп рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рдЕрдкрдиреЗ рдореБрджреНрджреЛрдВ рдкрд░ рддрд╛рд░рд╛рдВрдХрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред