@stream-io/video-client 1.14.0 → 1.15.0

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.
Files changed (92) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/index.browser.es.js +1532 -1784
  3. package/dist/index.browser.es.js.map +1 -1
  4. package/dist/index.cjs.js +1512 -1783
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.es.js +1532 -1784
  7. package/dist/index.es.js.map +1 -1
  8. package/dist/src/Call.d.ts +43 -28
  9. package/dist/src/StreamSfuClient.d.ts +4 -5
  10. package/dist/src/devices/CameraManager.d.ts +5 -8
  11. package/dist/src/devices/InputMediaDeviceManager.d.ts +5 -5
  12. package/dist/src/devices/MicrophoneManager.d.ts +7 -2
  13. package/dist/src/devices/ScreenShareManager.d.ts +1 -2
  14. package/dist/src/gen/video/sfu/event/events.d.ts +38 -19
  15. package/dist/src/gen/video/sfu/models/models.d.ts +76 -9
  16. package/dist/src/helpers/array.d.ts +7 -0
  17. package/dist/src/permissions/PermissionsContext.d.ts +6 -0
  18. package/dist/src/rtc/BasePeerConnection.d.ts +90 -0
  19. package/dist/src/rtc/Dispatcher.d.ts +0 -1
  20. package/dist/src/rtc/IceTrickleBuffer.d.ts +3 -2
  21. package/dist/src/rtc/Publisher.d.ts +32 -86
  22. package/dist/src/rtc/Subscriber.d.ts +4 -56
  23. package/dist/src/rtc/TransceiverCache.d.ts +55 -0
  24. package/dist/src/rtc/codecs.d.ts +1 -15
  25. package/dist/src/rtc/helpers/sdp.d.ts +8 -0
  26. package/dist/src/rtc/helpers/tracks.d.ts +1 -0
  27. package/dist/src/rtc/index.d.ts +3 -0
  28. package/dist/src/rtc/videoLayers.d.ts +11 -25
  29. package/dist/src/stats/{stateStoreStatsReporter.d.ts → CallStateStatsReporter.d.ts} +5 -1
  30. package/dist/src/stats/SfuStatsReporter.d.ts +4 -2
  31. package/dist/src/stats/index.d.ts +1 -1
  32. package/dist/src/stats/types.d.ts +8 -0
  33. package/dist/src/types.d.ts +12 -22
  34. package/package.json +1 -1
  35. package/src/Call.ts +254 -268
  36. package/src/StreamSfuClient.ts +9 -14
  37. package/src/StreamVideoClient.ts +1 -1
  38. package/src/__tests__/Call.publishing.test.ts +306 -0
  39. package/src/devices/CameraManager.ts +33 -16
  40. package/src/devices/InputMediaDeviceManager.ts +36 -27
  41. package/src/devices/MicrophoneManager.ts +29 -8
  42. package/src/devices/ScreenShareManager.ts +6 -8
  43. package/src/devices/__tests__/CameraManager.test.ts +111 -14
  44. package/src/devices/__tests__/InputMediaDeviceManager.test.ts +4 -4
  45. package/src/devices/__tests__/MicrophoneManager.test.ts +59 -21
  46. package/src/devices/__tests__/ScreenShareManager.test.ts +5 -5
  47. package/src/devices/__tests__/mocks.ts +1 -0
  48. package/src/events/__tests__/internal.test.ts +132 -0
  49. package/src/events/__tests__/mutes.test.ts +0 -3
  50. package/src/events/__tests__/speaker.test.ts +92 -0
  51. package/src/events/participant.ts +3 -4
  52. package/src/gen/video/sfu/event/events.ts +91 -30
  53. package/src/gen/video/sfu/models/models.ts +105 -13
  54. package/src/helpers/array.ts +14 -0
  55. package/src/permissions/PermissionsContext.ts +22 -0
  56. package/src/permissions/__tests__/PermissionsContext.test.ts +40 -0
  57. package/src/rpc/__tests__/createClient.test.ts +38 -0
  58. package/src/rpc/createClient.ts +11 -5
  59. package/src/rtc/BasePeerConnection.ts +240 -0
  60. package/src/rtc/Dispatcher.ts +0 -9
  61. package/src/rtc/IceTrickleBuffer.ts +24 -4
  62. package/src/rtc/Publisher.ts +210 -528
  63. package/src/rtc/Subscriber.ts +26 -200
  64. package/src/rtc/TransceiverCache.ts +120 -0
  65. package/src/rtc/__tests__/Publisher.test.ts +407 -210
  66. package/src/rtc/__tests__/Subscriber.test.ts +88 -36
  67. package/src/rtc/__tests__/mocks/webrtc.mocks.ts +22 -2
  68. package/src/rtc/__tests__/videoLayers.test.ts +161 -54
  69. package/src/rtc/codecs.ts +1 -131
  70. package/src/rtc/helpers/__tests__/rtcConfiguration.test.ts +34 -0
  71. package/src/rtc/helpers/__tests__/sdp.test.ts +59 -0
  72. package/src/rtc/helpers/sdp.ts +30 -0
  73. package/src/rtc/helpers/tracks.ts +3 -0
  74. package/src/rtc/index.ts +4 -0
  75. package/src/rtc/videoLayers.ts +68 -76
  76. package/src/stats/{stateStoreStatsReporter.ts → CallStateStatsReporter.ts} +58 -27
  77. package/src/stats/SfuStatsReporter.ts +31 -3
  78. package/src/stats/index.ts +1 -1
  79. package/src/stats/types.ts +12 -0
  80. package/src/types.ts +12 -22
  81. package/dist/src/helpers/sdp-munging.d.ts +0 -24
  82. package/dist/src/rtc/bitrateLookup.d.ts +0 -2
  83. package/dist/src/rtc/helpers/iceCandidate.d.ts +0 -2
  84. package/src/helpers/__tests__/hq-audio-sdp.ts +0 -332
  85. package/src/helpers/__tests__/sdp-munging.test.ts +0 -283
  86. package/src/helpers/sdp-munging.ts +0 -265
  87. package/src/rtc/__tests__/bitrateLookup.test.ts +0 -12
  88. package/src/rtc/__tests__/codecs.test.ts +0 -145
  89. package/src/rtc/bitrateLookup.ts +0 -61
  90. package/src/rtc/helpers/iceCandidate.ts +0 -16
  91. /package/dist/src/{compatibility.d.ts → helpers/compatibility.d.ts} +0 -0
  92. /package/src/{compatibility.ts → helpers/compatibility.ts} +0 -0
