Read in Other Languages
Beş Engel — Claude Code ile Kamerayı Ağdan Geçirmek
Bir bilgisayardaki kamerayı, başka bir bilgisayardaki OBS'e bağlamak. Kâğıt üzerinde beş dakikalık iş.
El Turco | Analyst
Elimde iki makine vardı. Bir ThinkPad — 2015 model, iki çekirdek, sekiz gigabayt. Üzerine Akaso kamera takılı. Bir de MacBook, üzerinde OBS çalışıyor. İkisi de Tailscale ağında.
Yapılacak iş belliydi: kameranın görüntüsünü ağdan geçirip OBS'e sokmak.
Beş engel çıktı. Hepsi ayrı bir katmandaydı.
İlk deneme en doğrudan yoldu: kamerayı yakala, sıkıştır, UDP ile karşı tarafa at.
Paketler gitti. Karşıya hiçbir şey ulaşmadı.
UDP, güvenlik duvarlarının ve sanal ağların en sevmediği trafiktir. Nerede kaybolduğunu bulmak yerine yolu değiştirdik: TCP. SSH zaten TCP üzerinden çalışıyordu, demek ki o yol açıktı.
TCP'ye geçtik, port açtık, güvenlik duvarına kural ekledik. Bağlantı reddedildi.
Sebep incelikliydi. SSH ile bağlandığımda kullanıcı yönetici yetkisine sahipti — ama oturum yükseltilmiş değildi. Windows'ta bu ikisi aynı şey değil. Güvenlik duvarı kuralı sessizce uygulanmamıştı.
Duvarı aşmaya çalışmak yerine tamamen atladık: SSH tüneli. Zaten çalışan bir kanalın içinden geçirdik.
Tünel kuruldu, ffmpeg başladı, dört saniye sonra öldü.
Hata mesajı açıktı: gerçek zamanlı tampon çok dolu, kare düşürüldü.
Kamera, sorulmadığı için varsayılanına dönmüştü: 3840x2160. Dört K görüntüyü gerçek zamanlı sıkıştırmak, 2015 model iki çekirdekli bir işlemcinin harcı değildi.
Çözüm iki parçalıydı. Çözünürlüğü 1920x1080'e sabitledik. Ve sıkıştırmayı işlemciden alıp Intel Quick Sync'e — yani grafik yongasının içindeki donanım kodlayıcıya — verdik.
Kameranın kendisi H.264 üretebiliyordu. Öyleyse hiç dokunmadan olduğu gibi aktaralım, dedik. İşlemci yükü sıfır olurdu.
Karşı taraf çözemedi. Log şunu tekrarlıyordu: var olmayan PPS 0'a başvuruldu.
Kamera, görüntüyü tarif eden başlıkları (SPS/PPS) akışın başına koymuyordu. Başlıksız bir video akışı, sözlüğü olmayan bir yazı gibidir.
MJPEG olarak aldık, Quick Sync ile yeniden kodladık. Bir adım fazla, ama başlıklar yerli yerinde.
Her şey çalıştı. Görüntü geldi. Sonra kayboldu.
Kontrol ettim: başlattığım süreç yoktu. Hata kaydı boştu. Program çökmemişti — öldürülmüştü.
Sebep, SSH'ın kendisiydi. Windows'ta SSH oturumu, başlattığı süreçleri bir iş nesnesine bağlar; oturum kapanınca çocuklar da gider. Bağlantıyı kestiğim anda kamerayı da kesmiş oluyordum.
Yayını zamanlanmış göreve dönüştürdük. Artık oturuma bağlı değil, kendi başına yaşıyor ve her kopmadan sonra kendini yeniden başlatıyor.
Görüntü geldi. Masamda otururken, kendi ekranımda kendimi gördüm — ama o görüntü yandaki bilgisayardan çıkıp, şifreli bir tünelden geçip, bu makineye ulaşmıştı.
Ve asıl bulgu şuydu: iki çekirdekli, on yıllık bir laptop, 1080p30 video sıkıştırmayı işlemcisi neredeyse boştayken yapıyor. Quick Sync sayesinde. O makineyi zayıf sanıyordum; zayıf olan ayarlarımdı.
Beş engelin hiçbiri donanım yetersizliği değildi. Beşi de yapılandırma, protokol ve işletim sistemi davranışıydı.
Yeni ve güçlü bir makine alsaydım, bu beş engelin beşi de aynen çıkardı.
Sistem kurmak, güçlü parça almak değil; parçaların birbirine neden bağlanmadığını tek tek çözmektir.
ThinkPad T470 — i5-6300U · 2C/4T · 8 GB · Intel HD 520 · Windows 10 Pro
Kamera — Akaso (UVC, MJPEG 1920×1080 @30)
Kodlayıcı — Intel Quick Sync (h264_qsv)
Taşıma — MPEG-TS over TCP, SSH reverse tunnel (Tailscale)
Kalıcılık — Windows Scheduled Task