diff --git a/client/.yarn/install-state.gz b/client/.yarn/install-state.gz index 08dda20..3e561a3 100644 Binary files a/client/.yarn/install-state.gz and b/client/.yarn/install-state.gz differ diff --git a/client/app/composables/use-devices.ts b/client/app/composables/use-devices.ts index 838102b..2ed9a64 100644 --- a/client/app/composables/use-devices.ts +++ b/client/app/composables/use-devices.ts @@ -13,7 +13,8 @@ export const useDevices = createGlobalState(() => { return navigator.mediaDevices.getDisplayMedia({ audio: false, video: { - height: { max: 1440 }, + width: { max: 2560 }, + height: { max: 1080 }, displaySurface: 'monitor', frameRate: { ideal: fps, max: fps }, }, diff --git a/client/app/composables/use-mediasoup.ts b/client/app/composables/use-mediasoup.ts index 75da061..a088815 100644 --- a/client/app/composables/use-mediasoup.ts +++ b/client/app/composables/use-mediasoup.ts @@ -343,6 +343,8 @@ export const useMediasoup = createSharedComposable(() => { producer.on('trackended', () => { disableProducer(producers.value[producer.id]!) }) + + return producer } async function disableProducer(producer: Producer) { @@ -386,8 +388,10 @@ export const useMediasoup = createSharedComposable(() => { streamId: 'mic-video', codecOptions: { opusStereo: true, - opusDtx: true, // Меньше пакетов летит когда тишина - opusFec: false, // Фиксит пакет лос + opusMaxPlaybackRate: 48000, + opusMaxAverageBitrate: 192000, + opusDtx: false, + opusFec: false, }, appData: { source: 'mic-video', @@ -449,29 +453,46 @@ export const useMediasoup = createSharedComposable(() => { const track = stream.getVideoTracks()[0] + console.log('settings', track.getSettings()) + if (!track) return - console.log('codec', device.value.sendRtpCapabilities.codecs) - await createProducer({ track, streamId: 'share', - codec: device.value.sendRtpCapabilities.codecs?.find( - c => c.mimeType.toLowerCase() === 'video/vp9' && c.parameters?.['profile-id'] === 0, + codec: device.value.rtpCapabilities.codecs?.find( + c => c.mimeType.toLowerCase() === 'video/h264', ), + // codec: device.value.rtpCapabilities.codecs?.find( + // c => c.mimeType.toLowerCase() === 'video/av1', + // ), + // codec: device.value.rtpCapabilities.codecs?.find( + // c => c.mimeType.toLowerCase() === 'video/vp9', + // ), + // codec: { + // kind: 'video', + // mimeType: 'video/AV1', + // clockRate: 90000, + // parameters: { + // 'level-idx': 13, // Level 4.1 — 1080p60 + // 'profile': 0, // Main Profile + // 'tier': 0, // Main tier (0) vs High tier (1) + // 'x-google-start-bitrate': 8000, + // }, + // }, encodings: [ { - maxBitrate: 12_000_000, // 8 Mbps — для 1080p60 достаточно + maxBitrate: 120_000_000, maxFramerate: 60, - scalabilityMode: 'L1T1', // Без SVC слоёв (стабильнее) + scalabilityMode: 'L1T1', networkPriority: 'high', }, ], codecOptions: { - videoGoogleStartBitrate: 2000, // Стартуем с 2 Mbps сразу - videoGoogleMaxBitrate: 12000, - videoGoogleMinBitrate: 500, + // videoGoogleStartBitrate: 8000, + videoGoogleMaxBitrate: 120000, + videoGoogleMinBitrate: 2000, }, zeroRtpOnPause: true, appData: { diff --git a/client/src-tauri/tauri.conf.json b/client/src-tauri/tauri.conf.json index c357c0f..03a1483 100644 --- a/client/src-tauri/tauri.conf.json +++ b/client/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "Chad", - "version": "0.3.0-rc.3", + "version": "0.3.0-rc.5", "identifier": "xyz.koptilnya.chad", "build": { "frontendDist": "../.output/public",