Ultra-quality 1080p 60fps optimizations
This commit is contained in:
parent
0167aeb7b9
commit
f2cfb87b13
3 changed files with 14 additions and 13 deletions
|
|
@ -223,9 +223,9 @@ export class NetworkManager extends EventEmitter {
|
||||||
sendEncodedVideoChunk(chunk: any, isKeyFrame: boolean, timestamp: number, streamType: 'video' | 'screen' = 'video') {
|
sendEncodedVideoChunk(chunk: any, isKeyFrame: boolean, timestamp: number, streamType: 'video' | 'screen' = 'video') {
|
||||||
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
|
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;
|
||||||
|
|
||||||
// Backpressure check: If we have > 2.5MB buffered, drop this frame.
|
// Backpressure check: If we have > 4MB buffered, drop this frame.
|
||||||
// For video, it's better to drop than to lag.
|
// For video, it's better to drop than to lag.
|
||||||
if (this.ws.bufferedAmount > 2.5 * 1024 * 1024) {
|
if (this.ws.bufferedAmount > 4 * 1024 * 1024) {
|
||||||
this.dropCount++;
|
this.dropCount++;
|
||||||
if (this.dropCount % 60 === 0) {
|
if (this.dropCount % 60 === 0) {
|
||||||
console.warn(`[Network] Backpressure! Dropped ${this.dropCount} video frames. Buffered: ${this.ws.bufferedAmount} bytes`);
|
console.warn(`[Network] Backpressure! Dropped ${this.dropCount} video frames. Buffered: ${this.ws.bufferedAmount} bytes`);
|
||||||
|
|
|
||||||
|
|
@ -434,7 +434,7 @@ function App() {
|
||||||
for (const k of map.keys()) {
|
for (const k of map.keys()) {
|
||||||
if (k.startsWith(`${user_id}-${type}-`) && k !== key) {
|
if (k.startsWith(`${user_id}-${type}-`) && k !== key) {
|
||||||
const kSeq = parseInt(k.split('-')[2]);
|
const kSeq = parseInt(k.split('-')[2]);
|
||||||
if (kSeq < seq - 10) map.delete(k);
|
if (kSeq < seq - 60) map.delete(k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -480,8 +480,8 @@ function App() {
|
||||||
addLog("Requesting Webcam Access...");
|
addLog("Requesting Webcam Access...");
|
||||||
stream = await navigator.mediaDevices.getUserMedia({
|
stream = await navigator.mediaDevices.getUserMedia({
|
||||||
video: {
|
video: {
|
||||||
width: 1280,
|
width: 1920,
|
||||||
height: 720,
|
height: 1080,
|
||||||
frameRate: 60,
|
frameRate: 60,
|
||||||
deviceId: selectedVideoDevice ? { exact: selectedVideoDevice } : undefined
|
deviceId: selectedVideoDevice ? { exact: selectedVideoDevice } : undefined
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,23 +48,24 @@ export class MediaEngine extends SimpleEventEmitter {
|
||||||
// private videoDecoders: Map<string, VideoDecoder> = new Map(); // Already declared above
|
// private videoDecoders: Map<string, VideoDecoder> = new Map(); // Already declared above
|
||||||
private audioDecoders: Map<string, AudioDecoder> = new Map();
|
private audioDecoders: Map<string, AudioDecoder> = new Map();
|
||||||
private videoConfig: VideoEncoderConfig = {
|
private videoConfig: VideoEncoderConfig = {
|
||||||
codec: 'avc1.42001f', // H.264 Baseline Profile Level 3.1 (720p safe)
|
codec: 'avc1.64002a', // H.264 High Profile Level 4.2
|
||||||
width: 1280,
|
width: 1920,
|
||||||
height: 720,
|
height: 1080,
|
||||||
bitrate: 4_000_000,
|
bitrate: 6_000_000,
|
||||||
framerate: 60,
|
framerate: 60,
|
||||||
latencyMode: 'realtime',
|
latencyMode: 'realtime',
|
||||||
|
hardwareAcceleration: 'prefer-hardware',
|
||||||
avc: { format: 'annexb' }
|
avc: { format: 'annexb' }
|
||||||
};
|
};
|
||||||
|
|
||||||
private screenConfig: VideoEncoderConfig = {
|
private screenConfig: VideoEncoderConfig = {
|
||||||
// High Profile Level 4.2
|
codec: 'avc1.64002a', // H.264 High Profile Level 4.2
|
||||||
codec: 'avc1.64002a',
|
|
||||||
width: 1920,
|
width: 1920,
|
||||||
height: 1080,
|
height: 1080,
|
||||||
bitrate: 8_000_000, // Reduced to 2 Mbps for better stability/FPS
|
bitrate: 10_000_000,
|
||||||
framerate: 60,
|
framerate: 60,
|
||||||
latencyMode: 'realtime', // Changed from 'quality' to 'realtime' for lower latency
|
latencyMode: 'realtime',
|
||||||
|
hardwareAcceleration: 'prefer-hardware',
|
||||||
avc: { format: 'annexb' }
|
avc: { format: 'annexb' }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue