1 puan yazan GN⁺ 2025-03-02 | 1 yorum | WhatsApp'ta paylaş
  • Atılmak üzere olan, okul tarafından verilmiş Lenovo ThinkPad 11e Chromebook’ları söküp yeniden kullanarak 10 ekranlı bir video wall yapmak yaklaşık 3 yıl sürdü
  • Ayrı bir ekran denetleyicisi yerine mevcut dizüstü bilgisayar anakartları her ekranı sürüyor; web tabanlı senkronizasyon sistemi tek bir videoyu 10 parçaya bölüp oynatıyor
  • socket.io tabanlı c-sync düşük performans, yükleme süresi farkları, gecikme ve sistem saati sorunları yaşadı; ancak döngüyü en yavaş istemciye göre yavaşlatarak neredeyse senkron oynatmayı sağladı
  • ChromeOS’in kurumsal kaydı, geliştirici modu kısıtlamaları ve pil çıkarıldığında yaşanan güç sorunları coreboot, MrChromebox araçları, Debian otomatik kurulum USB’si ve ectool fan kontrolüyle aşıldı
  • TN panel görüş açıları, renk farkları ve kusursuz olmayan senkronizasyon hâlâ var; ancak bu, elektronik atığı işbirliği ve yinelemeli tasarımla gerçekten çalışan bir enstalasyona dönüştüren bir örnek

Atılacak Chromebook’lardan başlayan video wall

  • Okul eski Chromebook’ları elden çıkarmaya çalışırken, bunlarla ne yapılabileceği fikrinden proje başladı
  • Kullanılan cihaz Lenovo ThinkPad 11e idi; okul tarafından verilen bir dizüstü bilgisayardı, ancak artık Google yazılım güncellemeleri almıyordu
  • Çoğu web sayfasını yüklemekte bile zorlanıyordu ve eski Enterprise Enrolment’a bağlı olduğundan okul Google hesabı olmadan kullanmak zordu
  • Amaç, birden çok ekranı tek bir büyük ekran gibi yerleştirip çalıştıran bir video wall yapmaktı

Ekran sürme yöntemi ve senkronizasyon denemeleri

  • Başta yalnızca dizüstü ekran panellerini çıkarıp güçlü tek bir bilgisayarla 10 ekranı aynı anda sürme yöntemi değerlendirildi
  • Zaman ve maliyet yükü fazlaydı; ekranlar zaten çalışan dizüstülere bağlı olduğu için her ekranı kendi dizüstü bilgisayar anakartıyla sürme yöntemine geçildi
  • VLC streaming ile aynı ağdaki birden fazla cihaza video gönderme denemeleri de yapıldı, ancak bu video wall gereksinimlerine uymuyordu
    • Videonun kusursuz biçimde senkron olması için tasarlanmış bir sistem değildi
    • 10 ekranda aynı videoyu döngü halinde göstermek değil, tek bir uzun videoyu 10 parçaya bölerek her ekranda farklı bir giriş göstermek gerekiyordu

c-sync ile ayarlanan oynatma zamanlaması

  • Web sayfası ve socket.io kullanarak istemciler arasında video oynatmayı eşleyen ExpressJS sunucu/istemci sistemi c-sync oluşturuldu
  • Temel yapı, sunucu play olayı gönderdiğinde her istemcideki <video> öğesinin oynatmaya başlamasıydı
  • Masaüstü bilgisayar testlerinde oldukça iyi senkronize oluyormuş gibi görünse de gerçek Chromebook’larda performans yetersizliği nedeniyle kararlı biçimde eşleşmedi
    • Yükleme süresi farkları
    • Ağ gecikmesi
    • Sistem saati farkları
  • Nihai yöntemde, her istemcinin videonun sonuna ulaştığında start olayı yayması sağlandı
    • En yavaş bilgisayarın hızlı bilgisayarları bekletmesi sağlanarak video yükleme süresi kazanıldı
    • Her ekran 10 adet start olayı alabildiği için döngü anı biraz oynayabiliyor
    • Videonun ilk birkaç karesi aynıysa kullanıcının farkı ayırt etmesi zordu
  • Zaman damgası tabanlı zamanlanmış oynatma da mümkün görünüyordu; ancak bu Chromebook’lar kendi aralarında zamanı milisaniye düzeyinde kararlı biçimde eşleyemediğinden çalışmadı

