mediasoup-client 3.6.59 → 3.6.60
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/README.md +17 -3
- package/lib/Consumer.d.ts +3 -3
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/DataConsumer.d.ts +3 -3
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataProducer.d.ts +3 -3
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/Device.d.ts +3 -3
- package/lib/Device.d.ts.map +1 -1
- package/lib/EnhancedEventEmitter.d.ts +1 -1
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/Producer.d.ts +4 -4
- package/lib/Producer.d.ts.map +1 -1
- package/lib/RtpParameters.d.ts +11 -11
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/SctpParameters.d.ts +4 -4
- package/lib/SctpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +11 -11
- package/lib/Transport.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +6 -6
- package/lib/handlers/Chrome67.js +6 -6
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +10 -7
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +10 -7
- package/lib/handlers/Edge11.js +6 -6
- package/lib/handlers/FakeHandler.d.ts +1 -1
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +6 -6
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +10 -7
- package/lib/handlers/HandlerInterface.d.ts +11 -11
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +6 -6
- package/lib/handlers/Safari11.js +6 -6
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +10 -7
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/scalabilityModes.d.ts +1 -1
- package/lib/scalabilityModes.d.ts.map +1 -1
- package/npm-scripts.js +124 -28
- package/package.json +17 -5
- package/.eslintrc.js +0 -243
- package/.github/FUNDING.yml +0 -12
- package/.github/ISSUE_TEMPLATE/Bug_Report.md +0 -24
- package/.github/ISSUE_TEMPLATE/Feature_Request.md +0 -7
- package/.github/ISSUE_TEMPLATE/Support_Question.md +0 -12
- package/.travis.yml +0 -26
- package/src/Consumer.ts +0 -334
- package/src/DataConsumer.ts +0 -271
- package/src/DataProducer.ts +0 -291
- package/src/Device.ts +0 -584
- package/src/EnhancedEventEmitter.ts +0 -133
- package/src/Logger.ts +0 -47
- package/src/Producer.ts +0 -534
- package/src/RtpParameters.ts +0 -326
- package/src/SctpParameters.ts +0 -74
- package/src/Transport.ts +0 -1275
- package/src/errors.ts +0 -45
- package/src/handlers/Chrome55.ts +0 -866
- package/src/handlers/Chrome67.ts +0 -951
- package/src/handlers/Chrome70.ts +0 -964
- package/src/handlers/Chrome74.ts +0 -1058
- package/src/handlers/Edge11.ts +0 -667
- package/src/handlers/FakeHandler.ts +0 -448
- package/src/handlers/Firefox60.ts +0 -1040
- package/src/handlers/HandlerInterface.ts +0 -162
- package/src/handlers/ReactNative.ts +0 -886
- package/src/handlers/Safari11.ts +0 -944
- package/src/handlers/Safari12.ts +0 -1009
- package/src/handlers/ortc/edgeUtils.ts +0 -77
- package/src/handlers/sdp/MediaSection.ts +0 -836
- package/src/handlers/sdp/RemoteSdp.ts +0 -474
- package/src/handlers/sdp/commonUtils.ts +0 -259
- package/src/handlers/sdp/plainRtpUtils.ts +0 -58
- package/src/handlers/sdp/planBUtils.ts +0 -227
- package/src/handlers/sdp/unifiedPlanUtils.ts +0 -188
- package/src/index.ts +0 -28
- package/src/ortc.ts +0 -1169
- package/src/scalabilityModes.ts +0 -27
- package/src/types.ts +0 -11
- package/src/utils.ts +0 -18
- package/test/fakeParameters.js +0 -701
- package/test/test.js +0 -1672
- package/tsconfig.json +0 -17
package/.eslintrc.js
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
const eslintConfig =
|
|
2
|
-
{
|
|
3
|
-
env :
|
|
4
|
-
{
|
|
5
|
-
browser : true,
|
|
6
|
-
es6 : true,
|
|
7
|
-
node : true
|
|
8
|
-
},
|
|
9
|
-
plugins : [],
|
|
10
|
-
settings : {},
|
|
11
|
-
parserOptions :
|
|
12
|
-
{
|
|
13
|
-
ecmaVersion : 2018,
|
|
14
|
-
sourceType : 'module',
|
|
15
|
-
ecmaFeatures :
|
|
16
|
-
{
|
|
17
|
-
impliedStrict : true
|
|
18
|
-
},
|
|
19
|
-
lib : [ 'es2018', 'dom' ]
|
|
20
|
-
},
|
|
21
|
-
rules :
|
|
22
|
-
{
|
|
23
|
-
'array-bracket-spacing' : [ 2, 'always',
|
|
24
|
-
{
|
|
25
|
-
objectsInArrays : true,
|
|
26
|
-
arraysInArrays : true
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
'arrow-parens' : [ 2, 'always' ],
|
|
30
|
-
'arrow-spacing' : 2,
|
|
31
|
-
'block-spacing' : [ 2, 'always' ],
|
|
32
|
-
'brace-style' : [ 2, 'allman', { allowSingleLine: true } ],
|
|
33
|
-
'camelcase' : 2,
|
|
34
|
-
'comma-dangle' : 2,
|
|
35
|
-
'comma-spacing' : [ 2, { before: false, after: true } ],
|
|
36
|
-
'comma-style' : 2,
|
|
37
|
-
'computed-property-spacing' : 2,
|
|
38
|
-
'constructor-super' : 2,
|
|
39
|
-
'func-call-spacing' : 2,
|
|
40
|
-
'generator-star-spacing' : 2,
|
|
41
|
-
'guard-for-in' : 2,
|
|
42
|
-
'indent' : [ 2, 'tab', { 'SwitchCase': 1 } ],
|
|
43
|
-
'key-spacing' : [ 2,
|
|
44
|
-
{
|
|
45
|
-
singleLine :
|
|
46
|
-
{
|
|
47
|
-
beforeColon : false,
|
|
48
|
-
afterColon : true
|
|
49
|
-
},
|
|
50
|
-
multiLine :
|
|
51
|
-
{
|
|
52
|
-
beforeColon : true,
|
|
53
|
-
afterColon : true,
|
|
54
|
-
align : 'colon'
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
],
|
|
58
|
-
'keyword-spacing' : 2,
|
|
59
|
-
'linebreak-style' : [ 2, 'unix' ],
|
|
60
|
-
'lines-around-comment' : [ 2,
|
|
61
|
-
{
|
|
62
|
-
allowBlockStart : true,
|
|
63
|
-
allowObjectStart : true,
|
|
64
|
-
beforeBlockComment : false,
|
|
65
|
-
beforeLineComment : false
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
'max-len' : [ 2, 90,
|
|
69
|
-
{
|
|
70
|
-
tabWidth : 2,
|
|
71
|
-
comments : 100,
|
|
72
|
-
ignoreUrls : true,
|
|
73
|
-
ignoreStrings : true,
|
|
74
|
-
ignoreTemplateLiterals : true,
|
|
75
|
-
ignoreRegExpLiterals : true
|
|
76
|
-
}
|
|
77
|
-
],
|
|
78
|
-
'newline-after-var' : 2,
|
|
79
|
-
'newline-before-return' : 2,
|
|
80
|
-
'newline-per-chained-call' : 2,
|
|
81
|
-
'no-alert' : 2,
|
|
82
|
-
'no-caller' : 2,
|
|
83
|
-
'no-case-declarations' : 2,
|
|
84
|
-
'no-catch-shadow' : 2,
|
|
85
|
-
'no-class-assign' : 2,
|
|
86
|
-
'no-confusing-arrow' : 2,
|
|
87
|
-
'no-console' : 2,
|
|
88
|
-
'no-const-assign' : 2,
|
|
89
|
-
'no-debugger' : 2,
|
|
90
|
-
'no-dupe-args' : 2,
|
|
91
|
-
'no-dupe-keys' : 2,
|
|
92
|
-
'no-duplicate-case' : 2,
|
|
93
|
-
'no-div-regex' : 2,
|
|
94
|
-
'no-empty' : [ 2, { allowEmptyCatch: true } ],
|
|
95
|
-
'no-empty-pattern' : 2,
|
|
96
|
-
'no-else-return' : 0,
|
|
97
|
-
'no-eval' : 2,
|
|
98
|
-
'no-extend-native' : 2,
|
|
99
|
-
'no-ex-assign' : 2,
|
|
100
|
-
'no-extra-bind' : 2,
|
|
101
|
-
'no-extra-boolean-cast' : 2,
|
|
102
|
-
'no-extra-label' : 2,
|
|
103
|
-
'no-extra-semi' : 2,
|
|
104
|
-
'no-fallthrough' : 2,
|
|
105
|
-
'no-func-assign' : 2,
|
|
106
|
-
'no-global-assign' : 2,
|
|
107
|
-
'no-implicit-coercion' : 2,
|
|
108
|
-
'no-implicit-globals' : 2,
|
|
109
|
-
'no-inner-declarations' : 2,
|
|
110
|
-
'no-invalid-regexp' : 2,
|
|
111
|
-
'no-invalid-this' : 2,
|
|
112
|
-
'no-irregular-whitespace' : 2,
|
|
113
|
-
'no-lonely-if' : 2,
|
|
114
|
-
'no-mixed-operators' : 2,
|
|
115
|
-
'no-mixed-spaces-and-tabs' : 2,
|
|
116
|
-
'no-multi-spaces' : 2,
|
|
117
|
-
'no-multi-str' : 2,
|
|
118
|
-
'no-multiple-empty-lines' : [ 1, { max: 1, maxEOF: 0, maxBOF: 0 } ],
|
|
119
|
-
'no-native-reassign' : 2,
|
|
120
|
-
'no-negated-in-lhs' : 2,
|
|
121
|
-
'no-new' : 2,
|
|
122
|
-
'no-new-func' : 2,
|
|
123
|
-
'no-new-wrappers' : 2,
|
|
124
|
-
'no-obj-calls' : 2,
|
|
125
|
-
'no-proto' : 2,
|
|
126
|
-
'no-prototype-builtins' : 0,
|
|
127
|
-
'no-redeclare' : 2,
|
|
128
|
-
'no-regex-spaces' : 2,
|
|
129
|
-
'no-restricted-imports' : 2,
|
|
130
|
-
'no-return-assign' : 2,
|
|
131
|
-
'no-self-assign' : 2,
|
|
132
|
-
'no-self-compare' : 2,
|
|
133
|
-
'no-sequences' : 2,
|
|
134
|
-
'no-shadow' : 2,
|
|
135
|
-
'no-shadow-restricted-names' : 2,
|
|
136
|
-
'no-spaced-func' : 2,
|
|
137
|
-
'no-sparse-arrays' : 2,
|
|
138
|
-
'no-this-before-super' : 2,
|
|
139
|
-
'no-throw-literal' : 2,
|
|
140
|
-
'no-undef' : 2,
|
|
141
|
-
'no-unexpected-multiline' : 2,
|
|
142
|
-
'no-unmodified-loop-condition' : 2,
|
|
143
|
-
'no-unreachable' : 2,
|
|
144
|
-
'no-unused-vars' : [ 1, { vars: 'all', args: 'after-used' } ],
|
|
145
|
-
'no-use-before-define' : 0,
|
|
146
|
-
'no-useless-call' : 2,
|
|
147
|
-
'no-useless-computed-key' : 2,
|
|
148
|
-
'no-useless-concat' : 2,
|
|
149
|
-
'no-useless-rename' : 2,
|
|
150
|
-
'no-var' : 2,
|
|
151
|
-
'no-whitespace-before-property' : 2,
|
|
152
|
-
'object-curly-newline' : 0,
|
|
153
|
-
'object-curly-spacing' : [ 2, 'always' ],
|
|
154
|
-
'object-property-newline' : [ 2, { allowMultiplePropertiesPerLine: true } ],
|
|
155
|
-
'prefer-const' : 2,
|
|
156
|
-
'prefer-rest-params' : 2,
|
|
157
|
-
'prefer-spread' : 2,
|
|
158
|
-
'prefer-template' : 2,
|
|
159
|
-
'quotes' : [ 2, 'single', { avoidEscape: true } ],
|
|
160
|
-
'semi' : [ 2, 'always' ],
|
|
161
|
-
'semi-spacing' : 2,
|
|
162
|
-
'space-before-blocks' : 2,
|
|
163
|
-
'space-before-function-paren' : [ 2,
|
|
164
|
-
{
|
|
165
|
-
anonymous : 'never',
|
|
166
|
-
named : 'never',
|
|
167
|
-
asyncArrow : 'always'
|
|
168
|
-
}
|
|
169
|
-
],
|
|
170
|
-
'space-in-parens' : [ 2, 'never' ],
|
|
171
|
-
'spaced-comment' : [ 2, 'always' ],
|
|
172
|
-
'strict' : 2,
|
|
173
|
-
'valid-typeof' : 2,
|
|
174
|
-
'yoda' : 2
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
switch (process.env.MEDIASOUP_NODE_LANGUAGE)
|
|
179
|
-
{
|
|
180
|
-
case 'typescript':
|
|
181
|
-
{
|
|
182
|
-
eslintConfig.parser = '@typescript-eslint/parser';
|
|
183
|
-
eslintConfig.plugins =
|
|
184
|
-
[
|
|
185
|
-
...eslintConfig.plugins,
|
|
186
|
-
'@typescript-eslint'
|
|
187
|
-
];
|
|
188
|
-
eslintConfig.extends =
|
|
189
|
-
[
|
|
190
|
-
'eslint:recommended',
|
|
191
|
-
'plugin:@typescript-eslint/eslint-recommended',
|
|
192
|
-
'plugin:@typescript-eslint/recommended'
|
|
193
|
-
];
|
|
194
|
-
eslintConfig.rules =
|
|
195
|
-
{
|
|
196
|
-
...eslintConfig.rules,
|
|
197
|
-
'no-unused-vars' : 0,
|
|
198
|
-
'@typescript-eslint/ban-types' : 0,
|
|
199
|
-
'@typescript-eslint/ban-ts-comment' : 0,
|
|
200
|
-
'@typescript-eslint/ban-ts-ignore' : 0,
|
|
201
|
-
'@typescript-eslint/explicit-module-boundary-types' : 0,
|
|
202
|
-
'@typescript-eslint/member-delimiter-style' : [ 2,
|
|
203
|
-
|
|
204
|
-
{
|
|
205
|
-
multiline : { delimiter: 'semi', requireLast: true },
|
|
206
|
-
singleline : { delimiter: 'semi', requireLast: false }
|
|
207
|
-
}
|
|
208
|
-
],
|
|
209
|
-
'@typescript-eslint/no-explicit-any' : 0,
|
|
210
|
-
'@typescript-eslint/no-unused-vars' : [ 2,
|
|
211
|
-
{
|
|
212
|
-
vars : 'all',
|
|
213
|
-
args : 'after-used',
|
|
214
|
-
ignoreRestSiblings : false
|
|
215
|
-
}
|
|
216
|
-
],
|
|
217
|
-
'@typescript-eslint/no-use-before-define' : [ 2, { functions: false } ],
|
|
218
|
-
'@typescript-eslint/no-empty-function' : 0,
|
|
219
|
-
'@typescript-eslint/no-non-null-assertion' : 0
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
break;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
case 'javascript':
|
|
226
|
-
{
|
|
227
|
-
eslintConfig.env['jest/globals'] = true;
|
|
228
|
-
eslintConfig.plugins =
|
|
229
|
-
[
|
|
230
|
-
...eslintConfig.plugins,
|
|
231
|
-
'jest'
|
|
232
|
-
];
|
|
233
|
-
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
default:
|
|
238
|
-
{
|
|
239
|
-
throw new TypeError('wrong/missing MEDIASOUP_NODE_LANGUAGE env');
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
module.exports = eslintConfig;
|
package/.github/FUNDING.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# These are supported funding model platforms
|
|
2
|
-
|
|
3
|
-
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
|
4
|
-
patreon: # Replace with a single Patreon username
|
|
5
|
-
open_collective: mediasoup
|
|
6
|
-
ko_fi: # Replace with a single Ko-fi username
|
|
7
|
-
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
8
|
-
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
9
|
-
liberapay: # Replace with a single Liberapay username
|
|
10
|
-
issuehunt: # Replace with a single IssueHunt username
|
|
11
|
-
otechie: # Replace with a single Otechie username
|
|
12
|
-
custom: # Replace with a single custom sponsorship URL
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: 🐍 Bug Report
|
|
3
|
-
about: Report a bug in mediasoup-client
|
|
4
|
-
labels: bug
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Bug Report
|
|
8
|
-
|
|
9
|
-
**IMPORTANT:** We primarily use GitHub as an issue tracker. Just open an issue here if you have encountered a bug in mediasoup-client.
|
|
10
|
-
|
|
11
|
-
If you have questions or doubts about mediasoup-client or need support, please use the mediasoup Discourse Group instead:
|
|
12
|
-
|
|
13
|
-
https://mediasoup.discourse.group
|
|
14
|
-
|
|
15
|
-
### Your environment
|
|
16
|
-
|
|
17
|
-
- Operating system:
|
|
18
|
-
- Browser version:
|
|
19
|
-
- npm version:
|
|
20
|
-
- mediasoup version:
|
|
21
|
-
- mediasoup-client version:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
### Issue description
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: 🙈 Support Question
|
|
3
|
-
about: If you have any questions use the mediasoup Discourse Group
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
**IMPORTANT:** We primarily use GitHub as an issue tracker. Please, use the mediasoup Discourse Group if you have questions or doubts or if you need support about mediasoup and its ecosystem:
|
|
7
|
-
|
|
8
|
-
https://mediasoup.discourse.group
|
|
9
|
-
|
|
10
|
-
Before asking any questions, please check the mediasoup official documentation:
|
|
11
|
-
|
|
12
|
-
https://mediasoup.org/documentation/
|
package/.travis.yml
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
branches:
|
|
2
|
-
only:
|
|
3
|
-
- v3
|
|
4
|
-
|
|
5
|
-
language: node_js
|
|
6
|
-
|
|
7
|
-
node_js:
|
|
8
|
-
- 10
|
|
9
|
-
- 12
|
|
10
|
-
- 14
|
|
11
|
-
|
|
12
|
-
install:
|
|
13
|
-
- npm install
|
|
14
|
-
|
|
15
|
-
script:
|
|
16
|
-
- npm run lint
|
|
17
|
-
- npm run typescript:build
|
|
18
|
-
- npm test
|
|
19
|
-
|
|
20
|
-
notifications:
|
|
21
|
-
email:
|
|
22
|
-
on_success: change
|
|
23
|
-
on_failure: always
|
|
24
|
-
recipients:
|
|
25
|
-
- secure: nZrn+wwkyo7sLlB9/Gsk4CyzyG3UccqOimQRz5VwTwyafYqpwin5T6eWBoDq6nphfLPt4D9keC4NawRlv2bX9AWRuKlrU7Z8/1rkObIwSm1ZNk/Yn718Q/IwEDSabS00pNXV3X9dV1QfxelrHiH1PgNdjU1aOyMqWWD445aXq/RM8L6ushksMbMkoW6DWaM83DGFB2FWumkFqI84uRpWqdESp9mVVErxBeWrTAOQqRsLDHGFwcDq07xBJDNw7vrPN2Furnf3xE6hGDWiBpstjwGpY0vql+5UzjOnC6oqdLP9H3i5znR2lzPw5x/4S0cW6fKzF/G02aPPk2Oty9CRXdLJKuJ9Xrwo7BVAEfnQFpc6q1kvONx/j0bY2UdLO2zgUGM1IWO2Pvmm7//FWiv9WgCF3kfOIp5qh5SN1o/W+SErmvKaYyOPMe3OUOemDjOnVIQcMDTISue2aYUS7GuoTx/+jp+F8Y99/3shyBWEaAbg1LVptRgMUvSzrBG/3Y2b6Gx2qSojMisyqfv3USx8h91sxZ96qyHkbHm4LCzB6PeRgNf+ebUnm/+fTrTtkdeo3byD5ZsKI1dzJ+/ZqDaAEEZRKwLxBdJLlLsWAoM+iQ4L6rPgFP5xZ2E4eVQY/MPJt3bjCxEhNSc/8y1vTIozx33PoiemILODj+I/ARxYxB8=
|
|
26
|
-
- secure: dSfH0lbTzxCBjMnZdg1nBy3i7BVtLpiM+1PkWcj3FrLwNVDc6yjNmsqxF+AwDJRYlsq/KtaZIKx8GeTIz59LpOnXunFugnpl2XnJAw+QdNYsTRnfj99PlbGaZFoqL5p1l/8zJxRcuIiaIlpE3yV5iD7pT35DoTY/WWew/6Wcu1aawWUwJ6oR4y/K8hyN0J8GaWb62HTmdwPWY0mc1qtCHVGDWGAQXi828U7QhQpXmk9e8G8j3a9yiVAHI3hFzgUkQv2qBil/1NHr9RY4J/bOuiWymBfDTzyfOdJgn2nZUD+ky+UucEqVnzUE9kvNYkOHUTzq3+H5LLgUy8n4uSIwhvYsGNVgpJCQufc4F+GM70bEA+jCB+pihiBDLN2o2vpbNH45vi8zZtW1bUIdJC88MMjiKC4Yvu33n0ii0/1arqUK9Na96phYJUpgbz6nCKBRO0N/VlXwZTvwJ5hmIhoYzZ9vrvXD66RMGB+Bbm318TvOJqCUEoNRyTaXcBFBr0vEgq3+vTlnOGcxv83efHP8+GUM7Q3f22N4GHXBtIlRIYVtcEm5PjYtdtvzAup2Upr3Y8UnaYhq8SJREZIBEFfNRPB3g0/knizmls0zIzoXvakOtsUq+sUt5xapayD8RYiN4W/Kj8fhWKFUL+zby6OJx+bC9MTA+LVRhROKdLhvga8=
|
package/src/Consumer.ts
DELETED
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
import { Logger } from './Logger';
|
|
2
|
-
import { EnhancedEventEmitter } from './EnhancedEventEmitter';
|
|
3
|
-
import { InvalidStateError } from './errors';
|
|
4
|
-
import { MediaKind, RtpParameters } from './RtpParameters';
|
|
5
|
-
|
|
6
|
-
const logger = new Logger('Consumer');
|
|
7
|
-
|
|
8
|
-
export type ConsumerOptions =
|
|
9
|
-
{
|
|
10
|
-
id?: string;
|
|
11
|
-
producerId?: string;
|
|
12
|
-
kind?: 'audio' | 'video';
|
|
13
|
-
rtpParameters: RtpParameters;
|
|
14
|
-
appData?: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type ConsumerEvents =
|
|
18
|
-
{
|
|
19
|
-
transportclose: [];
|
|
20
|
-
trackended: [];
|
|
21
|
-
// Private events.
|
|
22
|
-
'@getstats': [(stats: RTCStatsReport) => void, (error: Error) => void];
|
|
23
|
-
'@close': [];
|
|
24
|
-
'@pause': [];
|
|
25
|
-
'@resume': [];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type ConsumerObserverEvents =
|
|
29
|
-
{
|
|
30
|
-
close: [];
|
|
31
|
-
pause: [];
|
|
32
|
-
resume: [];
|
|
33
|
-
trackended: [];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export class Consumer extends EnhancedEventEmitter<ConsumerEvents>
|
|
37
|
-
{
|
|
38
|
-
// Id.
|
|
39
|
-
private readonly _id: string;
|
|
40
|
-
// Local id.
|
|
41
|
-
private readonly _localId: string;
|
|
42
|
-
// Associated Producer id.
|
|
43
|
-
private readonly _producerId: string;
|
|
44
|
-
// Closed flag.
|
|
45
|
-
private _closed = false;
|
|
46
|
-
// Associated RTCRtpReceiver.
|
|
47
|
-
private readonly _rtpReceiver?: RTCRtpReceiver;
|
|
48
|
-
// Remote track.
|
|
49
|
-
private readonly _track: MediaStreamTrack;
|
|
50
|
-
// RTP parameters.
|
|
51
|
-
private readonly _rtpParameters: RtpParameters;
|
|
52
|
-
// Paused flag.
|
|
53
|
-
private _paused: boolean;
|
|
54
|
-
// App custom data.
|
|
55
|
-
private readonly _appData: Record<string, unknown>;
|
|
56
|
-
// Observer instance.
|
|
57
|
-
protected readonly _observer = new EnhancedEventEmitter<ConsumerObserverEvents>();
|
|
58
|
-
|
|
59
|
-
constructor(
|
|
60
|
-
{
|
|
61
|
-
id,
|
|
62
|
-
localId,
|
|
63
|
-
producerId,
|
|
64
|
-
rtpReceiver,
|
|
65
|
-
track,
|
|
66
|
-
rtpParameters,
|
|
67
|
-
appData
|
|
68
|
-
}:
|
|
69
|
-
{
|
|
70
|
-
id: string;
|
|
71
|
-
localId: string;
|
|
72
|
-
producerId: string;
|
|
73
|
-
rtpReceiver?: RTCRtpReceiver;
|
|
74
|
-
track: MediaStreamTrack;
|
|
75
|
-
rtpParameters: RtpParameters;
|
|
76
|
-
appData?: Record<string, unknown>;
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
{
|
|
80
|
-
super();
|
|
81
|
-
|
|
82
|
-
logger.debug('constructor()');
|
|
83
|
-
|
|
84
|
-
this._id = id;
|
|
85
|
-
this._localId = localId;
|
|
86
|
-
this._producerId = producerId;
|
|
87
|
-
this._rtpReceiver = rtpReceiver;
|
|
88
|
-
this._track = track;
|
|
89
|
-
this._rtpParameters = rtpParameters;
|
|
90
|
-
this._paused = !track.enabled;
|
|
91
|
-
this._appData = appData || {};
|
|
92
|
-
this._onTrackEnded = this._onTrackEnded.bind(this);
|
|
93
|
-
|
|
94
|
-
this._handleTrack();
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Consumer id.
|
|
99
|
-
*/
|
|
100
|
-
get id(): string
|
|
101
|
-
{
|
|
102
|
-
return this._id;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Local id.
|
|
107
|
-
*/
|
|
108
|
-
get localId(): string
|
|
109
|
-
{
|
|
110
|
-
return this._localId;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Associated Producer id.
|
|
115
|
-
*/
|
|
116
|
-
get producerId(): string
|
|
117
|
-
{
|
|
118
|
-
return this._producerId;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Whether the Consumer is closed.
|
|
123
|
-
*/
|
|
124
|
-
get closed(): boolean
|
|
125
|
-
{
|
|
126
|
-
return this._closed;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Media kind.
|
|
131
|
-
*/
|
|
132
|
-
get kind(): MediaKind
|
|
133
|
-
{
|
|
134
|
-
return this._track.kind as MediaKind;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Associated RTCRtpReceiver.
|
|
139
|
-
*/
|
|
140
|
-
get rtpReceiver(): RTCRtpReceiver | undefined
|
|
141
|
-
{
|
|
142
|
-
return this._rtpReceiver;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* The associated track.
|
|
147
|
-
*/
|
|
148
|
-
get track(): MediaStreamTrack
|
|
149
|
-
{
|
|
150
|
-
return this._track;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* RTP parameters.
|
|
155
|
-
*/
|
|
156
|
-
get rtpParameters(): RtpParameters
|
|
157
|
-
{
|
|
158
|
-
return this._rtpParameters;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Whether the Consumer is paused.
|
|
163
|
-
*/
|
|
164
|
-
get paused(): boolean
|
|
165
|
-
{
|
|
166
|
-
return this._paused;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* App custom data.
|
|
171
|
-
*/
|
|
172
|
-
get appData(): Record<string, unknown>
|
|
173
|
-
{
|
|
174
|
-
return this._appData;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Invalid setter.
|
|
179
|
-
*/
|
|
180
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
181
|
-
set appData(appData: Record<string, unknown>)
|
|
182
|
-
{
|
|
183
|
-
throw new Error('cannot override appData object');
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
get observer(): EnhancedEventEmitter
|
|
187
|
-
{
|
|
188
|
-
return this._observer;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Closes the Consumer.
|
|
193
|
-
*/
|
|
194
|
-
close(): void
|
|
195
|
-
{
|
|
196
|
-
if (this._closed)
|
|
197
|
-
return;
|
|
198
|
-
|
|
199
|
-
logger.debug('close()');
|
|
200
|
-
|
|
201
|
-
this._closed = true;
|
|
202
|
-
|
|
203
|
-
this._destroyTrack();
|
|
204
|
-
|
|
205
|
-
this.emit('@close');
|
|
206
|
-
|
|
207
|
-
// Emit observer event.
|
|
208
|
-
this._observer.safeEmit('close');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Transport was closed.
|
|
213
|
-
*/
|
|
214
|
-
transportClosed(): void
|
|
215
|
-
{
|
|
216
|
-
if (this._closed)
|
|
217
|
-
return;
|
|
218
|
-
|
|
219
|
-
logger.debug('transportClosed()');
|
|
220
|
-
|
|
221
|
-
this._closed = true;
|
|
222
|
-
|
|
223
|
-
this._destroyTrack();
|
|
224
|
-
|
|
225
|
-
this.safeEmit('transportclose');
|
|
226
|
-
|
|
227
|
-
// Emit observer event.
|
|
228
|
-
this._observer.safeEmit('close');
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Get associated RTCRtpReceiver stats.
|
|
233
|
-
*/
|
|
234
|
-
async getStats(): Promise<RTCStatsReport>
|
|
235
|
-
{
|
|
236
|
-
if (this._closed)
|
|
237
|
-
throw new InvalidStateError('closed');
|
|
238
|
-
|
|
239
|
-
return new Promise<RTCStatsReport>((resolve, reject) =>
|
|
240
|
-
{
|
|
241
|
-
this.safeEmit(
|
|
242
|
-
'@getstats',
|
|
243
|
-
resolve,
|
|
244
|
-
reject
|
|
245
|
-
);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Pauses receiving media.
|
|
251
|
-
*/
|
|
252
|
-
pause(): void
|
|
253
|
-
{
|
|
254
|
-
logger.debug('pause()');
|
|
255
|
-
|
|
256
|
-
if (this._closed)
|
|
257
|
-
{
|
|
258
|
-
logger.error('pause() | Consumer closed');
|
|
259
|
-
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
if (this._paused)
|
|
264
|
-
{
|
|
265
|
-
logger.debug('pause() | Consumer is already paused');
|
|
266
|
-
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
this._paused = true;
|
|
271
|
-
this._track.enabled = false;
|
|
272
|
-
|
|
273
|
-
this.emit('@pause');
|
|
274
|
-
|
|
275
|
-
// Emit observer event.
|
|
276
|
-
this._observer.safeEmit('pause');
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Resumes receiving media.
|
|
281
|
-
*/
|
|
282
|
-
resume(): void
|
|
283
|
-
{
|
|
284
|
-
logger.debug('resume()');
|
|
285
|
-
|
|
286
|
-
if (this._closed)
|
|
287
|
-
{
|
|
288
|
-
logger.error('resume() | Consumer closed');
|
|
289
|
-
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
if (!this._paused)
|
|
294
|
-
{
|
|
295
|
-
logger.debug('resume() | Consumer is already resumed');
|
|
296
|
-
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
this._paused = false;
|
|
301
|
-
this._track.enabled = true;
|
|
302
|
-
|
|
303
|
-
this.emit('@resume');
|
|
304
|
-
|
|
305
|
-
// Emit observer event.
|
|
306
|
-
this._observer.safeEmit('resume');
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
private _onTrackEnded(): void
|
|
310
|
-
{
|
|
311
|
-
logger.debug('track "ended" event');
|
|
312
|
-
|
|
313
|
-
this.safeEmit('trackended');
|
|
314
|
-
|
|
315
|
-
// Emit observer event.
|
|
316
|
-
this._observer.safeEmit('trackended');
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
private _handleTrack(): void
|
|
320
|
-
{
|
|
321
|
-
this._track.addEventListener('ended', this._onTrackEnded);
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
private _destroyTrack(): void
|
|
325
|
-
{
|
|
326
|
-
try
|
|
327
|
-
{
|
|
328
|
-
this._track.removeEventListener('ended', this._onTrackEnded);
|
|
329
|
-
this._track.stop();
|
|
330
|
-
}
|
|
331
|
-
catch (error)
|
|
332
|
-
{}
|
|
333
|
-
}
|
|
334
|
-
}
|