(frontend) add persistence for subscribed video resolution preferences

Implement user choice persistence for video resolution settings of
subscribed tracks from other participants.

Maintains user preferences for received video quality across sessions,
allowing consistent bandwidth optimization and viewing experience
without reconfiguring subscription settings each visit.
This commit is contained in:
lebaudantoine
2025-08-13 12:38:51 +02:00
committed by aleb_the_flash
parent 803c94a80c
commit 9728603f72
2 changed files with 7 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ import { useSnapshot } from 'valtio'
import { userChoicesStore } from '@/stores/userChoices' import { userChoicesStore } from '@/stores/userChoices'
import type { VideoResolution } from '@/stores/userChoices' import type { VideoResolution } from '@/stores/userChoices'
import { ProcessorSerialized } from '@/features/rooms/livekit/components/blur' import { ProcessorSerialized } from '@/features/rooms/livekit/components/blur'
import type { VideoQuality } from 'livekit-client'
export function usePersistentUserChoices() { export function usePersistentUserChoices() {
const userChoicesSnap = useSnapshot(userChoicesStore) const userChoicesSnap = useSnapshot(userChoicesStore)
@@ -26,6 +27,9 @@ export function usePersistentUserChoices() {
saveVideoPublishResolution: (resolution: VideoResolution) => { saveVideoPublishResolution: (resolution: VideoResolution) => {
userChoicesStore.videoPublishResolution = resolution userChoicesStore.videoPublishResolution = resolution
}, },
saveVideoSubscribeQuality: (quality: VideoQuality) => {
userChoicesStore.videoSubscribeQuality = quality
},
saveUsername: (username: string) => { saveUsername: (username: string) => {
userChoicesStore.username = username userChoicesStore.username = username
}, },

View File

@@ -5,6 +5,7 @@ import {
saveUserChoices, saveUserChoices,
LocalUserChoices as LocalUserChoicesLK, LocalUserChoices as LocalUserChoicesLK,
} from '@livekit/components-core' } from '@livekit/components-core'
import { VideoQuality } from 'livekit-client'
export type VideoResolution = 'h720' | 'h360' | 'h180' export type VideoResolution = 'h720' | 'h360' | 'h180'
@@ -13,6 +14,7 @@ export type LocalUserChoices = LocalUserChoicesLK & {
noiseReductionEnabled?: boolean noiseReductionEnabled?: boolean
audioOutputDeviceId?: string audioOutputDeviceId?: string
videoPublishResolution?: VideoResolution videoPublishResolution?: VideoResolution
videoSubscribeQuality?: VideoQuality
} }
function getUserChoicesState(): LocalUserChoices { function getUserChoicesState(): LocalUserChoices {
@@ -20,6 +22,7 @@ function getUserChoicesState(): LocalUserChoices {
noiseReductionEnabled: false, noiseReductionEnabled: false,
audioOutputDeviceId: 'default', // Use 'default' to match LiveKit's standard device selection behavior audioOutputDeviceId: 'default', // Use 'default' to match LiveKit's standard device selection behavior
videoPublishResolution: 'h720', videoPublishResolution: 'h720',
videoSubscribeQuality: VideoQuality.HIGH,
...loadUserChoices(), ...loadUserChoices(),
} }
} }