ChromeOS’ten çıkmak için firmware çalışması

  • Bir iki ay içinde web sayfasını elle açıp tam ekran senkron video gösteren aşamaya ulaşıldı
  • Gerçek bir enstalasyon olarak kullanılabilmesi için güç verildiğinde otomatik açılması ve c-sync istemci sayfasının açılması gerekiyordu
  • Varsayılan ChromeOS, okul alan adına kilitli Google giriş ekranıyla açılıyordu; pil çıkarılmışken güç bağlandığında da otomatik olarak açılmıyordu
  • GLIMMER anakartları işlemek için MrChromebox’ın ChromeOS Firmware Recovery Script aracı kullanıldı
    • Recovery Mode’a girme
    • Developer Mode’u etkinleştirme
    • ChromeOS Shell’de script çalıştırma
  • Bazı Chromebook’lar Enterprise Enrolment nedeniyle Developer Mode’a girmeyi reddetti; Linux kurulumunun başarılı olduğu cihazlarda da bir süre sonra video oynatma duruyor ya da tüm sistem kilitleniyordu
  • Çözüm, her dizüstü anakartındaki Write Protection vidasını söküp varsayılan firmware’in tamamını coreboot ile üzerine yazmaktı
    • Bu süreç kayıt kısıtlamasını da aşmış gibi görünüyordu
    • 20’den fazla bilgisayarda tekrarlanması gerektiği için yavaş ve zahmetliydi
    • Sonrasında Wake on AC bir firmware özelliği olarak çalıştı ve video oynatma da rastgele bozulmadı

Otomatik açılan Linux kiosk yapmak

  • Başta Chromium’u açıp tuş girişini taklit ederek tam ekran yapan bir başlangıç script’i kullanıldı
  • FullPageOS önceki bir projede denenmişti, ancak x86 donanımda çalışmıyordu
  • Porteus Kiosk, tam ekran Chromium çalıştıran minimal bir Linux dağıtımıydı ve kullanıcı etkileşimi olmadan video oynatmaya izin veren bayraklar ayarlanabildiği için iyi çalıştı
  • Ancak Porteus Kiosk’un gerçek enstalasyon işletimi için engelleri vardı
    • Her açılışta gösterilen Porteus logolu splash ekranı değiştirilemiyordu
    • Kurulum sonrası sayfa URL’sini değiştirme gibi uzaktan işlemler yapılamadığından, duvara monte edildikten sonra sorun olabilirdi
  • Kendi dağıtımına yakın bir yapı oluşturmak için minimal sistemde masaüstü ortamı olmadan kiosk modunda Chromium’u otomatik çalıştırma yöntemi denendi
  • NixOS, Chromebook’un küçük depolama alanı nedeniyle kurulamadı
  • Ardından Debian minimal install temelinde provisioning script’i yazıldı
    • KIOSK_ID oluşturma
    • Host adını csync-client-$KIOSK_ID olarak ayarlama
    • Okul WiFi ağına bağlanma
    • Kullanıcı ve izinler oluşturma
    • openbox ile tam ekran kiosk modunda Chromium’u otomatik başlatma
  • Manuel Debian kurulumu zahmetli olduğundan FAI - Fully Automatic Installation ve FAI.me kullanıldı
  • Sonunda coreboot uygulanmış Chromebook’a takıldığında c-sync istemcisi olarak otomatik provisioning yapan tek bir USB oluşturuldu
  • c-sync’e bağlı istemcileri yöneten ve her istemciye video atayan bir controller da eklendi
  • 3 günlük stres testinde oynatma akıcı kaldıktan sonra duvara montaj aşamasına geçildi

Montaj, güç ve ısı yönetimi

  • Montaj donanımını Aksel Salmi tasarladı; anakart ve ekranı duvara asmayı sağlayan bir yapı kullanıldı
  • Güç kaynağı, her adaptörün iki bilgisayara güç verebilmesi için kabloların birleştirilmesiyle yapılandırıldı
  • Kurulumdan sonraki en büyük sorun ısıydı; firmware’i silme sürecinden sonra dizüstü fanları dönmüyordu
  • ChromeOS Embedded Controller’a ectool ile erişilebildiği için fan hızı elle ayarlanabiliyor
  • Çevrimiçi belgeler yetersizdi ve coreboot ile Google tarafındaki ectool farklı olduğu için kafa karışıklığı yaşandı; ancak Wayback Machine üzerinden bulunan ikili dosya fan hızı ayarında düzgün çalıştı
  • Testler sonucunda gürültü ile sıcaklık arasında denge sağlayan fan hızı değeri bulundu

10 ekranlık video üretimi

  • Her ekranın çözünürlüğü 1366×768 ve 10 ekranın toplam videosu 13660×768 oldu
  • Bu kadar geniş videoyu düzenleyebilen yazılım sayısı fazla değildi; pratikte yalnızca Final Cut Pro ve Blender kullanılabildi
  • Tam genişlikteki video render edildikten sonra ffmpeg ile 10 bölüme kesilip her ekrana atandı
  • Bölme script’i, her ekran konumuna uygun segmentleri crop=1366:768:x_offset:0 biçiminde oluşturuyordu

