mediasoup-client 3.6.52 → 3.6.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vimrc +21 -0
- package/NO_GIT/Notes.txt +18 -0
- package/lib/Consumer.d.ts +16 -18
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +11 -17
- package/lib/DataConsumer.d.ts +13 -15
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +0 -13
- package/lib/DataProducer.d.ts +13 -15
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +0 -13
- package/lib/Device.d.ts +4 -6
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +1 -10
- package/lib/EnhancedEventEmitter.d.ts +19 -3
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/EnhancedEventEmitter.js +50 -14
- package/lib/Producer.d.ts +37 -22
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +18 -28
- package/lib/Transport.d.ts +43 -18
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +87 -41
- package/lib/handlers/Chrome55.d.ts +3 -1
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +20 -12
- package/lib/handlers/Chrome67.d.ts +3 -1
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +20 -12
- package/lib/handlers/Chrome70.d.ts +3 -1
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +23 -13
- package/lib/handlers/Chrome74.d.ts +3 -1
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +43 -13
- package/lib/handlers/Edge11.d.ts +3 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +26 -18
- package/lib/handlers/FakeHandler.d.ts +5 -3
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +14 -8
- package/lib/handlers/Firefox60.d.ts +3 -1
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +45 -13
- package/lib/handlers/HandlerInterface.d.ts +15 -11
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/HandlerInterface.js +0 -8
- package/lib/handlers/ReactNative.d.ts +3 -1
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +20 -12
- package/lib/handlers/Safari11.d.ts +3 -1
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +20 -12
- package/lib/handlers/Safari12.d.ts +3 -1
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +45 -13
- package/lib/handlers/ortc/edgeUtils.js +1 -5
- package/lib/handlers/sdp/MediaSection.js +1 -5
- package/lib/handlers/sdp/RemoteSdp.js +1 -5
- package/lib/handlers/sdp/commonUtils.js +1 -5
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -6
- package/lib/ortc.js +1 -5
- package/lib/types.js +1 -5
- package/lib/utils.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/Consumer.ts +44 -20
- package/src/DataConsumer.ts +19 -16
- package/src/DataProducer.ts +19 -16
- package/src/Device.ts +6 -6
- package/src/EnhancedEventEmitter.ts +105 -22
- package/src/Producer.ts +97 -31
- package/src/Transport.ts +185 -58
- package/src/handlers/Chrome55.ts +31 -8
- package/src/handlers/Chrome67.ts +31 -8
- package/src/handlers/Chrome70.ts +34 -8
- package/src/handlers/Chrome74.ts +82 -8
- package/src/handlers/Edge11.ts +38 -15
- package/src/handlers/FakeHandler.ts +22 -6
- package/src/handlers/Firefox60.ts +84 -8
- package/src/handlers/HandlerInterface.ts +19 -11
- package/src/handlers/ReactNative.ts +31 -8
- package/src/handlers/Safari11.ts +31 -8
- package/src/handlers/Safari12.ts +84 -8
- package/src/utils.ts +0 -1
package/src/Transport.ts
CHANGED
|
@@ -9,7 +9,10 @@ import { Producer, ProducerOptions } from './Producer';
|
|
|
9
9
|
import { Consumer, ConsumerOptions } from './Consumer';
|
|
10
10
|
import { DataProducer, DataProducerOptions } from './DataProducer';
|
|
11
11
|
import { DataConsumer, DataConsumerOptions } from './DataConsumer';
|
|
12
|
-
import {
|
|
12
|
+
import { RtpParameters, MediaKind } from './RtpParameters';
|
|
13
|
+
import { SctpParameters, SctpStreamParameters } from './SctpParameters';
|
|
14
|
+
|
|
15
|
+
const logger = new Logger('Transport');
|
|
13
16
|
|
|
14
17
|
interface InternalTransportOptions extends TransportOptions
|
|
15
18
|
{
|
|
@@ -29,7 +32,7 @@ class ConsumerCreationTask
|
|
|
29
32
|
constructor(consumerOptions: ConsumerOptions)
|
|
30
33
|
{
|
|
31
34
|
this.consumerOptions = consumerOptions;
|
|
32
|
-
this.promise = new Promise((resolve, reject) =>
|
|
35
|
+
this.promise = new Promise<Consumer>((resolve, reject) =>
|
|
33
36
|
{
|
|
34
37
|
this.resolve = resolve;
|
|
35
38
|
this.reject = reject;
|
|
@@ -148,9 +151,43 @@ export type PlainRtpParameters =
|
|
|
148
151
|
port: number;
|
|
149
152
|
};
|
|
150
153
|
|
|
151
|
-
|
|
154
|
+
export type TransportEvents =
|
|
155
|
+
{
|
|
156
|
+
connect: [{ dtlsParameters: DtlsParameters }, () => void, (error: Error) => void];
|
|
157
|
+
connectionstatechange: [ConnectionState];
|
|
158
|
+
produce:
|
|
159
|
+
[
|
|
160
|
+
{
|
|
161
|
+
kind: MediaKind;
|
|
162
|
+
rtpParameters: RtpParameters;
|
|
163
|
+
appData: Record<string, unknown>;
|
|
164
|
+
},
|
|
165
|
+
({ id }: { id: string }) => void,
|
|
166
|
+
(error: Error) => void
|
|
167
|
+
];
|
|
168
|
+
producedata:
|
|
169
|
+
[
|
|
170
|
+
{
|
|
171
|
+
sctpStreamParameters: SctpStreamParameters;
|
|
172
|
+
label?: string;
|
|
173
|
+
protocol?: string;
|
|
174
|
+
appData: Record<string, unknown>;
|
|
175
|
+
},
|
|
176
|
+
({ id }: { id: string }) => void,
|
|
177
|
+
(error: Error) => void
|
|
178
|
+
];
|
|
179
|
+
};
|
|
152
180
|
|
|
153
|
-
export
|
|
181
|
+
export type TransportObserverEvents =
|
|
182
|
+
{
|
|
183
|
+
close: [];
|
|
184
|
+
newproducer: [Producer];
|
|
185
|
+
newconsumer: [Consumer];
|
|
186
|
+
newdataproducer: [DataProducer];
|
|
187
|
+
newdataconsumer: [DataConsumer];
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
export class Transport extends EnhancedEventEmitter<TransportEvents>
|
|
154
191
|
{
|
|
155
192
|
// Id.
|
|
156
193
|
private readonly _id: string;
|
|
@@ -195,15 +232,13 @@ export class Transport extends EnhancedEventEmitter
|
|
|
195
232
|
private _pendingResumeConsumers: Map<string, Consumer> = new Map();
|
|
196
233
|
// Consumer resume in progress flag.
|
|
197
234
|
private _consumerResumeInProgress = false;
|
|
235
|
+
// Consumers pending to be closed.
|
|
236
|
+
private _pendingCloseConsumers: Map<string, Consumer> = new Map();
|
|
237
|
+
// Consumer close in progress flag.
|
|
238
|
+
private _consumerCloseInProgress = false;
|
|
198
239
|
// Observer instance.
|
|
199
|
-
protected readonly _observer = new EnhancedEventEmitter();
|
|
240
|
+
protected readonly _observer = new EnhancedEventEmitter<TransportObserverEvents>();
|
|
200
241
|
|
|
201
|
-
/**
|
|
202
|
-
* @emits connect - (transportLocalParameters: any, callback: Function, errback: Function)
|
|
203
|
-
* @emits connectionstatechange - (connectionState: ConnectionState)
|
|
204
|
-
* @emits produce - (producerLocalParameters: any, callback: Function, errback: Function)
|
|
205
|
-
* @emits producedata - (dataProducerLocalParameters: any, callback: Function, errback: Function)
|
|
206
|
-
*/
|
|
207
242
|
constructor(
|
|
208
243
|
{
|
|
209
244
|
direction,
|
|
@@ -321,15 +356,6 @@ export class Transport extends EnhancedEventEmitter
|
|
|
321
356
|
throw new Error('cannot override appData object');
|
|
322
357
|
}
|
|
323
358
|
|
|
324
|
-
/**
|
|
325
|
-
* Observer.
|
|
326
|
-
*
|
|
327
|
-
* @emits close
|
|
328
|
-
* @emits newproducer - (producer: Producer)
|
|
329
|
-
* @emits newconsumer - (producer: Producer)
|
|
330
|
-
* @emits newdataproducer - (dataProducer: DataProducer)
|
|
331
|
-
* @emits newdataconsumer - (dataProducer: DataProducer)
|
|
332
|
-
*/
|
|
333
359
|
get observer(): EnhancedEventEmitter
|
|
334
360
|
{
|
|
335
361
|
return this._observer;
|
|
@@ -530,13 +556,19 @@ export class Transport extends EnhancedEventEmitter
|
|
|
530
556
|
// This will fill rtpParameters's missing fields with default values.
|
|
531
557
|
ortc.validateRtpParameters(rtpParameters);
|
|
532
558
|
|
|
533
|
-
const { id } = await
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
559
|
+
const { id } = await new Promise<{ id: string }>((resolve, reject) =>
|
|
560
|
+
{
|
|
561
|
+
this.safeEmit(
|
|
562
|
+
'produce',
|
|
563
|
+
{
|
|
564
|
+
kind : track.kind as MediaKind,
|
|
565
|
+
rtpParameters,
|
|
566
|
+
appData
|
|
567
|
+
},
|
|
568
|
+
resolve,
|
|
569
|
+
reject
|
|
570
|
+
);
|
|
571
|
+
});
|
|
540
572
|
|
|
541
573
|
const producer = new Producer(
|
|
542
574
|
{
|
|
@@ -692,14 +724,20 @@ export class Transport extends EnhancedEventEmitter
|
|
|
692
724
|
// This will fill sctpStreamParameters's missing fields with default values.
|
|
693
725
|
ortc.validateSctpStreamParameters(sctpStreamParameters);
|
|
694
726
|
|
|
695
|
-
const { id } = await
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
727
|
+
const { id } = await new Promise<{ id: string }>((resolve, reject) =>
|
|
728
|
+
{
|
|
729
|
+
this.safeEmit(
|
|
730
|
+
'producedata',
|
|
731
|
+
{
|
|
732
|
+
sctpStreamParameters,
|
|
733
|
+
label,
|
|
734
|
+
protocol,
|
|
735
|
+
appData
|
|
736
|
+
},
|
|
737
|
+
resolve,
|
|
738
|
+
reject
|
|
739
|
+
);
|
|
740
|
+
});
|
|
703
741
|
|
|
704
742
|
const dataProducer =
|
|
705
743
|
new DataProducer({ id, dataChannel, sctpStreamParameters, appData });
|
|
@@ -787,10 +825,17 @@ export class Transport extends EnhancedEventEmitter
|
|
|
787
825
|
// This method is guaranteed to never throw.
|
|
788
826
|
async _createPendingConsumers(): Promise<void>
|
|
789
827
|
{
|
|
828
|
+
this._consumerCreationInProgress = true;
|
|
829
|
+
|
|
790
830
|
this._awaitQueue.push(
|
|
791
831
|
async () =>
|
|
792
832
|
{
|
|
793
|
-
this.
|
|
833
|
+
if (this._pendingConsumerTasks.length === 0)
|
|
834
|
+
{
|
|
835
|
+
logger.debug('_createPendingConsumers() | there is no Consumer to be created');
|
|
836
|
+
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
794
839
|
|
|
795
840
|
const pendingConsumerTasks = [ ...this._pendingConsumerTasks ];
|
|
796
841
|
|
|
@@ -885,12 +930,12 @@ export class Transport extends EnhancedEventEmitter
|
|
|
885
930
|
error);
|
|
886
931
|
}
|
|
887
932
|
}
|
|
888
|
-
|
|
889
|
-
this._consumerCreationInProgress = false;
|
|
890
933
|
},
|
|
891
934
|
'transport._createPendingConsumers()')
|
|
892
935
|
.then(() =>
|
|
893
936
|
{
|
|
937
|
+
this._consumerCreationInProgress = false;
|
|
938
|
+
|
|
894
939
|
// There are pending Consumer tasks, enqueue their creation.
|
|
895
940
|
if (this._pendingConsumerTasks.length > 0)
|
|
896
941
|
{
|
|
@@ -903,10 +948,17 @@ export class Transport extends EnhancedEventEmitter
|
|
|
903
948
|
|
|
904
949
|
_pausePendingConsumers()
|
|
905
950
|
{
|
|
951
|
+
this._consumerPauseInProgress = true;
|
|
952
|
+
|
|
906
953
|
this._awaitQueue.push(
|
|
907
954
|
async () =>
|
|
908
955
|
{
|
|
909
|
-
this.
|
|
956
|
+
if (this._pendingPauseConsumers.size === 0)
|
|
957
|
+
{
|
|
958
|
+
logger.debug('_pausePendingConsumers() | there is no Consumer to be paused');
|
|
959
|
+
|
|
960
|
+
return;
|
|
961
|
+
}
|
|
910
962
|
|
|
911
963
|
const pendingPauseConsumers = Array.from(this._pendingPauseConsumers.values());
|
|
912
964
|
|
|
@@ -915,20 +967,21 @@ export class Transport extends EnhancedEventEmitter
|
|
|
915
967
|
|
|
916
968
|
try
|
|
917
969
|
{
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
970
|
+
const localIds = pendingPauseConsumers
|
|
971
|
+
.map((consumer) => consumer.localId);
|
|
972
|
+
|
|
973
|
+
await this._handler.pauseReceiving(localIds);
|
|
921
974
|
}
|
|
922
975
|
catch (error)
|
|
923
976
|
{
|
|
924
977
|
logger.error('_pausePendingConsumers() | failed to pause Consumers:', error);
|
|
925
978
|
}
|
|
926
|
-
|
|
927
|
-
this._consumerPauseInProgress = false;
|
|
928
979
|
},
|
|
929
|
-
'
|
|
980
|
+
'transport._pausePendingConsumers')
|
|
930
981
|
.then(() =>
|
|
931
982
|
{
|
|
983
|
+
this._consumerPauseInProgress = false;
|
|
984
|
+
|
|
932
985
|
// There are pending Consumers to be paused, do it.
|
|
933
986
|
if (this._pendingPauseConsumers.size > 0)
|
|
934
987
|
{
|
|
@@ -941,10 +994,17 @@ export class Transport extends EnhancedEventEmitter
|
|
|
941
994
|
|
|
942
995
|
_resumePendingConsumers()
|
|
943
996
|
{
|
|
997
|
+
this._consumerResumeInProgress = true;
|
|
998
|
+
|
|
944
999
|
this._awaitQueue.push(
|
|
945
1000
|
async () =>
|
|
946
1001
|
{
|
|
947
|
-
this.
|
|
1002
|
+
if (this._pendingResumeConsumers.size === 0)
|
|
1003
|
+
{
|
|
1004
|
+
logger.debug('_resumePendingConsumers() | there is no Consumer to be resumed');
|
|
1005
|
+
|
|
1006
|
+
return;
|
|
1007
|
+
}
|
|
948
1008
|
|
|
949
1009
|
const pendingResumeConsumers = Array.from(this._pendingResumeConsumers.values());
|
|
950
1010
|
|
|
@@ -953,16 +1013,17 @@ export class Transport extends EnhancedEventEmitter
|
|
|
953
1013
|
|
|
954
1014
|
try
|
|
955
1015
|
{
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1016
|
+
const localIds = pendingResumeConsumers
|
|
1017
|
+
.map((consumer) => consumer.localId);
|
|
1018
|
+
|
|
1019
|
+
await this._handler.resumeReceiving(localIds);
|
|
959
1020
|
}
|
|
960
1021
|
catch (error)
|
|
961
1022
|
{
|
|
962
1023
|
logger.error('_resumePendingConsumers() | failed to resume Consumers:', error);
|
|
963
1024
|
}
|
|
964
1025
|
},
|
|
965
|
-
'
|
|
1026
|
+
'transport._resumePendingConsumers')
|
|
966
1027
|
.then(() =>
|
|
967
1028
|
{
|
|
968
1029
|
this._consumerResumeInProgress = false;
|
|
@@ -977,14 +1038,58 @@ export class Transport extends EnhancedEventEmitter
|
|
|
977
1038
|
.catch(() => { });
|
|
978
1039
|
}
|
|
979
1040
|
|
|
1041
|
+
_closePendingConsumers()
|
|
1042
|
+
{
|
|
1043
|
+
this._consumerCloseInProgress = true;
|
|
1044
|
+
|
|
1045
|
+
this._awaitQueue.push(
|
|
1046
|
+
async () =>
|
|
1047
|
+
{
|
|
1048
|
+
if (this._pendingCloseConsumers.size === 0)
|
|
1049
|
+
{
|
|
1050
|
+
logger.debug('_closePendingConsumers() | there is no Consumer to be closed');
|
|
1051
|
+
|
|
1052
|
+
return;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
const pendingCloseConsumers = Array.from(this._pendingCloseConsumers.values());
|
|
1056
|
+
|
|
1057
|
+
// Clear pending close Consumer map.
|
|
1058
|
+
this._pendingCloseConsumers.clear();
|
|
1059
|
+
|
|
1060
|
+
try
|
|
1061
|
+
{
|
|
1062
|
+
await this._handler.stopReceiving(
|
|
1063
|
+
pendingCloseConsumers.map((consumer) => consumer.localId)
|
|
1064
|
+
);
|
|
1065
|
+
}
|
|
1066
|
+
catch (error)
|
|
1067
|
+
{
|
|
1068
|
+
logger.error('_closePendingConsumers() | failed to close Consumers:', error);
|
|
1069
|
+
}
|
|
1070
|
+
},
|
|
1071
|
+
'transport._closePendingConsumers')
|
|
1072
|
+
.then(() =>
|
|
1073
|
+
{
|
|
1074
|
+
this._consumerCloseInProgress = false;
|
|
1075
|
+
|
|
1076
|
+
// There are pending Consumer to be resumed, do it.
|
|
1077
|
+
if (this._pendingCloseConsumers.size > 0)
|
|
1078
|
+
{
|
|
1079
|
+
this._closePendingConsumers();
|
|
1080
|
+
}
|
|
1081
|
+
})
|
|
1082
|
+
// NOTE: We only get here when the await queue is closed.
|
|
1083
|
+
.catch(() => { });
|
|
1084
|
+
}
|
|
980
1085
|
_handleHandler(): void
|
|
981
1086
|
{
|
|
982
1087
|
const handler = this._handler;
|
|
983
1088
|
|
|
984
1089
|
handler.on('@connect', (
|
|
985
1090
|
{ dtlsParameters }: { dtlsParameters: DtlsParameters },
|
|
986
|
-
callback:
|
|
987
|
-
errback:
|
|
1091
|
+
callback: () => void,
|
|
1092
|
+
errback: (error: Error) => void
|
|
988
1093
|
) =>
|
|
989
1094
|
{
|
|
990
1095
|
if (this._closed)
|
|
@@ -1026,6 +1131,24 @@ export class Transport extends EnhancedEventEmitter
|
|
|
1026
1131
|
.catch((error: Error) => logger.warn('producer.close() failed:%o', error));
|
|
1027
1132
|
});
|
|
1028
1133
|
|
|
1134
|
+
producer.on('@pause', (callback, errback) =>
|
|
1135
|
+
{
|
|
1136
|
+
this._awaitQueue.push(
|
|
1137
|
+
async () => this._handler.pauseSending(producer.localId),
|
|
1138
|
+
'producer @pause event')
|
|
1139
|
+
.then(callback)
|
|
1140
|
+
.catch(errback);
|
|
1141
|
+
});
|
|
1142
|
+
|
|
1143
|
+
producer.on('@resume', (callback, errback) =>
|
|
1144
|
+
{
|
|
1145
|
+
this._awaitQueue.push(
|
|
1146
|
+
async () => this._handler.resumeSending(producer.localId),
|
|
1147
|
+
'producer @resume event')
|
|
1148
|
+
.then(callback)
|
|
1149
|
+
.catch(errback);
|
|
1150
|
+
});
|
|
1151
|
+
|
|
1029
1152
|
producer.on('@replacetrack', (track, callback, errback) =>
|
|
1030
1153
|
{
|
|
1031
1154
|
this._awaitQueue.push(
|
|
@@ -1058,7 +1181,7 @@ export class Transport extends EnhancedEventEmitter
|
|
|
1058
1181
|
producer.on('@getstats', (callback, errback) =>
|
|
1059
1182
|
{
|
|
1060
1183
|
if (this._closed)
|
|
1061
|
-
return errback(new InvalidStateError('closed'));
|
|
1184
|
+
return errback!(new InvalidStateError('closed'));
|
|
1062
1185
|
|
|
1063
1186
|
this._handler.getSenderStats(producer.localId)
|
|
1064
1187
|
.then(callback)
|
|
@@ -1077,10 +1200,14 @@ export class Transport extends EnhancedEventEmitter
|
|
|
1077
1200
|
if (this._closed)
|
|
1078
1201
|
return;
|
|
1079
1202
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1203
|
+
// Store the Consumer into the close list.
|
|
1204
|
+
this._pendingCloseConsumers.set(consumer.id, consumer);
|
|
1205
|
+
|
|
1206
|
+
// There is no Consumer close in progress, do it now.
|
|
1207
|
+
if (this._consumerCloseInProgress === false)
|
|
1208
|
+
{
|
|
1209
|
+
this._closePendingConsumers();
|
|
1210
|
+
}
|
|
1084
1211
|
});
|
|
1085
1212
|
|
|
1086
1213
|
consumer.on('@pause', () =>
|
|
@@ -1122,7 +1249,7 @@ export class Transport extends EnhancedEventEmitter
|
|
|
1122
1249
|
consumer.on('@getstats', (callback, errback) =>
|
|
1123
1250
|
{
|
|
1124
1251
|
if (this._closed)
|
|
1125
|
-
return errback(new InvalidStateError('closed'));
|
|
1252
|
+
return errback!(new InvalidStateError('closed'));
|
|
1126
1253
|
|
|
1127
1254
|
this._handler.getReceiverStats(consumer.localId)
|
|
1128
1255
|
.then(callback)
|
package/src/handlers/Chrome55.ts
CHANGED
|
@@ -474,6 +474,18 @@ export class Chrome55 extends HandlerInterface
|
|
|
474
474
|
await this._pc.setRemoteDescription(answer);
|
|
475
475
|
}
|
|
476
476
|
|
|
477
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
478
|
+
async pauseSending(localId: string): Promise<void>
|
|
479
|
+
{
|
|
480
|
+
// Unimplemented.
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
484
|
+
async resumeSending(localId: string): Promise<void>
|
|
485
|
+
{
|
|
486
|
+
// Unimplemented.
|
|
487
|
+
}
|
|
488
|
+
|
|
477
489
|
async replaceTrack(
|
|
478
490
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
479
491
|
localId: string, track: MediaStreamTrack | null
|
|
@@ -672,19 +684,22 @@ export class Chrome55 extends HandlerInterface
|
|
|
672
684
|
return results;
|
|
673
685
|
}
|
|
674
686
|
|
|
675
|
-
async stopReceiving(
|
|
687
|
+
async stopReceiving(localIds: string[]): Promise<void>
|
|
676
688
|
{
|
|
677
689
|
this._assertRecvDirection();
|
|
678
690
|
|
|
679
|
-
|
|
691
|
+
for (const localId of localIds)
|
|
692
|
+
{
|
|
693
|
+
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
680
694
|
|
|
681
|
-
|
|
695
|
+
const { mid, rtpParameters } = this._mapRecvLocalIdInfo.get(localId) || {};
|
|
682
696
|
|
|
683
|
-
|
|
684
|
-
|
|
697
|
+
// Remove from the map.
|
|
698
|
+
this._mapRecvLocalIdInfo.delete(localId);
|
|
685
699
|
|
|
686
|
-
|
|
687
|
-
|
|
700
|
+
this._remoteSdp!.planBStopReceiving(
|
|
701
|
+
{ mid: mid!, offerRtpParameters: rtpParameters! });
|
|
702
|
+
}
|
|
688
703
|
|
|
689
704
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
690
705
|
|
|
@@ -816,7 +831,15 @@ export class Chrome55 extends HandlerInterface
|
|
|
816
831
|
localDtlsRole === 'client' ? 'server' : 'client');
|
|
817
832
|
|
|
818
833
|
// Need to tell the remote transport about our parameters.
|
|
819
|
-
await
|
|
834
|
+
await new Promise<void>((resolve, reject) =>
|
|
835
|
+
{
|
|
836
|
+
this.safeEmit(
|
|
837
|
+
'@connect',
|
|
838
|
+
{ dtlsParameters },
|
|
839
|
+
resolve,
|
|
840
|
+
reject
|
|
841
|
+
);
|
|
842
|
+
});
|
|
820
843
|
|
|
821
844
|
this._transportReady = true;
|
|
822
845
|
}
|
package/src/handlers/Chrome67.ts
CHANGED
|
@@ -482,6 +482,18 @@ export class Chrome67 extends HandlerInterface
|
|
|
482
482
|
await this._pc.setRemoteDescription(answer);
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
486
|
+
async pauseSending(localId: string): Promise<void>
|
|
487
|
+
{
|
|
488
|
+
// Unimplemented.
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
492
|
+
async resumeSending(localId: string): Promise<void>
|
|
493
|
+
{
|
|
494
|
+
// Unimplemented.
|
|
495
|
+
}
|
|
496
|
+
|
|
485
497
|
async replaceTrack(
|
|
486
498
|
localId: string, track: MediaStreamTrack | null
|
|
487
499
|
): Promise<void>
|
|
@@ -751,19 +763,22 @@ export class Chrome67 extends HandlerInterface
|
|
|
751
763
|
return results;
|
|
752
764
|
}
|
|
753
765
|
|
|
754
|
-
async stopReceiving(
|
|
766
|
+
async stopReceiving(localIds: string[]): Promise<void>
|
|
755
767
|
{
|
|
756
768
|
this._assertRecvDirection();
|
|
757
769
|
|
|
758
|
-
|
|
770
|
+
for (const localId of localIds)
|
|
771
|
+
{
|
|
772
|
+
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
759
773
|
|
|
760
|
-
|
|
774
|
+
const { mid, rtpParameters } = this._mapRecvLocalIdInfo.get(localId) || {};
|
|
761
775
|
|
|
762
|
-
|
|
763
|
-
|
|
776
|
+
// Remove from the map.
|
|
777
|
+
this._mapRecvLocalIdInfo.delete(localId);
|
|
764
778
|
|
|
765
|
-
|
|
766
|
-
|
|
779
|
+
this._remoteSdp!.planBStopReceiving(
|
|
780
|
+
{ mid: mid!, offerRtpParameters: rtpParameters! });
|
|
781
|
+
}
|
|
767
782
|
|
|
768
783
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
769
784
|
|
|
@@ -901,7 +916,15 @@ export class Chrome67 extends HandlerInterface
|
|
|
901
916
|
localDtlsRole === 'client' ? 'server' : 'client');
|
|
902
917
|
|
|
903
918
|
// Need to tell the remote transport about our parameters.
|
|
904
|
-
await
|
|
919
|
+
await new Promise<void>((resolve, reject) =>
|
|
920
|
+
{
|
|
921
|
+
this.safeEmit(
|
|
922
|
+
'@connect',
|
|
923
|
+
{ dtlsParameters },
|
|
924
|
+
resolve,
|
|
925
|
+
reject
|
|
926
|
+
);
|
|
927
|
+
});
|
|
905
928
|
|
|
906
929
|
this._transportReady = true;
|
|
907
930
|
}
|
package/src/handlers/Chrome70.ts
CHANGED
|
@@ -498,6 +498,18 @@ export class Chrome70 extends HandlerInterface
|
|
|
498
498
|
this._mapMidTransceiver.delete(localId);
|
|
499
499
|
}
|
|
500
500
|
|
|
501
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
502
|
+
async pauseSending(localId: string): Promise<void>
|
|
503
|
+
{
|
|
504
|
+
// Unimplemented.
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
508
|
+
async resumeSending(localId: string): Promise<void>
|
|
509
|
+
{
|
|
510
|
+
// Unimplemented.
|
|
511
|
+
}
|
|
512
|
+
|
|
501
513
|
async replaceTrack(
|
|
502
514
|
localId: string, track: MediaStreamTrack | null
|
|
503
515
|
): Promise<void>
|
|
@@ -758,18 +770,21 @@ export class Chrome70 extends HandlerInterface
|
|
|
758
770
|
return results;
|
|
759
771
|
}
|
|
760
772
|
|
|
761
|
-
async stopReceiving(
|
|
773
|
+
async stopReceiving(localIds: string[]): Promise<void>
|
|
762
774
|
{
|
|
763
775
|
this._assertRecvDirection();
|
|
764
776
|
|
|
765
|
-
|
|
777
|
+
for (const localId of localIds)
|
|
778
|
+
{
|
|
779
|
+
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
766
780
|
|
|
767
|
-
|
|
781
|
+
const transceiver = this._mapMidTransceiver.get(localId);
|
|
768
782
|
|
|
769
|
-
|
|
770
|
-
|
|
783
|
+
if (!transceiver)
|
|
784
|
+
throw new Error('associated RTCRtpTransceiver not found');
|
|
771
785
|
|
|
772
|
-
|
|
786
|
+
this._remoteSdp!.closeMediaSection(transceiver.mid!);
|
|
787
|
+
}
|
|
773
788
|
|
|
774
789
|
const offer = { type: 'offer', sdp: this._remoteSdp!.getSdp() };
|
|
775
790
|
|
|
@@ -787,7 +802,10 @@ export class Chrome70 extends HandlerInterface
|
|
|
787
802
|
|
|
788
803
|
await this._pc.setLocalDescription(answer);
|
|
789
804
|
|
|
790
|
-
|
|
805
|
+
for (const localId of localIds)
|
|
806
|
+
{
|
|
807
|
+
this._mapMidTransceiver.delete(localId);
|
|
808
|
+
}
|
|
791
809
|
}
|
|
792
810
|
|
|
793
811
|
async pauseReceiving(
|
|
@@ -909,7 +927,15 @@ export class Chrome70 extends HandlerInterface
|
|
|
909
927
|
localDtlsRole === 'client' ? 'server' : 'client');
|
|
910
928
|
|
|
911
929
|
// Need to tell the remote transport about our parameters.
|
|
912
|
-
await
|
|
930
|
+
await new Promise<void>((resolve, reject) =>
|
|
931
|
+
{
|
|
932
|
+
this.safeEmit(
|
|
933
|
+
'@connect',
|
|
934
|
+
{ dtlsParameters },
|
|
935
|
+
resolve,
|
|
936
|
+
reject
|
|
937
|
+
);
|
|
938
|
+
});
|
|
913
939
|
|
|
914
940
|
this._transportReady = true;
|
|
915
941
|
}
|