@stream-io/video-react-sdk 0.0.1-alpha.47 → 0.0.1-alpha.48
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/CHANGELOG.md +9 -0
- package/dist/src/components/Notification/SpeakingWhileMutedNotification.js +4 -2
- package/dist/src/components/Notification/SpeakingWhileMutedNotification.js.map +1 -1
- package/dist/src/components/Video/VideoPreview.js +1 -1
- package/dist/src/components/Video/VideoPreview.js.map +1 -1
- package/dist/src/core/contexts/MediaDevicesContext.d.ts +3 -2
- package/dist/src/core/hooks/useAudioPublisher.js +9 -3
- package/dist/src/core/hooks/useAudioPublisher.js.map +1 -1
- package/dist/src/core/hooks/useVideoPublisher.js +35 -6
- package/dist/src/core/hooks/useVideoPublisher.js.map +1 -1
- package/package.json +5 -5
- package/src/components/Notification/SpeakingWhileMutedNotification.tsx +9 -8
- package/src/components/Video/VideoPreview.tsx +1 -1
- package/src/core/contexts/MediaDevicesContext.tsx +2 -2
- package/src/core/hooks/useAudioPublisher.ts +9 -3
- package/src/core/hooks/useVideoPublisher.ts +36 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [0.0.1-alpha.48](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.47...@stream-io/video-react-sdk-0.0.1-alpha.48) (2023-05-17)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* Support for server-side driven stream resolution ([#516](https://github.com/GetStream/stream-video-js/issues/516)) ([cae1169](https://github.com/GetStream/stream-video-js/commit/cae11695fe4aa11bd5e168b00ffd6ea35e2524a2))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
## [0.0.1-alpha.47](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.1-alpha.46...@stream-io/video-react-sdk-0.0.1-alpha.47) (2023-05-17)
|
|
6
15
|
|
|
7
16
|
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from 'react';
|
|
3
3
|
import { createSoundDetector, SfuModels } from '@stream-io/video-client';
|
|
4
4
|
import { useLocalParticipant } from '@stream-io/video-react-bindings';
|
|
5
|
-
import { useMediaDevices } from '../../core
|
|
5
|
+
import { useMediaDevices } from '../../core';
|
|
6
6
|
import { Notification } from './Notification';
|
|
7
7
|
export const SpeakingWhileMutedNotification = ({ children }) => {
|
|
8
8
|
const localParticipant = useLocalParticipant();
|
|
@@ -14,7 +14,9 @@ export const SpeakingWhileMutedNotification = ({ children }) => {
|
|
|
14
14
|
// do nothing when not muted
|
|
15
15
|
if (!isAudioMute)
|
|
16
16
|
return;
|
|
17
|
-
const disposeSoundDetector = getAudioStream(
|
|
17
|
+
const disposeSoundDetector = getAudioStream({
|
|
18
|
+
deviceId: audioDeviceId,
|
|
19
|
+
}).then((audioStream) => createSoundDetector(audioStream, (isSpeechDetected) => {
|
|
18
20
|
setIsSpeakingWhileMuted((isNotified) => isNotified ? isNotified : isSpeechDetected);
|
|
19
21
|
}));
|
|
20
22
|
disposeSoundDetector.catch((err) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeakingWhileMutedNotification.js","sourceRoot":"","sources":["../../../../src/components/Notification/SpeakingWhileMutedNotification.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"SpeakingWhileMutedNotification.js","sourceRoot":"","sources":["../../../../src/components/Notification/SpeakingWhileMutedNotification.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAAE,QAAQ,EAAgB,EAAE,EAAE;IAC3E,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,EAAE,cAAc,EAAE,GAAG,eAAe,EAAE,CAAC;IAE7C,MAAM,WAAW,GAAG,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAA,CAAC;IACF,MAAM,aAAa,GAAG,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,aAAa,CAAC;IACtD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE,SAAS,CAAC,GAAG,EAAE;QACb,4BAA4B;QAC5B,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,oBAAoB,GAAG,cAAc,CAAC;YAC1C,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CACtB,mBAAmB,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAAE,EAAE;YACpD,uBAAuB,CAAC,CAAC,UAAU,EAAE,EAAE,CACrC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAC3C,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QACF,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,oBAAoB;iBACjB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;iBAC5B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACL,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,oBAAoB;YAAE,OAAO;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3B,OAAO,CACL,KAAC,YAAY,kBACX,OAAO,EAAC,iCAAiC,EACzC,SAAS,EAAE,oBAAoB,gBAE9B,QAAQ,IACI,CAChB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -25,7 +25,7 @@ export const VideoPreview = ({ mirror = true, DisabledVideoPreview = DefaultDisa
|
|
|
25
25
|
useEffect(() => {
|
|
26
26
|
if (!initialVideoState.enabled)
|
|
27
27
|
return;
|
|
28
|
-
getVideoStream(selectedVideoDeviceId)
|
|
28
|
+
getVideoStream({ deviceId: selectedVideoDeviceId })
|
|
29
29
|
.then((s) => {
|
|
30
30
|
setStream((previousStream) => {
|
|
31
31
|
if (previousStream) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPreview.js","sourceRoot":"","sources":["../../../../src/components/Video/VideoPreview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAGL,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,4BAA4B,EAC5B,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,2BAA2B,GAAG,GAAG,EAAE;IACvC,OAAO,8CAA4B,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;IAClC,OAAO,4CAA0B,CAAC;AACpC,CAAC,CAAC;AAKF,MAAM,wBAAwB,GAAG,CAAC,EAAE,OAAO,EAA0B,EAAE,EAAE;IACvE,OAAO,CACL,8BACE,mCAAiB,EACjB,sBAAI,OAAO,IAAI,2BAA2B,GAAK,IAC9C,CACJ,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,MAAM,GAAG,IAAI,EACb,oBAAoB,GAAG,2BAA2B,EAClD,eAAe,GAAG,sBAAsB,EACxC,qBAAqB,GAAG,gBAAgB,EACxC,iBAAiB,GAAG,wBAAwB,GAC1B,EAAE,EAAE;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAe,CAAC;IACpD,MAAM,EACJ,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,GACrB,GAAG,eAAe,EAAE,CAAC;IACtB,gEAAgE;IAChE,gFAAgF;IAChF,8DAA8D;IAC9D,4BAA4B,CAAC,GAAG,EAAE,CAChC,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAC3C,CAAC;IACF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,CAAC,OAAO;YAAE,OAAO;QAEvC,cAAc,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPreview.js","sourceRoot":"","sources":["../../../../src/components/Video/VideoPreview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { getAudioStream, getVideoStream } from '@stream-io/video-client';
|
|
2
3
|
type EnabledStateType = 'starting' | 'playing';
|
|
3
4
|
type DisabledStateType = 'uninitialized' | 'stopped';
|
|
4
5
|
type EnabledDeviceState<T extends EnabledStateType> = {
|
|
@@ -32,8 +33,8 @@ export declare const DEVICE_STATE: {
|
|
|
32
33
|
*/
|
|
33
34
|
export type MediaDevicesContextAPI = {
|
|
34
35
|
disposeOfMediaStream: (stream: MediaStream) => void;
|
|
35
|
-
getAudioStream:
|
|
36
|
-
getVideoStream:
|
|
36
|
+
getAudioStream: typeof getAudioStream;
|
|
37
|
+
getVideoStream: typeof getVideoStream;
|
|
37
38
|
isAudioOutputChangeSupported: boolean;
|
|
38
39
|
initialAudioEnabled: boolean;
|
|
39
40
|
initialVideoState: DeviceState;
|
|
@@ -29,7 +29,9 @@ export const useAudioPublisher = ({ initialAudioMuted, audioDeviceId, }) => {
|
|
|
29
29
|
throw new Error(`No permission to publish audio`);
|
|
30
30
|
}
|
|
31
31
|
try {
|
|
32
|
-
const audioStream = yield getAudioStream(
|
|
32
|
+
const audioStream = yield getAudioStream({
|
|
33
|
+
deviceId: audioDeviceId,
|
|
34
|
+
});
|
|
33
35
|
yield call.publishAudioStream(audioStream);
|
|
34
36
|
}
|
|
35
37
|
catch (e) {
|
|
@@ -69,12 +71,16 @@ export const useAudioPublisher = ({ initialAudioMuted, audioDeviceId, }) => {
|
|
|
69
71
|
// We need to stop the original track first in order
|
|
70
72
|
// we can retrieve the new default device stream
|
|
71
73
|
track.stop();
|
|
72
|
-
const audioStream = yield getAudioStream(
|
|
74
|
+
const audioStream = yield getAudioStream({
|
|
75
|
+
deviceId: 'default',
|
|
76
|
+
});
|
|
73
77
|
yield call.publishAudioStream(audioStream);
|
|
74
78
|
}));
|
|
75
79
|
const handleTrackEnded = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
80
|
if (selectedAudioDeviceId === audioDeviceId) {
|
|
77
|
-
const audioStream = yield getAudioStream(
|
|
81
|
+
const audioStream = yield getAudioStream({
|
|
82
|
+
deviceId: audioDeviceId,
|
|
83
|
+
});
|
|
78
84
|
yield call.publishAudioStream(audioStream);
|
|
79
85
|
}
|
|
80
86
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useAudioPublisher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAUzC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,iBAAiB,EACjB,aAAa,GACM,EAAE,EAAE;IACvB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAExC,MAAM,iBAAiB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAS,EAAE;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useAudioPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useAudioPublisher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AAUzC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,iBAAiB,EACjB,aAAa,GACM,EAAE,EAAE;IACvB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAExC,MAAM,iBAAiB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAS,EAAE;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;gBACvC,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;SAClD;IACH,CAAC,CAAA,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,YAAY,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE;YAC9D,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE1D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,MAAM,YAAY,GAAG,+BAA+B,CAClD,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,aAAa,CAAC,CAAC,CACrD,CAAC,SAAS,CAAC,GAAS,EAAE;YACrB,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAA,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,CAAA,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAErE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACzD,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;QAE3D,MAAM,sBAAsB,GAAG,+BAA+B,EAAE,CAAC,SAAS,CACxE,GAAS,EAAE;YACT,IACE,CAAC,CACC,IAAI;gBACJ,WAAW,CAAC,WAAW;gBACvB,qBAAqB,KAAK,SAAS,CACpC;gBAED,OAAO;YACT,oDAAoD;YACpD,gDAAgD;YAChD,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;gBACvC,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7C,CAAC,CAAA,CACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,GAAS,EAAE;YAClC,IAAI,qBAAqB,KAAK,aAAa,EAAE;gBAC3C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;oBACvC,QAAQ,EAAE,aAAa;iBACxB,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;aAC5C;QACH,CAAC,CAAA,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;YACrD,sBAAsB,CAAC,WAAW,EAAE,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvE,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC"}
|
|
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { useCallback, useEffect } from 'react';
|
|
11
11
|
import { map } from 'rxjs';
|
|
12
|
-
import { CallingState, getVideoStream, OwnCapability, SfuModels, watchForAddedDefaultVideoDevice, watchForDisconnectedVideoDevice, } from '@stream-io/video-client';
|
|
13
|
-
import { useCall, useCallCallingState, useCallState, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
12
|
+
import { CallingState, getVideoStream, OwnCapability, SfuModels, VideoSettingsCameraFacingEnum, watchForAddedDefaultVideoDevice, watchForDisconnectedVideoDevice, } from '@stream-io/video-client';
|
|
13
|
+
import { useCall, useCallCallingState, useCallMetadata, useCallState, useLocalParticipant, } from '@stream-io/video-react-bindings';
|
|
14
14
|
import { useDebugPreferredVideoCodec } from '../../components/Debug/useIsDebugMode';
|
|
15
15
|
/**
|
|
16
16
|
* @internal
|
|
@@ -24,6 +24,9 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
|
|
|
24
24
|
const { localParticipant$ } = callState;
|
|
25
25
|
const preferredCodec = useDebugPreferredVideoCodec();
|
|
26
26
|
const isPublishingVideo = participant === null || participant === void 0 ? void 0 : participant.publishedTracks.includes(SfuModels.TrackType.VIDEO);
|
|
27
|
+
const metadata = useCallMetadata();
|
|
28
|
+
const videoSettings = metadata === null || metadata === void 0 ? void 0 : metadata.settings.video;
|
|
29
|
+
const targetResolution = videoSettings === null || videoSettings === void 0 ? void 0 : videoSettings.target_resolution;
|
|
27
30
|
const publishVideoStream = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
31
|
if (!call)
|
|
29
32
|
return;
|
|
@@ -31,13 +34,25 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
|
|
|
31
34
|
throw new Error(`No permission to publish video`);
|
|
32
35
|
}
|
|
33
36
|
try {
|
|
34
|
-
const videoStream = yield getVideoStream(
|
|
37
|
+
const videoStream = yield getVideoStream({
|
|
38
|
+
deviceId: videoDeviceId,
|
|
39
|
+
width: targetResolution === null || targetResolution === void 0 ? void 0 : targetResolution.width,
|
|
40
|
+
height: targetResolution === null || targetResolution === void 0 ? void 0 : targetResolution.height,
|
|
41
|
+
facingMode: toFacingMode(videoSettings === null || videoSettings === void 0 ? void 0 : videoSettings.camera_facing),
|
|
42
|
+
});
|
|
35
43
|
yield call.publishVideoStream(videoStream, { preferredCodec });
|
|
36
44
|
}
|
|
37
45
|
catch (e) {
|
|
38
46
|
console.log('Failed to publish video stream', e);
|
|
39
47
|
}
|
|
40
|
-
}), [
|
|
48
|
+
}), [
|
|
49
|
+
call,
|
|
50
|
+
preferredCodec,
|
|
51
|
+
targetResolution === null || targetResolution === void 0 ? void 0 : targetResolution.height,
|
|
52
|
+
targetResolution === null || targetResolution === void 0 ? void 0 : targetResolution.width,
|
|
53
|
+
videoDeviceId,
|
|
54
|
+
videoSettings === null || videoSettings === void 0 ? void 0 : videoSettings.camera_facing,
|
|
55
|
+
]);
|
|
41
56
|
useEffect(() => {
|
|
42
57
|
if (callingState === CallingState.JOINED && !initialVideoMuted) {
|
|
43
58
|
publishVideoStream().catch((e) => {
|
|
@@ -71,12 +86,16 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
|
|
|
71
86
|
// We need to stop the original track first in order
|
|
72
87
|
// we can retrieve the new default device stream
|
|
73
88
|
track.stop();
|
|
74
|
-
const videoStream = yield getVideoStream(
|
|
89
|
+
const videoStream = yield getVideoStream({
|
|
90
|
+
deviceId: 'default',
|
|
91
|
+
});
|
|
75
92
|
yield call.publishVideoStream(videoStream);
|
|
76
93
|
}));
|
|
77
94
|
const handleTrackEnded = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
95
|
if (selectedVideoDeviceId === videoDeviceId) {
|
|
79
|
-
const videoStream = yield getVideoStream(
|
|
96
|
+
const videoStream = yield getVideoStream({
|
|
97
|
+
deviceId: videoDeviceId,
|
|
98
|
+
});
|
|
80
99
|
yield call.publishVideoStream(videoStream);
|
|
81
100
|
}
|
|
82
101
|
});
|
|
@@ -88,4 +107,14 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
|
|
|
88
107
|
}, [videoDeviceId, call, participant === null || participant === void 0 ? void 0 : participant.videoStream, isPublishingVideo]);
|
|
89
108
|
return publishVideoStream;
|
|
90
109
|
};
|
|
110
|
+
const toFacingMode = (value) => {
|
|
111
|
+
switch (value) {
|
|
112
|
+
case VideoSettingsCameraFacingEnum.FRONT:
|
|
113
|
+
return 'user';
|
|
114
|
+
case VideoSettingsCameraFacingEnum.BACK:
|
|
115
|
+
return 'environment';
|
|
116
|
+
default:
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
91
120
|
//# sourceMappingURL=useVideoPublisher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVideoPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useVideoPublisher.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,+BAA+B,EAC/B,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAUpF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,iBAAiB,EACjB,aAAa,GACM,EAAE,EAAE;IACvB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAExC,MAAM,cAAc,GAAG,2BAA2B,EAAE,CAAC;IACrD,MAAM,iBAAiB,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,CAAC,QAAQ,CAC7D,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1B,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAS,EAAE;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;YACpE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;SACnD;QACD,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useVideoPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useVideoPublisher.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"@floating-ui/react": "^0.22.0",
|
|
26
26
|
"@nivo/core": "^0.80.0",
|
|
27
27
|
"@nivo/line": "^0.80.0",
|
|
28
|
-
"@stream-io/i18n": "^0.0.1-alpha.
|
|
29
|
-
"@stream-io/video-client": "^0.0.1-alpha.
|
|
30
|
-
"@stream-io/video-react-bindings": "^0.0.1-alpha.
|
|
28
|
+
"@stream-io/i18n": "^0.0.1-alpha.32",
|
|
29
|
+
"@stream-io/video-client": "^0.0.1-alpha.156",
|
|
30
|
+
"@stream-io/video-react-bindings": "^0.0.1-alpha.43",
|
|
31
31
|
"clsx": "^1.2.1",
|
|
32
32
|
"rxjs": "~7.8.1"
|
|
33
33
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"react-dom": "^18.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@stream-io/video-styling": "^0.0.1-alpha.
|
|
39
|
+
"@stream-io/video-styling": "^0.0.1-alpha.26",
|
|
40
40
|
"@types/rimraf": "^3.0.2",
|
|
41
41
|
"react": "^18.2.0",
|
|
42
42
|
"react-dom": "^18.2.0",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"typedoc": "^0.24.7",
|
|
46
46
|
"typescript": "^4.9.5"
|
|
47
47
|
},
|
|
48
|
-
"version": "0.0.1-alpha.
|
|
48
|
+
"version": "0.0.1-alpha.48"
|
|
49
49
|
}
|
|
@@ -2,7 +2,7 @@ import { useEffect, useState } from 'react';
|
|
|
2
2
|
import { createSoundDetector, SfuModels } from '@stream-io/video-client';
|
|
3
3
|
import { useLocalParticipant } from '@stream-io/video-react-bindings';
|
|
4
4
|
|
|
5
|
-
import { useMediaDevices } from '../../core
|
|
5
|
+
import { useMediaDevices } from '../../core';
|
|
6
6
|
import { Notification } from './Notification';
|
|
7
7
|
import { ChildrenOnly } from '../../types';
|
|
8
8
|
|
|
@@ -18,13 +18,14 @@ export const SpeakingWhileMutedNotification = ({ children }: ChildrenOnly) => {
|
|
|
18
18
|
useEffect(() => {
|
|
19
19
|
// do nothing when not muted
|
|
20
20
|
if (!isAudioMute) return;
|
|
21
|
-
const disposeSoundDetector = getAudioStream(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
const disposeSoundDetector = getAudioStream({
|
|
22
|
+
deviceId: audioDeviceId,
|
|
23
|
+
}).then((audioStream) =>
|
|
24
|
+
createSoundDetector(audioStream, (isSpeechDetected) => {
|
|
25
|
+
setIsSpeakingWhileMuted((isNotified) =>
|
|
26
|
+
isNotified ? isNotified : isSpeechDetected,
|
|
27
|
+
);
|
|
28
|
+
}),
|
|
28
29
|
);
|
|
29
30
|
disposeSoundDetector.catch((err) => {
|
|
30
31
|
console.error('Error while creating sound detector', err);
|
|
@@ -69,7 +69,7 @@ export const VideoPreview = ({
|
|
|
69
69
|
useEffect(() => {
|
|
70
70
|
if (!initialVideoState.enabled) return;
|
|
71
71
|
|
|
72
|
-
getVideoStream(selectedVideoDeviceId)
|
|
72
|
+
getVideoStream({ deviceId: selectedVideoDeviceId })
|
|
73
73
|
.then((s) => {
|
|
74
74
|
setStream((previousStream) => {
|
|
75
75
|
if (previousStream) {
|
|
@@ -88,8 +88,8 @@ const DEFAULT_DEVICE_ID = 'default';
|
|
|
88
88
|
*/
|
|
89
89
|
export type MediaDevicesContextAPI = {
|
|
90
90
|
disposeOfMediaStream: (stream: MediaStream) => void;
|
|
91
|
-
getAudioStream:
|
|
92
|
-
getVideoStream:
|
|
91
|
+
getAudioStream: typeof getAudioStream;
|
|
92
|
+
getVideoStream: typeof getVideoStream;
|
|
93
93
|
isAudioOutputChangeSupported: boolean;
|
|
94
94
|
initialAudioEnabled: boolean;
|
|
95
95
|
initialVideoState: DeviceState;
|
|
@@ -47,7 +47,9 @@ export const useAudioPublisher = ({
|
|
|
47
47
|
throw new Error(`No permission to publish audio`);
|
|
48
48
|
}
|
|
49
49
|
try {
|
|
50
|
-
const audioStream = await getAudioStream(
|
|
50
|
+
const audioStream = await getAudioStream({
|
|
51
|
+
deviceId: audioDeviceId,
|
|
52
|
+
});
|
|
51
53
|
await call.publishAudioStream(audioStream);
|
|
52
54
|
} catch (e) {
|
|
53
55
|
console.log('Failed to publish audio stream', e);
|
|
@@ -95,14 +97,18 @@ export const useAudioPublisher = ({
|
|
|
95
97
|
// We need to stop the original track first in order
|
|
96
98
|
// we can retrieve the new default device stream
|
|
97
99
|
track.stop();
|
|
98
|
-
const audioStream = await getAudioStream(
|
|
100
|
+
const audioStream = await getAudioStream({
|
|
101
|
+
deviceId: 'default',
|
|
102
|
+
});
|
|
99
103
|
await call.publishAudioStream(audioStream);
|
|
100
104
|
},
|
|
101
105
|
);
|
|
102
106
|
|
|
103
107
|
const handleTrackEnded = async () => {
|
|
104
108
|
if (selectedAudioDeviceId === audioDeviceId) {
|
|
105
|
-
const audioStream = await getAudioStream(
|
|
109
|
+
const audioStream = await getAudioStream({
|
|
110
|
+
deviceId: audioDeviceId,
|
|
111
|
+
});
|
|
106
112
|
await call.publishAudioStream(audioStream);
|
|
107
113
|
}
|
|
108
114
|
};
|
|
@@ -5,12 +5,14 @@ import {
|
|
|
5
5
|
getVideoStream,
|
|
6
6
|
OwnCapability,
|
|
7
7
|
SfuModels,
|
|
8
|
+
VideoSettingsCameraFacingEnum,
|
|
8
9
|
watchForAddedDefaultVideoDevice,
|
|
9
10
|
watchForDisconnectedVideoDevice,
|
|
10
11
|
} from '@stream-io/video-client';
|
|
11
12
|
import {
|
|
12
13
|
useCall,
|
|
13
14
|
useCallCallingState,
|
|
15
|
+
useCallMetadata,
|
|
14
16
|
useCallState,
|
|
15
17
|
useLocalParticipant,
|
|
16
18
|
} from '@stream-io/video-react-bindings';
|
|
@@ -43,18 +45,33 @@ export const useVideoPublisher = ({
|
|
|
43
45
|
SfuModels.TrackType.VIDEO,
|
|
44
46
|
);
|
|
45
47
|
|
|
48
|
+
const metadata = useCallMetadata();
|
|
49
|
+
const videoSettings = metadata?.settings.video;
|
|
50
|
+
const targetResolution = videoSettings?.target_resolution;
|
|
46
51
|
const publishVideoStream = useCallback(async () => {
|
|
47
52
|
if (!call) return;
|
|
48
53
|
if (!call.permissionsContext.hasPermission(OwnCapability.SEND_VIDEO)) {
|
|
49
54
|
throw new Error(`No permission to publish video`);
|
|
50
55
|
}
|
|
51
56
|
try {
|
|
52
|
-
const videoStream = await getVideoStream(
|
|
57
|
+
const videoStream = await getVideoStream({
|
|
58
|
+
deviceId: videoDeviceId,
|
|
59
|
+
width: targetResolution?.width,
|
|
60
|
+
height: targetResolution?.height,
|
|
61
|
+
facingMode: toFacingMode(videoSettings?.camera_facing),
|
|
62
|
+
});
|
|
53
63
|
await call.publishVideoStream(videoStream, { preferredCodec });
|
|
54
64
|
} catch (e) {
|
|
55
65
|
console.log('Failed to publish video stream', e);
|
|
56
66
|
}
|
|
57
|
-
}, [
|
|
67
|
+
}, [
|
|
68
|
+
call,
|
|
69
|
+
preferredCodec,
|
|
70
|
+
targetResolution?.height,
|
|
71
|
+
targetResolution?.width,
|
|
72
|
+
videoDeviceId,
|
|
73
|
+
videoSettings?.camera_facing,
|
|
74
|
+
]);
|
|
58
75
|
|
|
59
76
|
useEffect(() => {
|
|
60
77
|
if (callingState === CallingState.JOINED && !initialVideoMuted) {
|
|
@@ -97,14 +114,18 @@ export const useVideoPublisher = ({
|
|
|
97
114
|
// We need to stop the original track first in order
|
|
98
115
|
// we can retrieve the new default device stream
|
|
99
116
|
track.stop();
|
|
100
|
-
const videoStream = await getVideoStream(
|
|
117
|
+
const videoStream = await getVideoStream({
|
|
118
|
+
deviceId: 'default',
|
|
119
|
+
});
|
|
101
120
|
await call.publishVideoStream(videoStream);
|
|
102
121
|
},
|
|
103
122
|
);
|
|
104
123
|
|
|
105
124
|
const handleTrackEnded = async () => {
|
|
106
125
|
if (selectedVideoDeviceId === videoDeviceId) {
|
|
107
|
-
const videoStream = await getVideoStream(
|
|
126
|
+
const videoStream = await getVideoStream({
|
|
127
|
+
deviceId: videoDeviceId,
|
|
128
|
+
});
|
|
108
129
|
await call.publishVideoStream(videoStream);
|
|
109
130
|
}
|
|
110
131
|
};
|
|
@@ -118,3 +139,14 @@ export const useVideoPublisher = ({
|
|
|
118
139
|
|
|
119
140
|
return publishVideoStream;
|
|
120
141
|
};
|
|
142
|
+
|
|
143
|
+
const toFacingMode = (value: VideoSettingsCameraFacingEnum | undefined) => {
|
|
144
|
+
switch (value) {
|
|
145
|
+
case VideoSettingsCameraFacingEnum.FRONT:
|
|
146
|
+
return 'user';
|
|
147
|
+
case VideoSettingsCameraFacingEnum.BACK:
|
|
148
|
+
return 'environment';
|
|
149
|
+
default:
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
};
|