İçeriğe geç
MNETHIC
Tüm hizmetler

C++ ve Qt6 ile performans gereken işler: ekran yakalama, video kodlama, ağ protokolleri, cihaz entegrasyonu.

trviewer’ın ekran yakalama, H.264 kodlama ve şifreleme katmanlarını kendimiz yazdık. Performans, gerçek zamanlı video, ağ protokolü veya cihaz entegrasyonu gerektiren işler için C++ ve Qt6 ile Windows yazılımı geliştiriyoruz; CAD ve mühendislik araçları da dahil.

01Neler dahil
  • 01

    C++ · Qt6 · Windows

  • 02

    Gerçek zamanlı video ve ağ

  • 03

    Şifreleme

  • 04

    CAD ve mühendislik araçları

02Nasıl çalışıyoruz

Bu işler neden tarayıcıda yapılmıyor

Tarayıcı bugün çok şey yapabiliyor, ama bazı işlerde işletim sisteminin altına inmek gerekiyor. Ekranın tamamını yakalamak, ekran kartının donanım kodlayıcısına doğrudan erişmek, bir USB cihazının sürücüsüyle konuşmak, arka planda servis olarak çalışıp kullanıcı oturumu kapalıyken hizmet vermek — bunların hiçbiri tarayıcı sekmesinin yetki sınırları içinde değil.

Karar ölçütümüz basit: işin performans bütçesi milisaniyeyle ölçülüyorsa ya da işletim sistemi yetkisi gerekiyorsa yerel kod yazılır. Geri kalan her şey için web tarafı daha ucuz ve daha hızlı teslim edilir. Bir projede iki tarafı birlikte kurmak da yaygın bir çözümdür: ağır çekirdek yerelde, yönetim ve raporlama web’de.

trviewer’da ekran yakalama ve kodlama

trviewer’ın görüntü katmanını baştan kendimiz yazdık. Ekran yakalama, Windows’un DXGI arayüzü üzerinden ekran kartının kendi çıktısından alınıyor; görüntü sistem belleğine kopyalanmadan doğrudan H.264 kodlayıcıya veriliyor. Aradaki kopyaları kaldırmak, gecikmenin büyük bölümünü aldığımız yerdi.

İkinci kazanç kare üretmemekten geliyor: ekranda değişen bir şey yoksa yeni kare üretilmiyor. Hareketsiz bir masaüstünü saniyede altmış kez kodlamak hem işlemciyi hem bant genişliğini boşa harcar. Kodlayıcıya verilen bit hızı da sabit değil; ağın o anki durumuna göre uyarlanıyor.

Ağ tarafı: paket kaybıyla yaşamak

Gerçek dünyada bağlantı temiz değildir. Mobil hatta gecikme dalgalanır, ofis ağında paket düşer, otel ağında UDP kapalıdır. trviewer’da taşıma katmanı bu yüzden hibrit kuruldu: mümkün olduğunda UDP, mümkün olmadığında TCP üzerinden devam ediyor.

Kaybolan paketleri yeniden istemek, gerçek zamanlı görüntüde çoğu zaman geç kalır — istediğiniz kare geldiğinde o an geçmiş olur. Bunun yerine XOR tabanlı ileri hata düzeltme kullanıyoruz: gönderilen paketlere hesaplanmış bir tamamlayıcı ekleniyor ve kayıp paket alıcı tarafta yeniden üretiliyor. Bunun bedeli fazladan bant genişliğidir; bu yüzden düzeltme oranı da ağın durumuna göre ayarlanıyor.

Şifrelemeyi yazarken uyduğumuz sınırlar

trviewer’ın trafiği uçtan uca şifreli: AES-256-GCM ile şifreleniyor, anahtarlar ECDH ile karşılıklı üretiliyor. Ara sunucu trafiği taşır ama açamaz. Gözetimsiz erişim gibi kolaylıkların bu güvenceyi delmemesine dikkat ediyoruz.

Burada uyduğumuz kural şu: şifreleme ilkellerini kendimiz yazmayız. Bloklar denenmiş kütüphanelerden gelir; bizim yazdığımız şey bunların nasıl bir araya getirildiği, anahtarların ömrü, oturum başına yenilenmesi ve bellekte ne kadar durduğudur. Kendi algoritmasını yazan bir uzak masaüstü, yazılmamış olandan daha risklidir.

CAD ve mühendislik araçları: ASNCAD örneği

ASNCAD yıllarca bir ZWCAD eklentisi olarak çalıştı. Çizim üretimi CAD uygulamasının içinde yaşıyordu; bu da her kullanıcının lisanslı bir CAD kurulumuna ihtiyaç duyması ve ürünün o uygulamanın sürüm takvimine bağlı kalması demekti.

Çizim motorunu .NET 8 üzerinde çalışan bağımsız bir çekirdeğe taşıdık. Bugün kuyu planı, kabin ve makine dairesi planları, boyuna kesitler ve tam proje paftası aynı parametre setinden üretiliyor; trafik analizi, ray gerilmesi, halat çekişi, hidrolik burkulma ve elektrik tesisatı hesapları aynı çekirdekte yapılıyor. Ön yüz yalnızca gösteriyor, hesap yapmıyor.

Bu ayrım taşınabilirliği getirdi: aynı çekirdek hem tarayıcıdan hem Windows’tan kullanılabiliyor. Mühendislik hesabı içeren eski bir masaüstü uygulamanız varsa izlediğimiz yol budur — önce hesabı arayüzden ayırmak, sonra arayüzü yenilemek.

Derleme, imzalama ve güncelleme

Masaüstü yazılımında teslim, kodu yazmakla bitmez. Her sürümün aynı şekilde derlendiğinden emin olmak için derleme otomatik bir zincire bağlanır; bir sürümü aylar sonra aynı kaynaktan yeniden üretebilmek gerekir.

Windows’ta imzasız çalıştırılabilir dosya kullanıcıya uyarı gösterir ve kurumsal ortamlarda çoğu zaman engellenir. Bu yüzden kod imzalama sertifikası kurulumu teslim planının bir parçasıdır; sertifika sizin firmanız adına alınır, imzalama zinciri biz kurarız.

Son adım güncellemedir. Uygulamaya sessiz güncelleme yeteneği koyar, yeni sürümü önce sınırlı bir gruba açar, çökme ve hata kayıtlarını toplarız. Sahadaki bir masaüstü uygulamasında en pahalı şey, kullanıcıların hangi sürümde olduğunu bilmemektir.

Performans ölçümü ve bellek disiplini

Performans işinde en sık yapılan hata, yavaş olduğu tahmin edilen yeri optimize etmektir. Ölçmeden değiştirmiyoruz: profil alınır, zamanın gerçekten nerede geçtiği görülür, sonra o noktaya dokunulur. trviewer’da kazancın büyük kısmı algoritma inceliklerinden değil, gereksiz bellek kopyalarını kaldırmaktan geldi.

Gerçek zamanlı bir yolda ölçtüğümüz şey ortalama değil, en kötü durumdur. Saniyede altmış kare üreten bir zincirde ortalama gecikmenin düşük olması bir şey ifade etmez; arada gelen uzun bir duraklama kullanıcının hissettiği tek şeydir. Bu yüzden yüzde doksan dokuzluk dilimi izler, ani duraklamaların kaynağını ayrıca ararız.

Bellek tarafında C++’ın verdiği serbestliği kural koyarak sınırlıyoruz: sahiplik açıkça belirtilir, ham işaretçiler ödünç almanın ötesinde kullanılmaz, kaynaklar kapsam bitiminde kendiliğinden serbest bırakılır. Uzun süre açık kalan bir uygulamada küçük bir sızıntı günler içinde görünür hale gelir; bu yüzden bellek ve iş parçacığı denetleyicileriyle test etmek teslim listesinin parçasıdır.

03Sık sorulanlar

Qt lisansı nasıl işliyor?

Qt’nin hem ticari hem açık kaynak lisansı var ve hangisinin uygun olduğu ürünün nasıl dağıtılacağına bağlı. Projeye başlamadan önce dağıtım biçiminizi konuşur, uygun lisans yolunu ve varsa maliyetini yazılı olarak koyarız. Lisans tarafında sürpriz bırakmıyoruz; bu kalem teklifte ayrı görünür.

macOS ve Linux desteği veriyor musunuz?

Qt6 üzerine kurulu arayüz katmanı üç platformda da derlenebilir. Ancak ekran yakalama, sürücü erişimi ve arka plan servisi gibi işletim sistemine bağlı parçalar her platformda ayrı yazılır ve ayrı test edilir. Bu yüzden çoklu platform bir onay kutusu değil, ayrı bir iş kalemidir; ihtiyaç varsa kapsamda gerçekçi bir süreyle yer alır.

Kod imzalama sertifikası şart mı?

Uygulama yalnızca sizin kontrolünüzdeki birkaç makinede çalışacaksa şart değil. Dışarıya dağıtılacaksa pratikte şart: imzasız dosya indirme sırasında uyarı alır, kurumsal ağlarda engellenir. Sertifika firmanız adına alınır, bizde kalmaz.

Mevcut C++ projemize devam edebilir misiniz?

Genellikle evet. Önce bir hafta süren bir inceleme yapar, derlenip derlenmediğine, bağımlılıkların güncelliğine ve kodun test edilebilir olup olmadığına bakarız. Sonunda üç seçenek sunarız: olduğu yerden devam, kademeli yenileme ya da çekirdeği ayırıp arayüzü yeniden yazma. ASNCAD’de üçüncü yolu izledik.

Cihaz entegrasyonu için elimizde cihaz olması gerekiyor mu?

Geliştirmenin bir kısmı protokol belgesi üzerinden benzetimle yürütülebilir, ama gerçek cihaz olmadan teslim etmeyiz. Cihazın en az bir örneğine, protokol belgesine ve mümkünse üreticiyle iletişim kanalına ihtiyaç duyarız. Cihaz bize gönderilebilir ya da geliştirme sizin sahanızda uzaktan erişimle yürütülür.

Süre ve bedel nasıl hesaplanıyor?

Belirleyici olan ekran sayısı değil, işin ne kadarının öngörülebilir olduğudur. Protokolü belgelenmiş bir cihaz entegrasyonu tahmin edilebilir bir iştir; belgesiz bir cihazın protokolünü çözmek ise araştırma içerir ve süresi baştan verilemez. Bu tür işleri zaman bazlı, sınırı belirli bir araştırma aşaması olarak ayırır, sonucunda kapsamı yazılı hale getiririz.

İletişim

Projenizi anlatın, yol haritasını birlikte çizelim.

Kısa bir görüşme yeterli. Ürünlerimiz için demo, hizmetler için ücretsiz keşif görüşmesi yapıyoruz.

Doğrudan iletişim

Form doldurmak istemezseniz arayabilir veya WhatsApp’tan yazabilirsiniz.

bilgi@mnethic.com

Palandöken, Erzurum