- 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.iotabanlıc-syncdüşü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
ectoolfan 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.iokullanarak istemciler arasında video oynatmayı eşleyen ExpressJS sunucu/istemci sistemic-syncoluşturuldu - Temel yapı, sunucu
playolayı 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
startolayı yayması sağlandı- En yavaş bilgisayarın hızlı bilgisayarları bekletmesi sağlanarak video yükleme süresi kazanıldı
- Her ekran 10 adet
startolayı 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-syncistemci 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ı
corebootile ü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 ACbir 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_IDoluşturma- Host adını
csync-client-$KIOSK_IDolarak ayarlama - Okul WiFi ağına bağlanma
- Kullanıcı ve izinler oluşturma
openboxile 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
corebootuygulanmış Chromebook’a takıldığındac-syncistemcisi 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
ectoolile erişilebildiği için fan hızı elle ayarlanabiliyor - Çevrimiçi belgeler yetersizdi ve
corebootile Google tarafındakiectoolfarklı 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
ffmpegile 10 bölüme kesilip her ekrana atandı - Bölme script’i, her ekran konumuna uygun segmentleri
crop=1366:768:x_offset:0biç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
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
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
“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
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
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