diff --git a/src/media/local-video-stream.spec.ts b/src/media/local-video-stream.spec.ts index 657b668..7152fe6 100644 --- a/src/media/local-video-stream.spec.ts +++ b/src/media/local-video-stream.spec.ts @@ -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'); @@ -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); }); diff --git a/src/media/local-video-stream.ts b/src/media/local-video-stream.ts index eedd655..31c8eb6 100644 --- a/src/media/local-video-stream.ts +++ b/src/media/local-video-stream.ts @@ -1,3 +1,4 @@ +import { AddEvents, TypedEvent, WithEventsDummyType } from '@webex/ts-events'; import { logger } from '../util/logger'; import { LocalStream, LocalStreamEventNames } from './local-stream'; @@ -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. * @@ -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); + } } /** @@ -65,3 +83,9 @@ export class LocalVideoStream extends LocalStream { return activeSimulcastLayersNumber; } } + +export const LocalVideoStream = AddEvents( + _LocalVideoStream +); + +export type LocalVideoStream = _LocalVideoStream & WithEventsDummyType;