package/src/types.ts CHANGED
@@ -162,7 +162,7 @@ export type SubscriptionChanges = {
162
162
  };
163
163
 
164
164
  /**
165
- * A preferred codec to use when publishing a video track.
165
+ * A preferred codec to use when publishing a video or audio track.
166
166
  * @internal
167
167
  */
168
168
  export type PreferredCodec = 'vp8' | 'h264' | 'vp9' | 'av1';
@@ -171,41 +171,31 @@ export type PreferredCodec = 'vp8' | 'h264' | 'vp9' | 'av1';
171
171
  * A collection of track publication options.
172
172
  * @internal
173
173
  */
174
- export type PublishOptions = {
174
+ export type ClientPublishOptions = {
175
175
  /**
176
176
  * The preferred codec to use when publishing the video stream.
177
177
  */
178
178
  preferredCodec?: PreferredCodec;
179
179
  /**
180
- * Force the codec to use when publishing the video stream.
181
- * This will override the preferred codec and the internal codec selection logic.
182
- * Use with caution.
180
+ * The fmtp line for the video codec.
183
181
  */
184
- forceCodec?: PreferredCodec;
185
- /**
186
- * When using a preferred codec, force the use of a single codec.
187
- * Enabling this, it will remove all other supported codecs from the SDP.
188
- * Defaults to false.
189
- */
190
- forceSingleCodec?: boolean;
191
- /**
192
- * The preferred scalability to use when publishing the video stream.
193
- * Applicable only for SVC codecs.
194
- */
195
- scalabilityMode?: string;
182
+ fmtpLine?: string;
196
183
  /**
197
184
  * The preferred bitrate to use when publishing the video stream.
198
185
  */
199
186
  preferredBitrate?: number;
200
- /**
201
- * The preferred downscale factor to use when publishing the video stream
202
- * in simulcast mode (non-SVC).
203
- */
204
- bitrateDownscaleFactor?: number;
205
187
  /**
206
188
  * The maximum number of simulcast layers to use when publishing the video stream.
207
189
  */
208
190
  maxSimulcastLayers?: number;
191
+ /**
192
+ * The preferred subscription (incoming video stream) codec.
193
+ */
194
+ subscriberCodec?: PreferredCodec;
195
+ /**
196
+ * The fmtp line for the subscriber codec.
197
+ */
198
+ subscriberFmtpLine?: string;
209
199
  /**
210
200
  * Screen share settings.
211
201
  */
@@ -1,24 +0,0 @@
1
- /**
2
- * Returns an SDP with DTX enabled or disabled.
3
- */
4
- export declare const toggleDtx: (sdp: string, enable: boolean) => string;
5
- /**
6
- * Returns and SDP with all the codecs except the given codec removed.
7
- */
8
- export declare const preserveCodec: (sdp: string, mid: string, codec: RTCRtpCodec) => string;
9
- /**
10
- * Enables high-quality audio through SDP munging for the given trackMid.
11
- *
12
- * @param sdp the SDP to munge.
13
- * @param trackMid the trackMid.
14
- * @param maxBitrate the max bitrate to set.
15
- */
16
- export declare const enableHighQualityAudio: (sdp: string, trackMid: string, maxBitrate?: number) => string;
17
- /**
18
- * Extracts the mid from the transceiver or the SDP.
19
- *
20
- * @param transceiver the transceiver.
21
- * @param transceiverInitIndex the index of the transceiver in the transceiver's init array.
22
- * @param sdp the SDP.
23
- */
24
- export declare const extractMid: (transceiver: RTCRtpTransceiver, transceiverInitIndex: number, sdp: string | undefined) => string;
@@ -1,2 +0,0 @@
1
- import { PreferredCodec } from '../types';
2
- export declare const getOptimalBitrate: (codec: PreferredCodec, frameHeight: number) => number;
@@ -1,2 +0,0 @@
1
- import { ICETrickle } from '../../gen/video/sfu/models/models';
2
- export declare function getIceCandidate(candidate: RTCIceCandidate): ICETrickle['iceCandidate'];
@@ -1,332 +0,0 @@
1
- export const initialSdp = `
2
- v=0
3
- o=- 898697271686242868 5 IN IP4 127.0.0.1
4
- s=-
5
- t=0 0
6
- a=group:BUNDLE 0 1 2 3
7
- a=extmap-allow-mixed
8
- a=msid-semantic: WMS e893e3ad-d9e8-4b56-998f-0d89213dd857
9
- m=video 60017 UDP/TLS/RTP/SAVPF 96 97 102 103 104 105 106 107 108 109 127 125 39 40 45 46 98 99 100 101 112 113 116 117 118
10
- c=IN IP4 79.125.240.146
11
- a=rtcp:9 IN IP4 0.0.0.0
12
- a=candidate:2824354870 1 udp 2122260223 192.168.1.102 60017 typ host generation 0 network-id 2
13
- a=candidate:427386432 1 udp 2122194687 192.168.1.244 63221 typ host generation 0 network-id 1 network-cost 10
14
- a=candidate:2841136656 1 udp 1686052607 79.125.240.146 60017 typ srflx raddr 192.168.1.102 rport 60017 generation 0 network-id 2
15
- a=candidate:410588262 1 udp 1685987071 79.125.240.146 63221 typ srflx raddr 192.168.1.244 rport 63221 generation 0 network-id 1 network-cost 10
16
- a=candidate:3600277166 1 tcp 1518280447 192.168.1.102 9 typ host tcptype active generation 0 network-id 2
17
- a=candidate:1740014808 1 tcp 1518214911 192.168.1.244 9 typ host tcptype active generation 0 network-id 1 network-cost 10
18
- a=ice-ufrag:GM64
19
- a=ice-pwd:ANZFilRRlZJ3bg9AD40eRu7n
20
- a=ice-options:trickle
21
- a=fingerprint:sha-256 38:1F:02:E5:2A:49:9A:2A:D9:8E:B9:9B:4C:40:21:B7:F1:C4:27:8E:B5:68:D6:E0:91:08:D9:CB:2B:AC:B3:87
22
- a=setup:actpass
23
- a=mid:0
24
- a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
25
- a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
26
- a=extmap:3 urn:3gpp:video-orientation
27
- a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
28
- a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
29
- a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
30
- a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
31
- a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
32
- a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
33
- a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
34
- a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
35
- a=sendonly
36
- a=msid:e893e3ad-d9e8-4b56-998f-0d89213dd857 44e5d53f-ce6a-4bf4-824a-335113d86e6e
37
- a=rtcp-mux
38
- a=rtcp-rsize
39
- a=rtpmap:96 VP8/90000
40
- a=rtcp-fb:96 goog-remb
41
- a=rtcp-fb:96 transport-cc
42
- a=rtcp-fb:96 ccm fir
43
- a=rtcp-fb:96 nack
44
- a=rtcp-fb:96 nack pli
45
- a=rtpmap:97 rtx/90000
46
- a=fmtp:97 apt=96
47
- a=rtpmap:102 H264/90000
48
- a=rtcp-fb:102 goog-remb
49
- a=rtcp-fb:102 transport-cc
50
- a=rtcp-fb:102 ccm fir
51
- a=rtcp-fb:102 nack
52
- a=rtcp-fb:102 nack pli
53
- a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
54
- a=rtpmap:103 rtx/90000
55
- a=fmtp:103 apt=102
56
- a=rtpmap:104 H264/90000
57
- a=rtcp-fb:104 goog-remb
58
- a=rtcp-fb:104 transport-cc
59
- a=rtcp-fb:104 ccm fir
60
- a=rtcp-fb:104 nack
61
- a=rtcp-fb:104 nack pli
62
- a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
63
- a=rtpmap:105 rtx/90000
64
- a=fmtp:105 apt=104
65
- a=rtpmap:106 H264/90000
66
- a=rtcp-fb:106 goog-remb
67
- a=rtcp-fb:106 transport-cc
68
- a=rtcp-fb:106 ccm fir
69
- a=rtcp-fb:106 nack
70
- a=rtcp-fb:106 nack pli
71
- a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
72
- a=rtpmap:107 rtx/90000
73
- a=fmtp:107 apt=106
74
- a=rtpmap:108 H264/90000
75
- a=rtcp-fb:108 goog-remb
76
- a=rtcp-fb:108 transport-cc
77
- a=rtcp-fb:108 ccm fir
78
- a=rtcp-fb:108 nack
79
- a=rtcp-fb:108 nack pli
80
- a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
81
- a=rtpmap:109 rtx/90000
82
- a=fmtp:109 apt=108
83
- a=rtpmap:127 H264/90000
84
- a=rtcp-fb:127 goog-remb
85
- a=rtcp-fb:127 transport-cc
86
- a=rtcp-fb:127 ccm fir
87
- a=rtcp-fb:127 nack
88
- a=rtcp-fb:127 nack pli
89
- a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
90
- a=rtpmap:125 rtx/90000
91
- a=fmtp:125 apt=127
92
- a=rtpmap:39 H264/90000
93
- a=rtcp-fb:39 goog-remb
94
- a=rtcp-fb:39 transport-cc
95
- a=rtcp-fb:39 ccm fir
96
- a=rtcp-fb:39 nack
97
- a=rtcp-fb:39 nack pli
98
- a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
99
- a=rtpmap:40 rtx/90000
100
- a=fmtp:40 apt=39
101
- a=rtpmap:45 AV1/90000
102
- a=rtcp-fb:45 goog-remb
103
- a=rtcp-fb:45 transport-cc
104
- a=rtcp-fb:45 ccm fir
105
- a=rtcp-fb:45 nack
106
- a=rtcp-fb:45 nack pli
107
- a=rtpmap:46 rtx/90000
108
- a=fmtp:46 apt=45
109
- a=rtpmap:98 VP9/90000
110
- a=rtcp-fb:98 goog-remb
111
- a=rtcp-fb:98 transport-cc
112
- a=rtcp-fb:98 ccm fir
113
- a=rtcp-fb:98 nack
114
- a=rtcp-fb:98 nack pli
115
- a=fmtp:98 profile-id=0
116
- a=rtpmap:99 rtx/90000
117
- a=fmtp:99 apt=98
118
- a=rtpmap:100 VP9/90000
119
- a=rtcp-fb:100 goog-remb
120
- a=rtcp-fb:100 transport-cc
121
- a=rtcp-fb:100 ccm fir
122
- a=rtcp-fb:100 nack
123
- a=rtcp-fb:100 nack pli
124
- a=fmtp:100 profile-id=2
125
- a=rtpmap:101 rtx/90000
126
- a=fmtp:101 apt=100
127
- a=rtpmap:112 H264/90000
128
- a=rtcp-fb:112 goog-remb
129
- a=rtcp-fb:112 transport-cc
130
- a=rtcp-fb:112 ccm fir
131
- a=rtcp-fb:112 nack
132
- a=rtcp-fb:112 nack pli
133
- a=fmtp:112 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
134
- a=rtpmap:113 rtx/90000
135
- a=fmtp:113 apt=112
136
- a=rtpmap:116 red/90000
137
- a=rtpmap:117 rtx/90000
138
- a=fmtp:117 apt=116
139
- a=rtpmap:118 ulpfec/90000
140
- a=rid:q send
141
- a=rid:h send
142
- a=rid:f send
143
- a=simulcast:send q;h;f
144
- m=audio 9 UDP/TLS/RTP/SAVPF 63 111 9 0 8 13 110 126
145
- c=IN IP4 0.0.0.0
146
- a=rtcp:9 IN IP4 0.0.0.0
147
- a=ice-ufrag:GM64
148
- a=ice-pwd:ANZFilRRlZJ3bg9AD40eRu7n
149
- a=ice-options:trickle
150
- a=fingerprint:sha-256 38:1F:02:E5:2A:49:9A:2A:D9:8E:B9:9B:4C:40:21:B7:F1:C4:27:8E:B5:68:D6:E0:91:08:D9:CB:2B:AC:B3:87
151
- a=setup:actpass
152
- a=mid:1
153
- a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
154
- a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
155
- a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
156
- a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
157
- a=sendonly
158
- a=msid:- cb02416c-8035-4e80-8b7e-becd6b7f600f
159
- a=rtcp-mux
160
- a=rtpmap:63 red/48000/2
161
- a=fmtp:63 111/111
162
- a=rtpmap:111 opus/48000/2
163
- a=rtcp-fb:111 transport-cc
164
- a=fmtp:111 minptime=10;usedtx=1;useinbandfec=1
165
- a=rtpmap:9 G722/8000
166
- a=rtpmap:0 PCMU/8000
167
- a=rtpmap:8 PCMA/8000
168
- a=rtpmap:13 CN/8000
169
- a=rtpmap:110 telephone-event/48000
170
- a=rtpmap:126 telephone-event/8000
171
- a=ssrc:743121750 cname:mbGW+aeWMLFhPbBC
172
- a=ssrc:743121750 msid:- cb02416c-8035-4e80-8b7e-becd6b7f600f
173
- m=video 9 UDP/TLS/RTP/SAVPF 96 97 102 103 104 105 106 107 108 109 127 125 39 40 45 46 98 99 100 101 112 113 116 117 118
174
- c=IN IP4 0.0.0.0
175
- a=rtcp:9 IN IP4 0.0.0.0
176
- a=ice-ufrag:GM64
177
- a=ice-pwd:ANZFilRRlZJ3bg9AD40eRu7n
178
- a=ice-options:trickle
179
- a=fingerprint:sha-256 38:1F:02:E5:2A:49:9A:2A:D9:8E:B9:9B:4C:40:21:B7:F1:C4:27:8E:B5:68:D6:E0:91:08:D9:CB:2B:AC:B3:87
180
- a=setup:actpass
181
- a=mid:2
182
- a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
183
- a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
184
- a=extmap:3 urn:3gpp:video-orientation
185
- a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
186
- a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
187
- a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
188
- a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
189
- a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
190
- a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
191
- a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
192
- a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
193
- a=sendonly
194
- a=msid:04f96a2a-d107-4a12-b545-cfe1dc2c4d37 4a1ae8a7-6c89-44d3-a9a1-02abce0012c7
195
- a=rtcp-mux
196
- a=rtcp-rsize
197
- a=rtpmap:96 VP8/90000
198
- a=rtcp-fb:96 goog-remb
199
- a=rtcp-fb:96 transport-cc
200
- a=rtcp-fb:96 ccm fir
201
- a=rtcp-fb:96 nack
202
- a=rtcp-fb:96 nack pli
203
- a=rtpmap:97 rtx/90000
204
- a=fmtp:97 apt=96
205
- a=rtpmap:102 H264/90000
206
- a=rtcp-fb:102 goog-remb
207
- a=rtcp-fb:102 transport-cc
208
- a=rtcp-fb:102 ccm fir
209
- a=rtcp-fb:102 nack
210
- a=rtcp-fb:102 nack pli
211
- a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
212
- a=rtpmap:103 rtx/90000
213
- a=fmtp:103 apt=102
214
- a=rtpmap:104 H264/90000
215
- a=rtcp-fb:104 goog-remb
216
- a=rtcp-fb:104 transport-cc
217
- a=rtcp-fb:104 ccm fir
218
- a=rtcp-fb:104 nack
219
- a=rtcp-fb:104 nack pli
220
- a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
221
- a=rtpmap:105 rtx/90000
222
- a=fmtp:105 apt=104
223
- a=rtpmap:106 H264/90000
224
- a=rtcp-fb:106 goog-remb
225
- a=rtcp-fb:106 transport-cc
226
- a=rtcp-fb:106 ccm fir
227
- a=rtcp-fb:106 nack
228
- a=rtcp-fb:106 nack pli
229
- a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
230
- a=rtpmap:107 rtx/90000
231
- a=fmtp:107 apt=106
232
- a=rtpmap:108 H264/90000
233
- a=rtcp-fb:108 goog-remb
234
- a=rtcp-fb:108 transport-cc
235
- a=rtcp-fb:108 ccm fir
236
- a=rtcp-fb:108 nack
237
- a=rtcp-fb:108 nack pli
238
- a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
239
- a=rtpmap:109 rtx/90000
240
- a=fmtp:109 apt=108
241
- a=rtpmap:127 H264/90000
242
- a=rtcp-fb:127 goog-remb
243
- a=rtcp-fb:127 transport-cc
244
- a=rtcp-fb:127 ccm fir
245
- a=rtcp-fb:127 nack
246
- a=rtcp-fb:127 nack pli
247
- a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
248
- a=rtpmap:125 rtx/90000
249
- a=fmtp:125 apt=127
250
- a=rtpmap:39 H264/90000
251
- a=rtcp-fb:39 goog-remb
252
- a=rtcp-fb:39 transport-cc
253
- a=rtcp-fb:39 ccm fir
254
- a=rtcp-fb:39 nack
255
- a=rtcp-fb:39 nack pli
256
- a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
257
- a=rtpmap:40 rtx/90000
258
- a=fmtp:40 apt=39
259
- a=rtpmap:45 AV1/90000
260
- a=rtcp-fb:45 goog-remb
261
- a=rtcp-fb:45 transport-cc
262
- a=rtcp-fb:45 ccm fir
263
- a=rtcp-fb:45 nack
264
- a=rtcp-fb:45 nack pli
265
- a=rtpmap:46 rtx/90000
266
- a=fmtp:46 apt=45
267
- a=rtpmap:98 VP9/90000
268
- a=rtcp-fb:98 goog-remb
269
- a=rtcp-fb:98 transport-cc
270
- a=rtcp-fb:98 ccm fir
271
- a=rtcp-fb:98 nack
272
- a=rtcp-fb:98 nack pli
273
- a=fmtp:98 profile-id=0
274
- a=rtpmap:99 rtx/90000
275
- a=fmtp:99 apt=98
276
- a=rtpmap:100 VP9/90000
277
- a=rtcp-fb:100 goog-remb
278
- a=rtcp-fb:100 transport-cc
279
- a=rtcp-fb:100 ccm fir
280
- a=rtcp-fb:100 nack
281
- a=rtcp-fb:100 nack pli
282
- a=fmtp:100 profile-id=2
283
- a=rtpmap:101 rtx/90000
284
- a=fmtp:101 apt=100
285
- a=rtpmap:112 H264/90000
286
- a=rtcp-fb:112 goog-remb
287
- a=rtcp-fb:112 transport-cc
288
- a=rtcp-fb:112 ccm fir
289
- a=rtcp-fb:112 nack
290
- a=rtcp-fb:112 nack pli
291
- a=fmtp:112 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
292
- a=rtpmap:113 rtx/90000
293
- a=fmtp:113 apt=112
294
- a=rtpmap:116 red/90000
295
- a=rtpmap:117 rtx/90000
296
- a=fmtp:117 apt=116
297
- a=rtpmap:118 ulpfec/90000
298
- a=ssrc-group:FID 4072017687 3466187747
299
- a=ssrc:4072017687 cname:mbGW+aeWMLFhPbBC
300
- a=ssrc:4072017687 msid:04f96a2a-d107-4a12-b545-cfe1dc2c4d37 4a1ae8a7-6c89-44d3-a9a1-02abce0012c7
301
- a=ssrc:3466187747 cname:mbGW+aeWMLFhPbBC
302
- a=ssrc:3466187747 msid:04f96a2a-d107-4a12-b545-cfe1dc2c4d37 4a1ae8a7-6c89-44d3-a9a1-02abce0012c7
303
- m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
304
- c=IN IP4 0.0.0.0
305
- a=rtcp:9 IN IP4 0.0.0.0
306
- a=ice-ufrag:GM64
307
- a=ice-pwd:ANZFilRRlZJ3bg9AD40eRu7n
308
- a=ice-options:trickle
309
- a=fingerprint:sha-256 38:1F:02:E5:2A:49:9A:2A:D9:8E:B9:9B:4C:40:21:B7:F1:C4:27:8E:B5:68:D6:E0:91:08:D9:CB:2B:AC:B3:87
310
- a=setup:actpass
311
- a=mid:3
312
- a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
313
- a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
314
- a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
315
- a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
316
- a=sendonly
317
- a=msid:- 75b8c290-1f46-464c-8dc5-a4a3bced313a
318
- a=rtcp-mux
319
- a=rtpmap:111 opus/48000/2
320
- a=rtcp-fb:111 transport-cc
321
- a=fmtp:111 minptime=10;usedtx=1;useinbandfec=1
322
- a=rtpmap:63 red/48000/2
323
- a=fmtp:63 111/111
324
- a=rtpmap:9 G722/8000
325
- a=rtpmap:0 PCMU/8000
326
- a=rtpmap:8 PCMA/8000
327
- a=rtpmap:13 CN/8000
328
- a=rtpmap:110 telephone-event/48000
329
- a=rtpmap:126 telephone-event/8000
330
- a=ssrc:1281279951 cname:mbGW+aeWMLFhPbBC
331
- a=ssrc:1281279951 msid:- 75b8c290-1f46-464c-8dc5-a4a3bced313a
332
- `.trim();