Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion src/media/local-video-stream.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import { createBrowserMock } from '../mocks/create-browser-mock';
import MediaStreamStub from '../mocks/media-stream-stub';
import { mocked } from '../mocks/mock';
import { LocalStreamEventNames } from './local-stream';
import { LocalVideoStream } from './local-video-stream';
import {
LocalVideoStream,
LocalVideoStreamEventNames,
VideoContentHint,
} from './local-video-stream';

jest.mock('../mocks/media-stream-stub');

Expand All @@ -28,12 +32,20 @@ describe('localVideoStream', () => {
// eslint-disable-next-line no-console
console.log('stream constraints changed');
});
videoStream.on(
LocalVideoStreamEventNames.ContentHintChange,
(contentHint: VideoContentHint) => {
// eslint-disable-next-line no-console
console.log(`stream contentHint changed to ${contentHint}`);
}
);

videoStream.setUserMuted(true);
videoStream.applyConstraints({
height: 720,
width: 1280,
});
videoStream.contentHint = 'motion';

expect(1).toBe(1);
});
Expand Down
28 changes: 26 additions & 2 deletions src/media/local-video-stream.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { AddEvents, TypedEvent, WithEventsDummyType } from '@webex/ts-events';
import { logger } from '../util/logger';
import { LocalStream, LocalStreamEventNames } from './local-stream';

Expand All @@ -12,10 +13,24 @@ export type AppliableVideoConstraints = Pick<
*/
export type VideoContentHint = 'motion' | 'detail' | 'text' | '';

export enum LocalVideoStreamEventNames {
ContentHintChange = 'content-hint-change',
}

interface LocalVideoStreamEvents {
[LocalVideoStreamEventNames.ContentHintChange]: TypedEvent<
(contentHint: VideoContentHint) => void
>;
}

/**
* A video LocalStream.
*/
export class LocalVideoStream extends LocalStream {
class _LocalVideoStream extends LocalStream {
[LocalVideoStreamEventNames.ContentHintChange] = new TypedEvent<
(contentHint: VideoContentHint) => void
>();

/**
* Apply constraints to the stream.
*
Expand Down Expand Up @@ -44,7 +59,10 @@ export class LocalVideoStream extends LocalStream {
* @param hint - The content hint to set.
*/
set contentHint(hint: VideoContentHint) {
this.inputTrack.contentHint = hint;
if (this.inputTrack.contentHint !== hint) {
this.inputTrack.contentHint = hint;
this[LocalVideoStreamEventNames.ContentHintChange].emit(hint);
}
}

/**
Expand All @@ -65,3 +83,9 @@ export class LocalVideoStream extends LocalStream {
return activeSimulcastLayersNumber;
}
}

export const LocalVideoStream = AddEvents<typeof _LocalVideoStream, LocalVideoStreamEvents>(
_LocalVideoStream
);

export type LocalVideoStream = _LocalVideoStream & WithEventsDummyType<LocalVideoStreamEvents>;