UNPKG

node-mac-recorder

Version:

Native macOS screen recording package for Node.js applications

232 lines (182 loc) 9.35 kB
--- ⚠️ 1. KRITIK: Audio Cihaz Tespit ve Varsayılan Seçim Problemi Dosya: src/audio_recorder.mm:433-491 Problem: - Continuity Microphone (iPhone/iPad) gibi harici cihazlar macOS 14+ sistemlerde otomatik olarak varsayılan cihaz seçilebiliyor - Kod şu anda sadece MacBook'un dahili mikrofonunu isDefault: true olarak işaretliyor - Ancak bazı cihazlarda (özellikle iPhone bağlı olduğunda) sistem otomatik olarak Continuity Microphone'u tercih edebiliyor Etkilenen Cihazlar: - macOS 14+ ile çalışan tüm MacBook'lar - iPhone/iPad ile Continuity özellikleri aktif olan sistemler - Harici USB mikrofonlar takılı olanlar Kod Bölümü: // Lines 455-485 BOOL isBuiltIn = NO; if ([deviceName rangeOfString:@"MacBook" options:NSCaseInsensitiveSearch].location != NSNotFound || [deviceName rangeOfString:@"iMac" options:NSCaseInsensitiveSearch].location != NSNotFound) { isBuiltIn = YES; } // External devices should NOT be default if ([deviceName rangeOfString:@"Continuity" options:NSCaseInsensitiveSearch].location != NSNotFound || [deviceName rangeOfString:@"iPhone" options:NSCaseInsensitiveSearch].location != NSNotFound) { isBuiltIn = NO; } NSDictionary *info = @{ @"isDefault": @(isBuiltIn), // Only built-in devices are default ... }; Öneri: - Sistem düzeyinde gerçek varsayılan cihazı sorgulamak için [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] kullanılmalı - Kullanıcı tercihi belirtmemişse sistem varsayılanı kullanılmalı --- 🔴 2. KRITIK: macOS Sürüm Tespiti ve Framework Seçimi Dosya: src/mac_recorder.mm:527-697 Problem: - macOS 14 ve 15'te ScreenCaptureKit kullanmaya çalışıyor ama hata aldığında AVFoundation'a fallback yapıyor - Ancak bazı macOS 14 cihazlarında ScreenCaptureKit çalışıyor gibi görünüp sonra hata verebiliyor (async başlatma problemi) - Electron ortamlarında ScreenCaptureKit varsayılan olarak tercih ediliyor ama bazı cihazlarda AVFoundation daha stabil Etkilenen Cihazlar: - macOS 14.0-14.3 arası sürümler (ScreenCaptureKit hala dengesiz) - M1/M2 Mac'ler (bazı kernel panic sorunları yaşanabilir) - Electron uygulamaları (rendering pipeline çakışmaları) Kod Bölümü: // Lines 559-576 BOOL tryScreenCaptureKit = (isM14Plus || isM15Plus) && !forceAVFoundationEnv; if (tryScreenCaptureKit) { if (isElectron) { MRLog(@"⚡ ELECTRON: macOS 14+ → trying ScreenCaptureKit first"); } @try { if (@available(macOS 12.3, *)) { if ([ScreenCaptureKitRecorder isScreenCaptureKitAvailable]) { // ScreenCaptureKit başarısız olursa AVFoundation'a fallback yapıyor // Ancak async başlatma sırasında sorunlar olabilir Potansiyel Sorun: - ScreenCaptureKit başlatma süresi cihazlar arası çok değişken (150ms - 2000ms) - Kodda 600ms timeout var ama bazı cihazlarda yeterli olmayabilir --- ⚠️ 3. Kamera Capture Timeout Problemi Dosya: src/mac_recorder.mm:152-176 Problem: - Kamera başlatma için 8 saniye timeout var - Continuity Camera (iPhone/iPad kamera) kullanılırken bu timeout yetersiz kalabiliyor - Özellikle Wi-Fi bağlantısı zayıf olduğunda veya Bluetooth üzerinden bağlantı yapılıyorsa Etkilenen Cihazlar: - Continuity Camera kullanan tüm cihazlar - Zayıf Wi-Fi/Bluetooth bağlantısı olan ortamlar - USB kameralar (bazı yavaş başlayan modeller) Kod Bölümü: // Lines 163-174 double cameraWaitTimeout = 8.0; // allow slower devices if (!waitForCameraRecordingStart(cameraWaitTimeout)) { double cameraStartTs = currentCameraRecordingStartTime(); if (cameraStartTs > 0 || isCameraRecording()) { MRLog(@"⚠️ Camera did not confirm start within %.1fs but appears to be running; continuing", cameraWaitTimeout); return true; } MRLog(@"❌ Camera did not signal recording start within %.1fs", cameraWaitTimeout); stopCameraRecording(); return false; } --- 🟡 4. Çoklu Ekran (Multi-Display) Koordinat Dönüşüm Hataları Dosya: index.js:363-575 Problem: - Farklı çözünürlük ve ölçeklendirme faktörüne sahip ekranlarda koordinat hesaplamaları hatalı olabiliyor - Retina ekranlar vs standart ekranlar karışık kullanıldığında piksel ölçekleme tutarsızlıkları - Negatif koordinatlar (secondary display sol tarafta olduğunda) doğru işlenmiyor olabilir Etkilenen Cihazlar: - MacBook + Harici monitör kombinasyonları - Farklı DPI/scaling'e sahip çoklu ekran kurulumları - Secondary display sol/üst tarafta konumlandırılmış sistemler Kod Bölümü: // Lines 476-495 const isRelativeToDisplay = () => { const endX = parsedArea.x + parsedArea.width; const endY = parsedArea.y + parsedArea.height; return ( parsedArea.x >= -tolerance && parsedArea.y >= -tolerance && endX <= targetRect.width + tolerance && endY <= targetRect.height + tolerance ); }; Risk: - 1 piksel tolerance çok küçük olabilir (Retina ekranlarda 2x ölçekleme) --- 🟡 5. Audio Format Uyumluluk Problemi Dosya: src/audio_recorder.mm:106-151 Problem: - Ses formatı otomatik tespit ediliyor ama varsayılan değerler sabit kodlanmış - Bazı harici ses kartları/cihazlar 48kHz yerine 44.1kHz veya 96kHz kullanıyor - Kanal sayısı 1-2 arasına zorlanıyor, bazı profesyonel cihazlar daha fazla kanal sunuyor Etkilenen Cihazlar: - Profesyonel USB ses arayüzleri (Focusrite, PreSonus, etc.) - Bazı Bluetooth mikrofonlar (codec limitations) - Eski harici ses kartları (44.1kHz native) Kod Bölümü: // Lines 109-134 double sampleRate = asbd ? asbd->mSampleRate : 48000.0; // Default to 48kHz NSUInteger channels = asbd ? asbd->mChannelsPerFrame : 1; channels = MAX((NSUInteger)1, channels); // CRITICAL FIX: Force to mono or stereo NSUInteger validChannels = (channels <= 1) ? 1 : 2; // Force to mono or stereo audioSettings[AVNumberOfChannelsKey] = @(validChannels); Risk: - 4-8 kanallı profesyonel ses arayüzlerinde veri kaybı --- 🔴 6. ScreenCaptureKit Async Cleanup Race Condition Dosya: src/mac_recorder.mm:256-263 Problem: - ScreenCaptureKit'in async cleanup mekanizması kontrol ediliyor ama hala race condition riski var - Ardışık kayıt başlatma işlemlerinde önceki kayıt henüz tam temizlenmemiş olabiliyor Etkilenen Cihazlar: - Tüm macOS 14+ cihazlar (ScreenCaptureKit kullananlar) - Hızlı start/stop yapan kullanıcılar Kod Bölümü: // Lines 256-263 if (@available(macOS 12.3, *)) { extern BOOL isScreenCaptureKitCleaningUp(); if (isScreenCaptureKitCleaningUp()) { MRLog(@"⚠️ ScreenCaptureKit is still stopping previous recording - please wait"); return Napi::Boolean::New(env, false); } } --- 🟠 7. File Format Compatibility (WebM vs MOV) Dosya: src/audio_recorder.mm:60-97 Problem: - macOS 15+in WebM format tercih ediliyor ama bazı sistemlerde WebM encoder çalışmıyor - Fallback MOV formatına geçiyor ama bu durumda dosya uzantısı tutarsızlığı oluşuyor Etkilenen Cihazlar: - macOS 15.0-15.1 (WebM encoder bazı cihazlarda eksik) - Sandbox'lanmış uygulamalar (codec access restrictions) --- 📊 Özet: Cihaz Kategorilerine Göre Risk Matrisi | Cihaz Kategorisi | Ana Riskler | Öncelik | |-----------------------------------|--------------------------------------------------------|-----------| | MacBook Pro M1/M2 + macOS 14 | ScreenCaptureKit instability, Audio device auto-switch | 🔴 Yüksek | | MacBook + Harici Ekran | Multi-display coordinate bugs, scaling issues | 🟡 Orta | | Continuity Camera/Mic Kullananlar | Timeout issues, network latency | 🟡 Orta | | Profesyonel Ses Ekipmanı Olanlar | Audio format mismatch, sample rate issues | 🟡 Orta | | Electron Uygulamaları | ScreenCaptureKit rendering conflicts | 🔴 Yüksek | | macOS 13 Sistemler | AVFoundation limitations, feature parity | 🟢 Düşük | --- 💡 Öneriler 1. Audio cihaz seçimi: Sistem varsayılanını kullanmak yerine explicit device selection zorunlu tutulmalı 2. ScreenCaptureKit timeout: 600ms yerine 1500ms'ye çıkarılmalı veya adaptive timeout kullanılmalı 3. Multi-display: Pixel scaling factor (backingScaleFactor) hesaplamalara dahil edilmeli 4. Camera timeout: Continuity Camerain 15 saniye timeout uygulanmalı 5. Format selection: WebM yerine MOV varsayılan yapılmalı (daha geniş uyumluluk) Analiz tamamlandı! Özetlemek gerekirse: En kritik problemler: 1. ☢️ Continuity/Harici ses cihazlarının otomatik varsayılan seçilmesi - Kullanıcı beklemediği mikrofon kullanılabilir 2. ☢️ ScreenCaptureKit async başlatma race condition - Ardışık kayıtlarda başlatma hataları 3. ⚠️ Çoklu ekran koordinat hesaplamaları - Retina + standart ekran kombinasyonlarında yanlış bölge