|
@@ -584,32 +584,45 @@ TraceablePeerConnection.prototype.createAnswer
|
584
|
584
|
this.trace('createAnswer', JSON.stringify(constraints, null, ' '));
|
585
|
585
|
this.peerconnection.createAnswer(
|
586
|
586
|
function (answer) {
|
587
|
|
- self.trace('createAnswerOnSuccess::preTransform', dumpSDP(answer));
|
588
|
|
- // if we're running on FF, transform to Plan A first.
|
589
|
|
- if (RTCBrowserType.usesUnifiedPlan()) {
|
590
|
|
- answer = self.interop.toPlanB(answer);
|
591
|
|
- self.trace('createAnswerOnSuccess::postTransform (Plan B)',
|
592
|
|
- dumpSDP(answer));
|
593
|
|
- }
|
594
|
|
-
|
595
|
|
- if (!self.session.room.options.disableSimulcast
|
596
|
|
- && self.simulcast.isSupported()) {
|
597
|
|
- answer = self.simulcast.mungeLocalDescription(answer);
|
598
|
|
- self.trace('createAnswerOnSuccess::postTransform (simulcast)',
|
599
|
|
- dumpSDP(answer));
|
600
|
|
- }
|
|
587
|
+ try {
|
|
588
|
+ self.trace(
|
|
589
|
+ 'createAnswerOnSuccess::preTransform', dumpSDP(answer));
|
|
590
|
+ // if we're running on FF, transform to Plan A first.
|
|
591
|
+ if (RTCBrowserType.usesUnifiedPlan()) {
|
|
592
|
+ answer = self.interop.toPlanB(answer);
|
|
593
|
+ self.trace('createAnswerOnSuccess::postTransform (Plan B)',
|
|
594
|
+ dumpSDP(answer));
|
|
595
|
+ }
|
601
|
596
|
|
602
|
|
- if (!RTCBrowserType.isFirefox())
|
603
|
|
- {
|
604
|
|
- answer = self.ssrcReplacement(answer);
|
605
|
|
- self.trace('createAnswerOnSuccess::mungeLocalVideoSSRC',
|
606
|
|
- dumpSDP(answer));
|
607
|
|
- }
|
|
597
|
+ if (!self.session.room.options.disableSimulcast
|
|
598
|
+ && self.simulcast.isSupported()) {
|
|
599
|
+ answer = self.simulcast.mungeLocalDescription(answer);
|
|
600
|
+ self.trace(
|
|
601
|
+ 'createAnswerOnSuccess::postTransform (simulcast)',
|
|
602
|
+ dumpSDP(answer));
|
|
603
|
+ }
|
608
|
604
|
|
609
|
|
- self.eventEmitter.emit(XMPPEvents.SENDRECV_STREAMS_CHANGED,
|
610
|
|
- extractSSRCMap(answer));
|
|
605
|
+ if (!RTCBrowserType.isFirefox())
|
|
606
|
+ {
|
|
607
|
+ answer = self.ssrcReplacement(answer);
|
|
608
|
+ self.trace('createAnswerOnSuccess::mungeLocalVideoSSRC',
|
|
609
|
+ dumpSDP(answer));
|
|
610
|
+ }
|
611
|
611
|
|
612
|
|
- successCallback(answer);
|
|
612
|
+ self.eventEmitter.emit(XMPPEvents.SENDRECV_STREAMS_CHANGED,
|
|
613
|
+ extractSSRCMap(answer));
|
|
614
|
+
|
|
615
|
+ successCallback(answer);
|
|
616
|
+ } catch (e) {
|
|
617
|
+ // there can be error modifying the answer, for example
|
|
618
|
+ // for ssrcReplacement there was a track with ssrc that is null
|
|
619
|
+ // and if we do not catch the error no callback is called
|
|
620
|
+ // at all
|
|
621
|
+ self.trace('createAnswerOnError', e);
|
|
622
|
+ self.trace('createAnswerOnError', dumpSDP(answer));
|
|
623
|
+ logger.error('createAnswerOnError', e, dumpSDP(answer));
|
|
624
|
+ failureCallback(e);
|
|
625
|
+ }
|
613
|
626
|
},
|
614
|
627
|
function(err) {
|
615
|
628
|
self.trace('createAnswerOnFailure', err);
|