@@ -441,7 +441,7 @@ module.exports = function (spec, on_status, on_track) {
441
441
// Check Media MID with saved operation
442
442
if ( ! operationMap . has ( mid ) ) {
443
443
log . warn ( `MID ${ mid } in offer has no mapped operations (disabled)` ) ;
444
- remoteSdp . setMediaPort ( mid , 0 ) ;
444
+ remoteSdp . closeMedia ( mid ) ;
445
445
return ;
446
446
}
447
447
if ( operationMap . get ( mid ) . sdpDirection !== remoteSdp . mediaDirection ( mid ) ) {
@@ -452,9 +452,10 @@ module.exports = function (spec, on_status, on_track) {
452
452
log . warn ( `MID ${ mid } in offer has conflict media type with operation` ) ;
453
453
return ;
454
454
}
455
- if ( operationMap . get ( mid ) . enabled && ( remoteSdp . getMediaPort ( mid ) === 0 ) ) {
456
- log . warn ( `MID ${ mid } in offer has conflict port with operation (disabled)` ) ;
455
+ if ( operationMap . get ( mid ) . enabled && remoteSdp . isMediaClosed ( mid ) ) {
456
+ log . warn ( `MID ${ mid } in offer has conflict closed state (disabled)` ) ;
457
457
operationMap . get ( mid ) . enabled = false ;
458
+ return ;
458
459
}
459
460
460
461
// Determine media format in offer
@@ -501,34 +502,28 @@ module.exports = function (spec, on_status, on_track) {
501
502
const addedMids = [ ] ;
502
503
const removedMids = [ ] ;
503
504
504
- for ( let cmid of changedMids ) {
505
+ for ( let cmid of laterSdp . mids ( ) ) {
505
506
const oldMedia = remoteSdp . media ( cmid ) ;
506
507
if ( ! oldMedia ) {
507
508
// Add media
508
509
const tempSdp = laterSdp . singleMediaSdp ( cmid ) ;
509
510
remoteSdp . mergeMedia ( tempSdp ) ;
510
511
addedMids . push ( cmid ) ;
511
- } else if ( laterSdp . getMediaPort ( cmid ) === 0 ) {
512
+ } else if ( laterSdp . isMediaClosed ( cmid ) ) {
512
513
// Remove media
513
- remoteSdp . setMediaPort ( cmid , 0 ) ;
514
- localSdp . setMediaPort ( cmid , 0 ) ;
515
- removedMids . push ( cmid ) ;
516
- } else if ( laterSdp . mediaDirection ( cmid ) === 'inactive' ) {
517
- // Disable media
518
- remoteSdp . media ( cmid ) . direction = 'inactive' ;
519
- localSdp . media ( cmid ) . direction = 'inactive' ;
514
+ remoteSdp . closeMedia ( cmid ) ;
520
515
removedMids . push ( cmid ) ;
521
516
} else {
522
- // May be port or direction change
523
- log . debug ( `MID ${ cmid } port or direction change` ) ;
517
+ // Treat as no change
518
+ log . debug ( `MID ${ cmid } no change` ) ;
524
519
}
525
520
}
526
521
527
522
let opId = null ;
528
523
for ( let mid of addedMids ) {
529
524
processOfferMedia ( mid ) ;
530
525
localSdp . mergeMedia ( remoteSdp . singleMediaSdp ( mid ) . answer ( ) ) ;
531
- if ( remoteSdp . getMediaPort ( mid ) !== 0 ) {
526
+ if ( ! remoteSdp . isMediaClosed ( mid ) ) {
532
527
opId = setupTransport ( mid ) ;
533
528
}
534
529
}
@@ -540,10 +535,11 @@ module.exports = function (spec, on_status, on_track) {
540
535
}
541
536
542
537
for ( let mid of removedMids ) {
543
- // processOfferMedia(mid);
538
+ localSdp . closeMedia ( mid ) ;
539
+ // Should already be destroyed by 'removeTrackOperation'
544
540
// destroyTransport(mid);
545
541
}
546
-
542
+ localSdp . setBundleMids ( remoteSdp . bundleMids ( ) ) ;
547
543
// Produce answer
548
544
const message = localSdp . toString ( ) ;
549
545
log . debug ( 'Answer SDP' , message ) ;
0 commit comments