Tamamlanan sonuç ve kalan sınırlamalar

  • Tamamlanan video wall; açılış sekansı, kendi kendini kalibre ediyor gibi görünen süreç, senkron video oynatma, muhafaza ve kablo yönlendirmesiyle birlikte hazır hale geldi
  • Sonuç kusursuz değil
    • TN panelin görüş açıları iyi değil
    • Ekranlar arasında renkler farklı
    • Senkronizasyon kusursuz değil
    • Her karar için daha iyi alternatifler bulunmuş olabilir
  • Yine de elektronik atığı ilgi çekici bir enstalasyona dönüştüren, yinelemeli tasarım ve ekip işbirliğini gösteren bir sonuç olarak tamamlandı

1 yorum

 
GN⁺ 2025-03-02
Hacker News yorumları
  • Eğlenceli bir projeyi tamamladığınız için tebrikler. Birden fazla cihazda medya senkronizasyonu üzerine çok çalıştığım için insanların nasıl çözümler bulduğunu görmek her zaman keyifli
    Böyle senkronize bir video wall oluşturmanın sektördeki standart yolu BrightSign medya oynatıcıları kullanmaktır; 20 ekranlık bir kurulumda yalnızca oynatıcılar ve ekranların maliyeti kolayca on binlerce dolara çıkabilir. Bunu geri dönüştürülmüş cihazlarla çalışır hale getirmeniz gerçekten harika
    Medya senkronizasyonuyla ilgili kod tabanları üzerinde çalışmak ilginizi çekerse bana ulaşabilirsiniz. Serbest sözleşmeli geliştiricileri oldukça sık işe alıyoruz

    • Teşekkürler. Blog yazısına koyamadım ama ticari çözümlerin fiyat listelerine de baktım ve gerçekten pahalıydılar
      Maliyetin ne kadarının donanım, ne kadarının yazılım olduğunu hep merak etmişimdir; profesyonel dijital signage çözümleri güvenilirlik ve kullanım ömrü gibi şeyler de düşünülerek tasarlanmış olmalı
  • Chromebook çıktığında Google’da çalışıyordum; lobi dekorasyonu için fikir topluyorlardı, ben de buna benzer bir şey önermiştim ama reddedildi. Belki de 40–64 cihaz istediğim içindir
    Yine de videoyu senkronize etmeye çalışmazdım sanırım; bunun yerine zamana dayalı animasyonlar yapar ve saatleri ağ üzerinden eşitlerdim
    Örneği burada görebilirsiniz: https://www.youtube.com/watch?v=64TcBiqmVko
    Chrome çalıştıran 8 cihaz var; senkronize edilenler yalnızca ayarlar ve zaman. Cihazların mutlaka ızgara biçiminde olması da gerekmiyor; Boston Science Museum’daki sanal akvaryumdan ilham almıştım

    • Yazar da denemiş ama saatler senkronize kalmamış. Katlanabilir yan notta var
      “Ne yazık ki bu Chromebook’lar zamanı birbirleriyle milisaniye düzeyinde güvenilir biçimde eşitleyemediği için bu yöntem bizde işe yaramadı” diyor
    • Sabit medya söz konusuysa, gerçek zamanlı dinamik üretilen ya da stream edilen bir şey değilse, bu numara epey iş görebilir. Üretken bir şey olsa bile zaman animasyonu süren değer olarak kullanılıyorsa mümkün
      Söylediğiniz gibi iyi saat senkronizasyonu gerekiyor; özellikle ses varsa 20–30 ms fark bile çok göze çarpar, bu yüzden kolay değil. Yine de NTP/PTP ile oldukça yol alınabilir
  • Harika. 4x4 tabletlerle benzer bir şey denemiştim; 16’sını da ADB ve tek bir host’a bağlayıp işin çoğunu otomatikleştirebilmiştim
    Sonra sway’de 16 sanal ekran ve 16 VNC istemcisi oluşturup hepsini Wi‑Fi üzerinden stream ederek test ettim; Wi‑Fi o kadar iyi çalıştı ki daha verimli bir çözüm aramadım
    O süre boyunca PC’mde 19 ekran vardı; bunların 17’si VNC idi ve manzara etkileyiciydi. Hepsinde aynı işi yapabiliyor ya da müzik, htop, takvim, saat, ssh oturumları gibi her birini farklı amaçla kullanabiliyordum
    Ama donanımla uğraşmak epey can sıkıcıydı. Bazılarında throttling oluyordu, bazılarında bağlantı sorunları vardı, bazı piller de şarjı tutamıyordu

  • Uzun zaman önce buna benzer Junkyard Jumbotron vardı. Birbirinden farklı ekranları bir araya getirip daha büyük bir görüntünün parçalarını göstermelerini sağlıyordu
    https://github.com/mitmedialab/Junkyard-Jumbotron
    Video: https://youtu.be/cAUtSVSTbzU?feature=shared

    • Media Lab rastgele çok sayıda eğlenceli şey yapıyor. Bunu modern web teknolojileriyle yeniden yapmak da eğlenceli olabilir
      Hizalama için fotoğrafı e-postayla gönderme yöntemi de kendi çapında ilginç görünüyor
  • Şöyle bir göz gezdirip tüm blogu okumadıysanız: Bu proje lise öğrencileri tarafından lise yılları boyunca yapılmış. Bu yüzden daha da etkileyici görünüyor

  • “Neden bu kadar iyi çalıştığından tam emin değilim ama tesadüfen saçma bir çözüm buldum” ve “en yavaş bilgisayar en hızlı bilgisayarı tutuyor” kısımlarına bakınca, sistem tasarımını darboğaza göre optimize ettikleri için iyi çalışıyor
    Kısıtlar Teorisine bakmak iyi olabilir

  • Bir keresinde masa gibi yerleştirilmiş 5 büyük dokunmatik ekran TV ile benzer bir şey yapmak zorunda kalmıştım. Her yüzey ayrı bir dokunmatik ekran uygulaması olmalıydı; hepsi arka planda senkronize video oynatırken kullanıcılar bir uçtan diğer uca akan öğelerle etkileşime girecek ya da buldukları nesneleri masanın karşı tarafındaki kullanıcıya gönderecekti
    Sonunda tüm ekranları aynı anda sürebilecek bütçe içindeki neredeyse tek donanım silindirik Mac Pro olduğu için onu kullandık; uygulamaları Redis ile senkronize ettik. O kısmı ben yazdım
    Epey iyi çalıştı ama şirketten ayrılmadan önce bitmiş ürünü göremedim. Aslında ayrı bilgisayarları senkronize etmek istemiştik ama yeterince kararlı hale getiremedik; bir süre çalıştıktan sonra çeşitli etkenlerle senkron bozuluyor ve uygulamayı periyodik olarak yeniden başlatmak gerekiyordu, bu da mümkün değildi
    PC’lerin ilk dönemlerinden beri hep istediğim şey, birden fazla cihazı ağ üzerinden birbirine bağlayıp kaynakları paylaşmalarını ve daha işbirlikçi çalışmalarını sağlamaktı. Ofisteki tüm bilgisayarların bir süperbilgisayar gibi kullanılıp işleri hallettiğini hayal ederdim. Elbette bu çok zor bir problem; uygulamaların ve işletim sistemlerinin buna göre tasarlanması, yeni algoritmalar gerekmesi lazım. Aynı kart üzerindeki tek bir cihazda bile çoklu işlemcileri düzgün kullanmayı öğrenmemizin uzun sürdüğünü düşününce daha da öyle; ama seti@home veya folding@home gibi projeler bunu bir ölçüde yaptı ve bir gün bilgisayarın kendisinin bunu desteklemesini umuyordum

  • “Dizüstülere kurabileceğim ‘kendi dağıtımımı’ yapmaya başladım. Sistem en minimal yapılandırmayla başlamalı, masaüstü ortamı olmadan kiosk modunda bir Chromium örneğini otomatik başlatan zarif bir betik olmalıydı. İlk başta NixOS’u denedim ama bu Chromebook’ların depolama alanının çok küçük olduğunu, bu yüzden mümkün olmadığını hemen fark ettim; her kurulum denemesi de başarısız oldu. Sonunda vazgeçip Debian minimal kurulumuyla başladım, fakat Debian kurulumunda çok fazla düğmeye basmak gerektiğini ve bunun çok zaman kaybettirdiğini fark ettim; ‘FAI - Fully Automatic Installation’ ile web aracı FAI.me’yi keşfettim” kısmına bakınca, DietPi, OpenWrt ve OpenBalena’da da belirli paketleri seçip minimal bare-metal üzerine kurmaya yönelik otomatik kurulum seçenekleri var
    Başka masaüstü dışı seçenekler var mı merak ediyorum

  • En ilginç nokta, coreboot’a geçince donmaların çözülmüş olması. Bunun neden olduğuna dair bir teori var mı merak ediyorum
    ACPI/DSDT ile ilgili olabilir ya da orijinal BIOS’un donanım denetleyicisini yanlış başlatmasından kaynaklanıyor olabilir gibi görünüyor

    • Watchdog timer devreye girmiş olabilir