@videosdk.live/react-sdk 0.3.8 → 0.3.9

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.
@@ -1,7 +1,7 @@
1
1
  import React, { createContext, useEffect, useContext, useState, useRef, useMemo, forwardRef } from 'react';
2
2
  import EventEmitter from 'events';
3
3
  import { VideoSDK } from '@videosdk.live/js-sdk';
4
- export { CameraDeviceInfo, DeviceInfo, MicrophoneDeviceInfo } from '@videosdk.live/js-sdk';
4
+ export { CameraDeviceInfo, DeviceInfo, ExternalE2EEKeyProvider, MicrophoneDeviceInfo } from '@videosdk.live/js-sdk';
5
5
 
6
6
  function _extends() {
7
7
  _extends = Object.assign ? Object.assign.bind() : function (target) {
@@ -101,7 +101,12 @@ var events = {
101
101
  'whiteboard-started': eventPrifix + "-whiteboard-started",
102
102
  'whiteboard-stopped': eventPrifix + "-whiteboard-stopped",
103
103
  'paused-all-streams': eventPrifix + "-paused-all-streams",
104
- 'resumed-all-streams': eventPrifix + "-resumed-all-streams"
104
+ 'resumed-all-streams': eventPrifix + "-resumed-all-streams",
105
+ 'media-relay-started': eventPrifix + "-media-relay-started",
106
+ 'media-relay-stopped': eventPrifix + "-media-relay-stopped",
107
+ 'media-relay-error': eventPrifix + "-media-relay-error",
108
+ 'media-relay-request-response': eventPrifix + "-media-relay-request-response",
109
+ 'media-relay-request-received': eventPrifix + "-media-relay-request-received"
105
110
  };
106
111
  var eventEmitter = new EventEmitter();
107
112
  eventEmitter.setMaxListeners(9999);
@@ -189,7 +194,17 @@ var useMeeting = function useMeeting(_temp) {
189
194
  _ref$onCharacterJoine = _ref.onCharacterJoined,
190
195
  onCharacterJoined = _ref$onCharacterJoine === void 0 ? function () {} : _ref$onCharacterJoine,
191
196
  _ref$onCharacterLeft = _ref.onCharacterLeft,
192
- onCharacterLeft = _ref$onCharacterLeft === void 0 ? function () {} : _ref$onCharacterLeft;
197
+ onCharacterLeft = _ref$onCharacterLeft === void 0 ? function () {} : _ref$onCharacterLeft,
198
+ _ref$onMediaRelayStar = _ref.onMediaRelayStarted,
199
+ onMediaRelayStarted = _ref$onMediaRelayStar === void 0 ? function () {} : _ref$onMediaRelayStar,
200
+ _ref$onMediaRelayStop = _ref.onMediaRelayStopped,
201
+ onMediaRelayStopped = _ref$onMediaRelayStop === void 0 ? function () {} : _ref$onMediaRelayStop,
202
+ _ref$onMediaRelayErro = _ref.onMediaRelayError,
203
+ onMediaRelayError = _ref$onMediaRelayErro === void 0 ? function () {} : _ref$onMediaRelayErro,
204
+ _ref$onMediaRelayRequ = _ref.onMediaRelayRequestResponse,
205
+ onMediaRelayRequestResponse = _ref$onMediaRelayRequ === void 0 ? function () {} : _ref$onMediaRelayRequ,
206
+ _ref$onMediaRelayRequ2 = _ref.onMediaRelayRequestReceived,
207
+ onMediaRelayRequestReceived = _ref$onMediaRelayRequ2 === void 0 ? function () {} : _ref$onMediaRelayRequ2;
193
208
  useEffect(function () {
194
209
  eventEmitter.on(events['participant-joined'], onParticipantJoined);
195
210
  eventEmitter.on(events['participant-left'], onParticipantLeft);
@@ -225,6 +240,11 @@ var useMeeting = function useMeeting(_temp) {
225
240
  eventEmitter.on(events['participant-mode-changed'], onParticipantModeChanged);
226
241
  eventEmitter.on(events['character-joined'], onCharacterJoined);
227
242
  eventEmitter.on(events['character-left'], onCharacterLeft);
243
+ eventEmitter.on(events['media-relay-started'], onMediaRelayStarted);
244
+ eventEmitter.on(events['media-relay-stopped'], onMediaRelayStopped);
245
+ eventEmitter.on(events['media-relay-error'], onMediaRelayError);
246
+ eventEmitter.on(events['media-relay-request-response'], onMediaRelayRequestResponse);
247
+ eventEmitter.on(events['media-relay-request-received'], onMediaRelayRequestReceived);
228
248
  return function () {
229
249
  eventEmitter.off(events['meeting-state-changed'], onMeetingStateChanged);
230
250
  eventEmitter.off(events['participant-joined'], onParticipantJoined);
@@ -260,6 +280,11 @@ var useMeeting = function useMeeting(_temp) {
260
280
  eventEmitter.off(events['participant-mode-changed'], onParticipantModeChanged);
261
281
  eventEmitter.off(events['character-joined'], onCharacterJoined);
262
282
  eventEmitter.off(events['character-left'], onCharacterLeft);
283
+ eventEmitter.off(events['media-relay-started'], onMediaRelayStarted);
284
+ eventEmitter.off(events['media-relay-stopped'], onMediaRelayStopped);
285
+ eventEmitter.off(events['media-relay-error'], onMediaRelayError);
286
+ eventEmitter.off(events['media-relay-request-response'], onMediaRelayRequestResponse);
287
+ eventEmitter.off(events['media-relay-request-received'], onMediaRelayRequestReceived);
263
288
  };
264
289
  }, []);
265
290
  return useContext(MeetingProviderContex);
@@ -333,7 +358,17 @@ var MeetingConsumer = function MeetingConsumer(_ref2) {
333
358
  _ref2$onCharacterJoin = _ref2.onCharacterJoined,
334
359
  onCharacterJoined = _ref2$onCharacterJoin === void 0 ? function () {} : _ref2$onCharacterJoin,
335
360
  _ref2$onCharacterLeft = _ref2.onCharacterLeft,
336
- onCharacterLeft = _ref2$onCharacterLeft === void 0 ? function () {} : _ref2$onCharacterLeft;
361
+ onCharacterLeft = _ref2$onCharacterLeft === void 0 ? function () {} : _ref2$onCharacterLeft,
362
+ _ref2$onMediaRelaySta = _ref2.onMediaRelayStarted,
363
+ onMediaRelayStarted = _ref2$onMediaRelaySta === void 0 ? function () {} : _ref2$onMediaRelaySta,
364
+ _ref2$onMediaRelaySto = _ref2.onMediaRelayStopped,
365
+ onMediaRelayStopped = _ref2$onMediaRelaySto === void 0 ? function () {} : _ref2$onMediaRelaySto,
366
+ _ref2$onMediaRelayErr = _ref2.onMediaRelayError,
367
+ onMediaRelayError = _ref2$onMediaRelayErr === void 0 ? function () {} : _ref2$onMediaRelayErr,
368
+ _ref2$onMediaRelayReq = _ref2.onMediaRelayRequestResponse,
369
+ onMediaRelayRequestResponse = _ref2$onMediaRelayReq === void 0 ? function () {} : _ref2$onMediaRelayReq,
370
+ _ref2$onMediaRelayReq2 = _ref2.onMediaRelayRequestReceived,
371
+ onMediaRelayRequestReceived = _ref2$onMediaRelayReq2 === void 0 ? function () {} : _ref2$onMediaRelayReq2;
337
372
  useEffect(function () {
338
373
  eventEmitter.on(events['meeting-state-changed'], onMeetingStateChanged);
339
374
  eventEmitter.on(events['participant-joined'], onParticipantJoined);
@@ -369,6 +404,11 @@ var MeetingConsumer = function MeetingConsumer(_ref2) {
369
404
  eventEmitter.on(events['participant-mode-changed'], onParticipantModeChanged);
370
405
  eventEmitter.on(events['character-joined'], onCharacterJoined);
371
406
  eventEmitter.on(events['character-left'], onCharacterLeft);
407
+ eventEmitter.on(events['media-relay-started'], onMediaRelayStarted);
408
+ eventEmitter.on(events['media-relay-stopped'], onMediaRelayStopped);
409
+ eventEmitter.on(events['media-relay-error'], onMediaRelayError);
410
+ eventEmitter.on(events['media-relay-request-response'], onMediaRelayRequestResponse);
411
+ eventEmitter.on(events['media-relay-request-received'], onMediaRelayRequestReceived);
372
412
  return function () {
373
413
  eventEmitter.off(events['meeting-state-changed'], onMeetingStateChanged);
374
414
  eventEmitter.off(events['participant-joined'], onParticipantJoined);
@@ -404,12 +444,17 @@ var MeetingConsumer = function MeetingConsumer(_ref2) {
404
444
  eventEmitter.off(events['participant-mode-changed'], onParticipantModeChanged);
405
445
  eventEmitter.off(events['character-joined'], onCharacterJoined);
406
446
  eventEmitter.off(events['character-left'], onCharacterLeft);
447
+ eventEmitter.off(events['media-relay-started'], onMediaRelayStarted);
448
+ eventEmitter.off(events['media-relay-stopped'], onMediaRelayStopped);
449
+ eventEmitter.off(events['media-relay-error'], onMediaRelayError);
450
+ eventEmitter.off(events['media-relay-request-response'], onMediaRelayRequestResponse);
451
+ eventEmitter.off(events['media-relay-request-received'], onMediaRelayRequestReceived);
407
452
  };
408
453
  }, []);
409
454
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MeetingProviderContex.Consumer, null, children));
410
455
  };
411
456
 
412
- var version = "0.3.0";
457
+ var version = "0.3.9";
413
458
 
414
459
  var MeetingProvider = function MeetingProvider(_ref) {
415
460
  var children = _ref.children,
@@ -417,7 +462,8 @@ var MeetingProvider = function MeetingProvider(_ref) {
417
462
  token = _ref.token,
418
463
  joinWithoutUserInteraction = _ref.joinWithoutUserInteraction,
419
464
  _reinitialiseMeetingOnConfigChange = _ref.reinitialiseMeetingOnConfigChange,
420
- deviceInfo = _ref.deviceInfo;
465
+ deviceInfo = _ref.deviceInfo,
466
+ keyProvider = _ref.keyProvider;
421
467
  var _useState = useState(null),
422
468
  meeting = _useState[0],
423
469
  setMeeting = _useState[1];
@@ -493,6 +539,7 @@ var MeetingProvider = function MeetingProvider(_ref) {
493
539
  var localWebcamOnRef = useRef();
494
540
  var localScreenShareOnRef = useRef();
495
541
  var isRecordingRef = useRef();
542
+ var keyProviderRef = useRef(keyProvider);
496
543
  var configRef = useRef(config);
497
544
  var tokenRef = useRef(token);
498
545
  var joinedOnFirstRender = useRef(false);
@@ -839,6 +886,21 @@ var MeetingProvider = function MeetingProvider(_ref) {
839
886
  }
840
887
  eventEmitter.emit(events['participant-mode-changed'], data);
841
888
  };
889
+ var _handle_media_relay_started = function _handle_media_relay_started(data) {
890
+ eventEmitter.emit(events['media-relay-started'], data);
891
+ };
892
+ var _handle_media_relay_stopped = function _handle_media_relay_stopped(data) {
893
+ eventEmitter.emit(events['media-relay-stopped'], data);
894
+ };
895
+ var _handle_media_relay_error = function _handle_media_relay_error(data) {
896
+ eventEmitter.emit(events['media-relay-error'], data);
897
+ };
898
+ var _handle_media_relay_request_response = function _handle_media_relay_request_response(data) {
899
+ eventEmitter.emit(events['media-relay-request-response'], data);
900
+ };
901
+ var _handle_media_relay_request_received = function _handle_media_relay_request_received(data) {
902
+ eventEmitter.emit(events['media-relay-request-received'], data);
903
+ };
842
904
  var join = function join() {
843
905
  var meeting = VideoSDK && VideoSDK.initMeeting(configRef.current);
844
906
  setMeeting(meeting);
@@ -887,6 +949,11 @@ var MeetingProvider = function MeetingProvider(_ref) {
887
949
  meeting.on('whiteboard-stopped', _handle_whiteboard_stopped);
888
950
  meeting.on('character-joined', _handle_character_joined);
889
951
  meeting.on('character-left', _handle_character_left);
952
+ meeting.on('media-relay-started', _handle_media_relay_started);
953
+ meeting.on('media-relay-stopped', _handle_media_relay_stopped);
954
+ meeting.on('media-relay-error', _handle_media_relay_error);
955
+ meeting.on('media-relay-request-response', _handle_media_relay_request_response);
956
+ meeting.on('media-relay-request-received', _handle_media_relay_request_received);
890
957
  meeting.localParticipant.on('stream-enabled', _handle_localParticipant_stream_enabled);
891
958
  meeting.localParticipant.on('stream-disabled', _handle_localParticipant_stream_disabled);
892
959
  meeting.join();
@@ -1121,8 +1188,27 @@ var MeetingProvider = function MeetingProvider(_ref) {
1121
1188
  meeting.disableAdaptiveSubscription();
1122
1189
  }
1123
1190
  };
1124
- var seekVideo = function seekVideo(_ref8) {
1125
- var currentTime = _ref8.currentTime;
1191
+ var requestMediaRelay = function requestMediaRelay(_ref8) {
1192
+ var destinationMeetingId = _ref8.destinationMeetingId,
1193
+ token = _ref8.token,
1194
+ kinds = _ref8.kinds;
1195
+ var meeting = meetingRef.current;
1196
+ if (meeting) {
1197
+ meeting.requestMediaRelay({
1198
+ destinationMeetingId: destinationMeetingId,
1199
+ token: token,
1200
+ kinds: kinds
1201
+ });
1202
+ }
1203
+ };
1204
+ var stopMediaRelay = function stopMediaRelay(destinationMeetingId) {
1205
+ var meeting = meetingRef.current;
1206
+ if (meeting) {
1207
+ meeting.stopMediaRelay(destinationMeetingId);
1208
+ }
1209
+ };
1210
+ var seekVideo = function seekVideo(_ref9) {
1211
+ var currentTime = _ref9.currentTime;
1126
1212
  var meeting = meetingRef.current;
1127
1213
  if (meeting) {
1128
1214
  meeting.seekVideo({
@@ -1142,9 +1228,9 @@ var MeetingProvider = function MeetingProvider(_ref) {
1142
1228
  meeting.stopLivestream();
1143
1229
  }
1144
1230
  };
1145
- var connectTo = function connectTo(_ref9) {
1146
- var meetingId = _ref9.meetingId,
1147
- payload = _ref9.payload;
1231
+ var connectTo = function connectTo(_ref10) {
1232
+ var meetingId = _ref10.meetingId,
1233
+ payload = _ref10.payload;
1148
1234
  try {
1149
1235
  var _meeting3 = meetingRef.current;
1150
1236
  var _temp = function () {
@@ -1174,6 +1260,7 @@ var MeetingProvider = function MeetingProvider(_ref) {
1174
1260
  };
1175
1261
  var initSDK = function initSDK() {
1176
1262
  VideoSDK.config(tokenRef.current);
1263
+ keyProviderRef.current && VideoSDK.setKeyProvider(keyProviderRef.current);
1177
1264
  if (deviceInfo) {
1178
1265
  VideoSDK.analytics(deviceInfo);
1179
1266
  } else {
@@ -1260,7 +1347,9 @@ var MeetingProvider = function MeetingProvider(_ref) {
1260
1347
  startHls: startHls,
1261
1348
  stopHls: stopHls,
1262
1349
  enableAdaptiveSubscription: enableAdaptiveSubscription,
1263
- disableAdaptiveSubscription: disableAdaptiveSubscription
1350
+ disableAdaptiveSubscription: disableAdaptiveSubscription,
1351
+ requestMediaRelay: requestMediaRelay,
1352
+ stopMediaRelay: stopMediaRelay
1264
1353
  }
1265
1354
  }, children);
1266
1355
  };
@@ -1278,7 +1367,15 @@ var useParticipant = function useParticipant(participantId, _temp) {
1278
1367
  _ref$onStreamPaused = _ref.onStreamPaused,
1279
1368
  onStreamPaused = _ref$onStreamPaused === void 0 ? function () {} : _ref$onStreamPaused,
1280
1369
  _ref$onStreamResumed = _ref.onStreamResumed,
1281
- onStreamResumed = _ref$onStreamResumed === void 0 ? function () {} : _ref$onStreamResumed;
1370
+ onStreamResumed = _ref$onStreamResumed === void 0 ? function () {} : _ref$onStreamResumed,
1371
+ _ref$onProducerAdded = _ref.onProducerAdded,
1372
+ onProducerAdded = _ref$onProducerAdded === void 0 ? function () {} : _ref$onProducerAdded,
1373
+ _ref$onProducerRemove = _ref.onProducerRemoved,
1374
+ onProducerRemoved = _ref$onProducerRemove === void 0 ? function () {} : _ref$onProducerRemove,
1375
+ _ref$onConsumerAdded = _ref.onConsumerAdded,
1376
+ onConsumerAdded = _ref$onConsumerAdded === void 0 ? function () {} : _ref$onConsumerAdded,
1377
+ _ref$onConsumerRemove = _ref.onConsumerRemoved,
1378
+ onConsumerRemoved = _ref$onConsumerRemove === void 0 ? function () {} : _ref$onConsumerRemove;
1282
1379
  var _useState = useState(null),
1283
1380
  webcamStream = _useState[0],
1284
1381
  setwebcamStream = _useState[1];
@@ -1415,6 +1512,9 @@ var useParticipant = function useParticipant(participantId, _temp) {
1415
1512
  var setViewPort = function setViewPort(width, height) {
1416
1513
  participant === null || participant === void 0 ? void 0 : participant.setViewPort(width, height);
1417
1514
  };
1515
+ var setScreenShareQuality = function setScreenShareQuality(quality) {
1516
+ participant === null || participant === void 0 ? void 0 : participant.setScreenShareQuality(quality);
1517
+ };
1418
1518
  var enableMic = function enableMic() {
1419
1519
  participant === null || participant === void 0 ? void 0 : participant.enableMic();
1420
1520
  };
@@ -1469,9 +1569,6 @@ var useParticipant = function useParticipant(participantId, _temp) {
1469
1569
  var stopConsumingMicStreams = function stopConsumingMicStreams() {
1470
1570
  participant === null || participant === void 0 ? void 0 : participant.stopConsumingMicStreams();
1471
1571
  };
1472
- var switchTo = function switchTo(data) {
1473
- return Promise.resolve(participant === null || participant === void 0 ? void 0 : participant.switchTo(data)).then(function () {});
1474
- };
1475
1572
  useEffect(function () {
1476
1573
  var streams = participant === null || participant === void 0 ? void 0 : participant.streams;
1477
1574
  if (streams) {
@@ -1495,6 +1592,18 @@ var useParticipant = function useParticipant(participantId, _temp) {
1495
1592
  });
1496
1593
  participant === null || participant === void 0 ? void 0 : participant.on('media-status-changed', _handleMediaStatusChanged);
1497
1594
  participant === null || participant === void 0 ? void 0 : participant.on('video-quality-changed', _handleVideoQualityChanged);
1595
+ participant === null || participant === void 0 ? void 0 : participant.on('producer-added', function (data) {
1596
+ onProducerAdded(data);
1597
+ });
1598
+ participant === null || participant === void 0 ? void 0 : participant.on('producer-removed', function (data) {
1599
+ onProducerRemoved(data);
1600
+ });
1601
+ participant === null || participant === void 0 ? void 0 : participant.on('consumer-added', function (data) {
1602
+ onConsumerAdded(data);
1603
+ });
1604
+ participant === null || participant === void 0 ? void 0 : participant.on('consumer-removed', function (data) {
1605
+ onConsumerRemoved(data);
1606
+ });
1498
1607
  eventEmitter.on(events['participant-mode-changed'], _handleParticipantModeChanged);
1499
1608
  return function () {
1500
1609
  participant === null || participant === void 0 ? void 0 : participant.off('stream-enabled', _handleStreamEnabled);
@@ -1525,6 +1634,7 @@ var useParticipant = function useParticipant(participantId, _temp) {
1525
1634
  stopConsumingMicStreams: stopConsumingMicStreams,
1526
1635
  stopConsumingWebcamStreams: stopConsumingWebcamStreams,
1527
1636
  setQuality: setQuality,
1637
+ setScreenShareQuality: setScreenShareQuality,
1528
1638
  setViewPort: setViewPort,
1529
1639
  enableMic: enableMic,
1530
1640
  disableMic: disableMic,
@@ -1534,7 +1644,6 @@ var useParticipant = function useParticipant(participantId, _temp) {
1534
1644
  pin: pin,
1535
1645
  unpin: unpin,
1536
1646
  remove: remove,
1537
- switchTo: switchTo,
1538
1647
  getAudioStats: getAudioStats,
1539
1648
  getVideoStats: getVideoStats,
1540
1649
  getShareStats: getShareStats,
@@ -2148,12 +2257,15 @@ var createScreenShareVideoTrack = function createScreenShareVideoTrack(_ref2) {
2148
2257
  _ref2$optimizationMod = _ref2.optimizationMode,
2149
2258
  optimizationMode = _ref2$optimizationMod === void 0 ? undefined : _ref2$optimizationMod,
2150
2259
  _ref2$withAudio = _ref2.withAudio,
2151
- withAudio = _ref2$withAudio === void 0 ? 'enable' : _ref2$withAudio;
2260
+ withAudio = _ref2$withAudio === void 0 ? 'enable' : _ref2$withAudio,
2261
+ _ref2$multiStream = _ref2.multiStream,
2262
+ multiStream = _ref2$multiStream === void 0 ? false : _ref2$multiStream;
2152
2263
  try {
2153
2264
  return Promise.resolve(VideoSDK.createScreenShareVideoTrack({
2154
2265
  encoderConfig: encoderConfig,
2155
2266
  optimizationMode: optimizationMode,
2156
- withAudio: withAudio
2267
+ withAudio: withAudio,
2268
+ multiStream: multiStream
2157
2269
  }));
2158
2270
  } catch (e) {
2159
2271
  return Promise.reject(e);
@@ -2204,27 +2316,28 @@ var withAdaptiveObservers = function withAdaptiveObservers(VideoPlayerComponent)
2204
2316
  var resizeObserverRef = useRef(null);
2205
2317
  var _useParticipant = useParticipant(participantId),
2206
2318
  participant = _useParticipant.participant;
2319
+ var _useMeeting = useMeeting(),
2320
+ localParticipant = _useMeeting.localParticipant;
2207
2321
  useEffect(function () {
2208
- if (type === 'share' || !ref.current || !participant) return;
2322
+ if (type === 'share' || !ref.current || !participant || participantId === localParticipant.id) return;
2209
2323
  var element = ref.current;
2210
2324
  if (!element || !participant) return;
2211
2325
  if (observerRef.current) observerRef.current.disconnect();
2212
2326
  var handleIntersectionChange = debounce(function (entries) {
2213
- for (var _iterator = _createForOfIteratorHelperLoose(entries), _step; !(_step = _iterator()).done;) {
2214
- var entry = _step.value;
2215
- if (entry.intersectionRatio > 0) {
2216
- for (var _iterator2 = _createForOfIteratorHelperLoose(participant.streams.values()), _step2; !(_step2 = _iterator2()).done;) {
2217
- var stream = _step2.value;
2218
- if (stream.kind === 'video' && stream.pausedBy !== 'SUB_MANAGER') {
2219
- stream.resume();
2220
- }
2327
+ if (!Array.isArray(entries) || entries.length === 0) return;
2328
+ var entry = entries[entries.length - 1];
2329
+ if (entry.intersectionRatio > 0) {
2330
+ for (var _iterator = _createForOfIteratorHelperLoose(participant.streams.values()), _step; !(_step = _iterator()).done;) {
2331
+ var stream = _step.value;
2332
+ if (stream.kind === 'video' && stream.pausedBy !== 'SUB_MANAGER') {
2333
+ stream.resume();
2221
2334
  }
2222
- } else {
2223
- for (var _iterator3 = _createForOfIteratorHelperLoose(participant.streams.values()), _step3; !(_step3 = _iterator3()).done;) {
2224
- var _stream = _step3.value;
2225
- if (_stream.kind === 'video') {
2226
- _stream.pause();
2227
- }
2335
+ }
2336
+ } else {
2337
+ for (var _iterator2 = _createForOfIteratorHelperLoose(participant.streams.values()), _step2; !(_step2 = _iterator2()).done;) {
2338
+ var _stream = _step2.value;
2339
+ if (_stream.kind === 'video') {
2340
+ _stream.pause();
2228
2341
  }
2229
2342
  }
2230
2343
  }
@@ -2285,6 +2398,9 @@ var VideoSDKPlayer = forwardRef(function (_ref5, ref) {
2285
2398
  var mediaStream = new MediaStream();
2286
2399
  mediaStream.addTrack(stream.track);
2287
2400
  videoRef.current.srcObject = mediaStream;
2401
+ videoRef.current.setAttribute('playsinline', '');
2402
+ videoRef.current.setAttribute('x5-playsinline', '');
2403
+ videoRef.current.setAttribute('webkit-playsinline', '');
2288
2404
  videoRef.current.play()["catch"](function (error) {
2289
2405
  return console.error('videoRef.current.play() failed', error);
2290
2406
  });