|
1 | 1 | import { useCallback, useEffect, useState } from 'react' |
2 | 2 | import { LocalSession } from '../session/localSession' |
3 | 3 | import { RemoteMediaStreams } from '../types/media' |
4 | | -import { DEFAULT_VIDEO_JITTER_CONFIG, normalizeVideoJitterConfig, type VideoJitterConfig } from '../types/jitterBuffer' |
| 4 | +import { |
| 5 | + DEFAULT_VIDEO_JITTER_CONFIG, |
| 6 | + normalizeVideoJitterConfig, |
| 7 | + type VideoJitterConfig, |
| 8 | + DEFAULT_AUDIO_JITTER_CONFIG, |
| 9 | + normalizeAudioJitterConfig, |
| 10 | + type AudioJitterConfig |
| 11 | +} from '../types/jitterBuffer' |
5 | 12 | import { |
6 | 13 | DEFAULT_VIDEO_ENCODING_SETTINGS, |
7 | 14 | VIDEO_BITRATE_OPTIONS, |
@@ -33,6 +40,8 @@ interface UseCallMediaResult { |
33 | 40 | toggleMicrophone: () => Promise<boolean> |
34 | 41 | videoJitterConfigs: Map<string, VideoJitterConfig> |
35 | 42 | setVideoJitterBufferConfig: (userId: string, config: Partial<VideoJitterConfig>) => void |
| 43 | + audioJitterConfigs: Map<string, AudioJitterConfig> |
| 44 | + setAudioJitterBufferConfig: (userId: string, config: Partial<AudioJitterConfig>) => void |
36 | 45 | videoCodecOptions: typeof VIDEO_CODEC_OPTIONS |
37 | 46 | videoResolutionOptions: typeof VIDEO_RESOLUTION_OPTIONS |
38 | 47 | videoBitrateOptions: typeof VIDEO_BITRATE_OPTIONS |
@@ -67,6 +76,7 @@ export function useCallMedia(session: LocalSession | null): UseCallMediaResult { |
67 | 76 | const [localAudioBitrate, setLocalAudioBitrate] = useState<number | null>(null) |
68 | 77 | const [remoteMedia, setRemoteMedia] = useState<Map<string, RemoteMediaStreams>>(new Map()) |
69 | 78 | const [videoJitterConfigs, setVideoJitterConfigs] = useState<Map<string, VideoJitterConfig>>(new Map()) |
| 79 | + const [audioJitterConfigs, setAudioJitterConfigs] = useState<Map<string, AudioJitterConfig>>(new Map()) |
70 | 80 | const [videoDevices, setVideoDevices] = useState<MediaDeviceInfo[]>([]) |
71 | 81 | const [audioDevices, setAudioDevices] = useState<MediaDeviceInfo[]>([]) |
72 | 82 | const [selectedVideoDeviceId, setSelectedVideoDeviceId] = useState<string | null>(null) |
@@ -112,6 +122,7 @@ export function useCallMedia(session: LocalSession | null): UseCallMediaResult { |
112 | 122 | setMicrophoneEnabled(false) |
113 | 123 | setScreenShareEnabled(false) |
114 | 124 | setVideoJitterConfigs(new Map()) |
| 125 | + setAudioJitterConfigs(new Map()) |
115 | 126 | setVideoEncoderError(null) |
116 | 127 | setAudioEncoderError(null) |
117 | 128 | return |
@@ -225,6 +236,7 @@ export function useCallMedia(session: LocalSession | null): UseCallMediaResult { |
225 | 236 | setCameraEnabled(session.localMember.publishedTracks.video) |
226 | 237 | setMicrophoneEnabled(session.localMember.publishedTracks.audio) |
227 | 238 | setVideoJitterConfigs(new Map()) |
| 239 | + setAudioJitterConfigs(new Map()) |
228 | 240 | } |
229 | 241 | }, [session]) |
230 | 242 |
|
@@ -352,6 +364,24 @@ export function useCallMedia(session: LocalSession | null): UseCallMediaResult { |
352 | 364 | [session] |
353 | 365 | ) |
354 | 366 |
|
| 367 | + const setAudioJitterBufferConfig = useCallback( |
| 368 | + (userId: string, config: Partial<AudioJitterConfig>) => { |
| 369 | + if (!session) { |
| 370 | + return |
| 371 | + } |
| 372 | + const controller = session.getMediaController() |
| 373 | + setAudioJitterConfigs((prev) => { |
| 374 | + const current = prev.get(userId) ?? DEFAULT_AUDIO_JITTER_CONFIG |
| 375 | + const next = normalizeAudioJitterConfig({ ...current, ...config }) |
| 376 | + const updated = new Map(prev) |
| 377 | + updated.set(userId, next) |
| 378 | + controller.setAudioJitterBufferConfig(userId, next) |
| 379 | + return updated |
| 380 | + }) |
| 381 | + }, |
| 382 | + [session] |
| 383 | + ) |
| 384 | + |
355 | 385 | const selectVideoDevice = useCallback( |
356 | 386 | async (deviceId: string) => { |
357 | 387 | setSelectedVideoDeviceId(deviceId) |
@@ -472,6 +502,8 @@ export function useCallMedia(session: LocalSession | null): UseCallMediaResult { |
472 | 502 | toggleMicrophone, |
473 | 503 | videoJitterConfigs, |
474 | 504 | setVideoJitterBufferConfig, |
| 505 | + audioJitterConfigs, |
| 506 | + setAudioJitterBufferConfig, |
475 | 507 | videoCodecOptions: VIDEO_CODEC_OPTIONS, |
476 | 508 | videoResolutionOptions: VIDEO_RESOLUTION_OPTIONS, |
477 | 509 | videoBitrateOptions: VIDEO_BITRATE_OPTIONS, |
|
0 commit comments