2017-01-17 The Baby Owner’s Manual

January 17th, 2017 by Vasil Kolev

Чел съм много неща на Стивън Кинг.

Чел съм за геноцида в Руанда.

Чел съм за психопати: 1, 2, 3.

Чел съм Колимските разкази и Архипелага ГУЛАГ.

Както и по много други теми, заради които съм се депресирал за по седмица-две.

Всичките обаче не са толкова ужасяващи, колкото The Baby Owner’s Manual, след което си извадих една бутилка и си наливах известно време. Ако Стивън Кинг пропише такива книги (или по темата), вероятно ще има много припаднали читатели.

Искрено се надявам да не сънувам нищо от книгата.
(и не знам кога ще събера желание да изчета книгата за бебешки болести, дето ми се мотае наоколо)

2017-01-09 Учредително събрание на ДА България

January 9th, 2017 by Vasil Kolev

Учредителното събрание на ДА България беше по-интересно, отколкото очаквах, и горе-долу толкова тежко, колкото очаквах.

Не е тривиална задача да се съберат на едно място 1500 човека (мисля, че на други места писаха за огромната опашка и препълнената зала, аз ако не бях от техническия екип не е ясно кога щях да успея да вляза). Още по-малко тривиална е с такова количество хора да се учреди политическа партия (законовият минимум за учредителното събрание е 500 човека, но въпреки това в оня ужасяващ студ хората се бяха вдигнали, явно от притеснение, че може да не съберем кворум).
А да се реализира гласуване с вдигане на ръка на целия устав точка по точка, разни хора и управителни органи и това да се събере в един ден си е постижение. Имам някакви спомени как едно време партии са се учредявали по цяла седмица с конгреси и изказвания, определено е имало причина (особено ако едно гласуване отнема половин час да се преброи). Щях да мрънкам на някой защо нямаме електронно гласуване, ама после се усетих, че ще е перфектното нещо да се заядат в съда и да не приемат регистрацията …

Официален запис ще има по-нататък (хората, които снимаха имат отделно материал от всички камери, а и вероятно ще искат да стабилизират някои моменти), но аз преди това съм изрязал от dump-а интересната за мен час – представянето на членовете на националния съвет, около 100 човека с 30 секунди за всеки (които никой не пресрочи). Правих една разбивка по професии (която не е съвсем точна, явно съм пропуснал няколко човека и трябва да намеря време да го гледам пак), изглежда по следния начин:
18 адвокат
10 ИТ
9 предприемач
7 преподавател
5 юрист
4 икономист
3 студент
3 музикант
3 мениджър
3 маркетинг
3 инженер
3 бизнесмен
2 психолог
2 политолог
2 писател
2 оператор
2 неясен
2 лекар
2 журналист
2 дизайнер
1 фотограф
1 фармацевт
1 социолог
1 реклама
1 математик
1 лесовъд
1 издател
1 еколог
1 директор планинска спасителна служба
1 блогър
1 бивш спортист
1 актьор

(описанието им е ужасно субективно и основно моя работа, не винаги пряко отговарящо на думите им, та ако някой иска нещо по-точно, да види като се появят официалните данни или да гледа сам).

Хората, които видях там отговарят на моя критерий – изглеждат да може да се върши работа с тях (с някои и съм работил). Има много адвокати и юристи (но не са мнозинство :) ), и вероятно това е партията с най-много ИТ хора в неин орган. Не изглежда и да има заблудени хора, че ей-сега магически ще вземем властта и ще решим всичките проблеми на човечеството, т.е. ясно е че цялото нещо ще е мъчително, бавно и трудно (накратко, като прилична част от ежедневната ми работа:) ).

p.s. търсят се още хора, които имат желание да се включат, подробности има на сайта, който иска може и да ме пита директно.

2017-01-07 streaming

January 7th, 2017 by Vasil Kolev

Малко наблюдения по stream-ването и платформите.
(днес stream-вах учредителното събрание на Да България (в която вече съм и член). По темата за Да България ще пиша някой друг път)

Facebook имат една от най-малоумните streaming платформи, на които съм попадал. Освен разните изисквания и горна граница на качеството (максимумът е 720p), event-ите им expire-ват доста бързо (т.е. не можеш да си го създадеш от предната вечер, като в youtube), на едно-две прекъсвания приключват и event-а (ако се налага човек да си пипне настройките няколко пъти, трябва да го създава наново) и имат и лимит за продължителността (което е особено дразнещо). Като за капак, човек ако няма flash не може да си пусне stream-а да е live каквото и да прави, та докато си правех тестовете се наложи да си ползвам виртуалката с windows (и тестовия facebook account на жената).

Youtube пък имат едно малко неразбирателство с ffmpeg, че пращат някакъв keepalive по RTMP сесията, който ffmpeg-а го няма за нищо, не го чете и в един момент едни tcp буфери се напълват (говорим за 16-тина байта на минута-две, та отнема няколко часа, че да се прояви) и се троши връзката. Слава богу, не махат event-а толкова бързо, колкото facebook и може да се рестартира.

Моя си streaming server си работеше най-добре (един nginx с mod_nginx_rtmp). Понеже имаше малко проблеми да reencode-вам всичко локално, бълвах на 10mbps директно изхода от хардуерния encoder до marla, от там дърпах с 3 ffmpeg-а и качвах смачкания на 1mbps stream до facebook, youtube и до същия nginx, за да мога да си го гледам.

И да си имам редът за бълване до facebook (понеже ми отне един следобед да го докарам както трябва, най-вече заради борбата с оня flash) – двете важни неща за -g 45 (може и 60), имат изискване за keyframe поне на всеки 2 секунди, и -r 30, понеже изискват 30-кадрово видео. Другото е стандартно – H.264, AAC, 44100hz (и моно звук, понеже такъв ми подаваха). Добавката с -af volume=60d трябва да се махне за всички, на които не им подават звук на ужасяващо ниски нива.

(за всички, които имаха забележки за звука, няма хубав automatic gain control, който бих могъл да сложа, за да изравнява добре нивата на това, което влиза. В залата микрофоните се чуваха с различна сила, много хора знаеха къде да говорят и нямаше и как да се направи нещо повече. Аз лично щях да търся начин да окича колкото мога повече от участниците с headset-ове, което па екипът ни много много го мрази)

ffmpeg -i rtmp://strm.ludost.net/st/XXXXX -r 30 -c:v libx264  -b:v 1000k -s 1280x720 -preset:v veryfast -threads 6 -minrate 1000k -r 30 -g 45 -maxrate 1000k \
	-c:a libfaac -ar 44100 -ac 1 -b:a 128k -af 'volume=60d' -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/XXXXXX'

Иначе е неприятно, че трябва да живеем на proprietary кодеци. При някакви скорошни тестове около FOSDEM пак се оказа, че VP9 още няма как да се encode-ва в близо до реално време без поне два пъти процесорната мощ, нужна за H.264, има малко поддръжка и никакъв хардуер, който може да го дава.

p.s. Важен факт – за всичко, което се ползва по време на streaming-а трябва да има хубав работещ КАБЕЛЕН internet, и като резерва, 3G, през което да се работи като се чупи локалния wifi (щото той със сигурност ще умре по някое време).

2016-12-31 равносметка

December 31st, 2016 by Vasil Kolev

И време за стандартната годишна равносметка…

– Ще ставам баща. Това мисля, че за всички е доста изненадващо, даже малко и за Елена :)
– Избутахме OpenFest 2016 – много работа, много неща, като цяло изяде сериозна част от времето ми за годината;
– Имах количество занимания около initLab, който още оцелява;
– Направих няколко BGP workshop-а (и може би скоро трябва да направя още един, докато мога);
– Занимавах се с видеото на FOSDEM 2016, и догодина пак (направили сме бая интересен setup, който се интересува може да види в github);
– В общи линии за да тестваме нещата за FOSDEM ходихме да правим видео/аудио записване и streaming на State of the Map 2016;
– Направих една лекция (на PlovdivConf) и планирах и една на тема теоретична политика, която не можах да довърша (като цяло имам вече поне 5 висящи написани до средата лекции);
– Умря Pieter Hintjens;
– Да не повярва човек, не писах повече тая година…

И да стои и да се вижда, ето списъкът висящи ми лекции:
– “Теоретична политика” (системи за гласуване/взимане на решения, компромиси и т.н.);
– Debug workshop;
– VoIP/asterisk workshop (или цял курс);
– Приложение на принципи от системната администрация в реалния живот;
– Представяне на initLab с много картинки;
– Криптография за журналисти;
– Подкарване и поддръжка на собствен mail server;

Мисля, че имах идея и за още някакви. Един хубав ден мога да допиша поне една-две от тях и да ги кача в блога, че време за говорене не се намира :)
(а много ми се иска да систематизирам нещо по темата системи от хора и други неща, но това няма да стане в следващите една-две години)

2016-12-30 новата marla

December 30th, 2016 by Vasil Kolev

Малко информация за upgrade-а на marla:

X10DRi-O дъно (C612 chipset), един Xeon E5-2620v4), 64GB RAM, 4x4TB HGST дискове, LSI megaraid, едно 1TB samsung-sско SSD, приятна 2U кутия.

Има доста още работа по нея, най-вече да навържа monitoring-а на различните хардуерни неща (smartctl не иска да си говори с контролера и да ми дава температурата на дисковете, например), както и генерално да доразчистя някакви неща там (например чак днес си оправих автоматичното подновяване на сертификатите). Има и доста други полезни неща за вършене, например да видя как да направя прилично multi-tenant схема с hhvm и nginx, за да пренеса малко тежки сайтове натам.

Но вече спокойно съм вдигнал 16 виртуалки, на които Велин да изтезава студенти.

2016-12-30 33c3 – останалите лекции

December 30th, 2016 by Vasil Kolev

The Moon and European Space Exploration беше в общи линии рекламна (и бая забавна) лекция на European Space Agency, в която директорът и (на голяма скорост) разказа какви неща са правили и се канят да правят, най-вече база на луната като отправна точка за изследване на други неща из космоса.

Interplanetary Colonization беше в общи линии преглед на съществуващите и вероятните в бъдеще технологии за космически двигатели за дълги разстояния.

Dissecting HDMI (гледах го на запис) беше доста просвещаващо и освен за стандарта и проблемите разказа и за устройството, което правят, което в комбинация с voctomix може да се окаже перфектното решение за stream-ване на конференции – може да успеем да смъкнем setup-а на доста по-малко устройства, конвертори, черни магии за скалиране и т.н.. Хората и раздават хардуер за който иска да дописва по него, много ми се искаше да имах времето за целта…

An Elevator to the Moon (and back) (запис) е пак преглед на технологиите за космически асансьор и за какво можем да го ползваме (имаше огромна Q&A след това). Като цяло в момента имаме технологията да направим такъв на луната или Марс, но за земята още не сме докарали верния материал.

Community на Мич Алтман беше за hackerspace-овете, обществата и като цяло за хакерите, хубава мотивираща лекция.

33C3 Infrastructure Review не беше толкова интересно, колкото предишни години – нямаше много подробности за мрежата, видео екипът не можа да си върже лаптопа (което беше голямо забавление за цялата публика) и като цяло най-интересна беше частта на мрежата за пневматична поща.

А на закриващата церемония наляха малко течен азот в една пластмасова бутилка, пуснаха я в един голям леген и я заляха с пластмасови топки. Гърмежът ги метна почти до тавана.

(и още няма идея къде ще е 34C3)

(мисля да гледам още, особено това, което доктора спомена в коментарите на последния post)

2016-12-29 33c3 – малко лекции

December 29th, 2016 by Vasil Kolev

Тази година гледам 33c3 от вкъщи, и май гледам по-малко лекции. Ето какво съм гледал до тук:
(обработените лекции са на media.ccc.de, ако ги няма тук може да се търсят на relive)

What could possibly go wrong with <insert x86 instruction here>? беше описание и демонстрационен код как може да чрез ползване на кеша (flush-ване, напълване и т.н.) да се комуникира между несвързани процеси или дори виртуални машини, които се schedule-ват на същия процесор (т.е. и между core-ове, които споделят кеш).

How Do I Crack Satellite and Cable Pay TV? беше за reverse-ване на чиповете, които декриптират сателитна телевизия, прилично интересно.

Building a high throughput low-latency PCIe based SDR са хора, които разработват software-defined radio на mini PCIe карта, което може да се използва за всякакви по-сериозни цели (има включително синхронизация на часовника от GPS), като за момента са до средата (не са си постигнали целта за скорост на устройството), и ако постигнат прилична цена, това може да се окаже идеалното устройство за правене на софтуерни GSM/LTE неща.

Shut Up and Take My Money! беше за как са счупили на някакви хора мобилното приложение, което се занимава с потребителски транзакции. Звучеше като да трябва да затворят тия, дето са го мислили/писали.

What’s It Doing Now? беше доста интересна лекция за автопилоти по самолети, как тоя тип автоматика трябва да се следи внимателно и като цяло, че нещата не са толкова автомагически, колкото ни се иска. Лекциите за самолетни проблеми винаги са интересни :)

Nintendo Hacking 2016 описа какво са счупили по разлините nintendo устройства, exploit-и по boot loader-и и всякакви такива неща. Това беше една от лекциите, в която се споменаваше техниката с glitching – да се подаде по-нисък волтаж за малко, така че дадена инструкция да се намаже и да има шанс да се JMP-не някъде в наш код в някакъв момент, така че да можем да dump-нем нещо.

Where in the World Is Carmen Sandiego? беше лекция за чупенето на системите за резервиране на самолетни билети и като цяло пътувания. Силно тъжно, казаха си в началото, че няма много хакване в лекцията, понеже нещата са твърде счупени и лесни за атака. Кратък съвет – не си публикувайте снимка на boarding pass-а.

You can -j REJECT but you can not hide: Global scanning of the IPv6 Internet е разработка с DNS за сравнително лесно сканиране на всички съществуващи IPv6 DNS PTR записи, та да се намерят повечето съществуващи сървъри. Доста идейно и вероятно ще го тествам някъде :)

Tapping into the core описва интересно устройство за дебъгване/слушане на intel-ски процесори през USB и вероятно и мрежа, т.е. дебъгер, който може директно да пипа процесора. Звучи многообещаващо (лекцията гледаше основно на това като начин за правене на rootkit-ове).

Recount 2016: An Uninvited Security Audit of the U.S. Presidential Election беше много празни приказки за изборите в щатите, за пре-преброяване, в което не са открили проблем, и като цяло за счупената им система.

The Untold Story of Edward Snowden’s Escape from Hong Kong разказваше за двете седмици на Edward Snowden в Хонг Конг и бежанците, при които са го крили, преди да отлети, заедно с призив за fundraiser за тях.

State of Internet Censorship 2016 беше нормалното описание, заедно с проектите, чрез които се изследва. В общи линии изводът беше, че вече цензурирането е узаконено почти навсякъде, където се случва и става все по-често явление някоя държава да си спре internet-а за малко, около разни събития.

Million Dollar Dissidents and the Rest of Us описа какви таргетирани методи се използват от различни правителства (и кой им ги продава и учи) за hack-ване и вадене на данни от всякакви устройства на неприятни за тях хора. Нещата са прилично напреднали и е все по-ясно как повечето ни софтуер не става за secure дейности.

On Smart Cities, Smart Energy, And Dumb Security беше за колко са счупени “smart” електромерите и как сигурността на тия неща никой не и обръща сериозно внимание.

Dissecting modern (3G/4G) cellular modems беше интересно описание на съществуващ хардуер, който може да се използва за 3g/4g модем (който се използва в единия iPhone даже), и който накрая се оказа, че търкаля android/linux в себе си (т.е. може спокойно да се каже, че в iPhone 6 (ако не се лъжа) има един linux/adroid).

Тия дни ще догледам още някакви от записи и каквото остава утре и ще пиша пак. Много ми се иска да изгледам повечето неща за random генераторите и лекцията за HDMI.

2016-12-14 upgrade

December 14th, 2016 by Vasil Kolev

Ще сменям хардуер на marla утре вечер, 15 декември, в периода от 7 до 9, може да се очаква някакъв downtime в рамките на 1 час.

(и понеже блогът е на marla, мога спокойно да кажа, че ако не виждате това съобщение, значи сменям машината)

2016-12-01 видео записи от OpenFest 2016

December 1st, 2016 by Vasil Kolev

Ето качените записи от OpenFest 2016. И тази година пак сме извадили музикалните изпълнения, за който се интересува:

Видео архив:
Първи ден, втори ден, пиано почивките.

youtube:

Общ playlist:
Общ playlist, technical track, advanced technical track, civic hacking, OpenBiz, social, education, music pauses, lightning talks.

2016-11-23 Интерком и телефони на OpenFest 2016

November 23rd, 2016 by Vasil Kolev

Интерком

Видео екипът има нужда от начин, по който да си комуникира между операторския пулт и камерите, в общи линии еднопосочно (т.е. режисьора да може да каже "камера 1, мръдни малко в ляво"). Предишни години за целта се употребяваха различни неща, най-често някаква част от комплектите безжични микрофони (един предавател и няколко приемника). Тази година микрофоните ни бяха кът, за това сглобих едно просто решение от ffmpeg и raspberry pi-та:

На контролния лаптоп закачахме какъвто-и-да-е-микрофон (в случая – едни jabra headset-и, които бяха под ръка) и с ffmpeg ги бълвахме по multicast по мрежата:

ffmpeg  \
    -fflags nobuffer \
    -f alsa -i hw:0,0 \
    -acodec aac -tune zerolatency -ac 1 -b:a 128k \
    -f mpegts 'udp://227.0.9.1:9000?pkt_size=128'

Скриптът взима звукът от alsa-та от микрофона (в случая hw:0,0) и ги пуска на 227.0.9.1 с малък размер на пакета, за по-ниска латентност. Ако трябва да се пусне под windows, ‘-f alsa -i hw:0,0’ се сменя с нещо като ‘-f dshow -i audio="Microphone"’ (като "Microphone" трябва да се погледне как точно се казва, понеже windows-а странно кръщава нещата, Любо беше намерил как точно).

На няколкото raspberry pi-та до камерите се пускаше следния скрипт:

while /bin/true; do
ffmpeg  \
    -fflags nobuffer -probesize 32 -i \
'udp://227.0.9.1:9000?timeout=1000000&fifo_size=100&overrun_nonfatal=0' \
    -f alsa hw:0,0
done

Това слуша на multicast-а и play-ва каквото му дойде, като има timeout от 1 секунда без никакви данни, за да гръмне и да се рестартира. Така може да издържи на всякакви мрежови проблеми и в общи линии гарантира възстановяване до 1 секунда, след като се оправи мрежата.

Това като цяло е доста хакаво и сглобено в последния момент. При мрежата, която имахме, за догодина спокойно ffmpeg-а може да бъде заменен с един asterisk с конференция и телефони, които се закачат в нея, така включително ще можем да смъкнем още латентността (на този беше около 300-400ms) и да направим двупосочен интеркома (въпреки че хората не звучаха много въодушевени). Другото, което сравнително лесно трябва да може да се добави е noise reduction, понеже доколкото знам имаше някакъв, или от микрофона и усилването му, или от самите pi-та (като за второто няма да се оправим само софтуерно).

Телефони

Кодът е качен в github, и е съвсем съвсем тривиален:

  • С един php модул (phirehose) се дърпат tweet-ове по признак и се пишат във файлове;
  • Друг скрипт проверява на какъв език са, с espeak ги обръща в говор и ги дава на asterisk-а чрез call file да ги изговори на някого.

Цялото нещо отне чисто час-два да се напише и тества. Изглежда бая грозно (и може да седна да го оправя), но върши доста прилична работа и може да се използва като основа за всякакви подобни неща.

На самия OpenFest реализацията беше, че имаше наслагани 3 стари черни телефона на различни места, които бяха вързани през grandstream ATA устройства (понеже бяха единствените, които поддържаха импулсно набиране) и когато дойдеше tweet с #openfest2016telefon, asterisk-а звънеше на трите едновременно и който пръв вдигнеше го чуваше.

Архив на всичките неща, дето са казани по телефона може да се намери тук.

2016-11-22 Мрежата на OpenFest 2016

November 22nd, 2016 by Vasil Kolev

Нямахме голяма промяна от миналата година. Разликите бяха следните:

  • Тази година повечето switch-ове в опорната мрежа бяха tplink SG3210, имахме само 2 cisco-та. tplink-овете са по-тихи, по-малки, (буквално) железни и стават за странни deployment-и. Ако имаха и PoE, щяха да са направо невероятни.
  • Имахме още един switch, за NOC-а в мазето (който беше и единствения leaf в мрежата). Тази година стаичката за VOC беше оставена само на видео екипа, а мрежовия се ширеше в едно мазе.
  • Понеже имахме две зали за workshop-и, имахме малко повече user-ски switch-ове, в общи линии от кол и въже;

Ето тазгодишната схема.

С техника ни услужиха пак Светла от netissat (нейния switch вече 3-4 години е в опорната ни мрежа), Стефан Леков (noc switch-а и резервния сървър) и digger (два microtik-а за workshop switch-ове). Останалото беше от мен и initLab.

Голяма част от мрежовия setup беше организирана през github-ски issue-та, та лесно може да видите какво ни се е случвало по време на подготовката.

Тази година имаше повече наши "клиенти" на мрежата – интеркомът на залите беше по IP и имаше пръснати разни странни телефони, които бяха из мрежата. Като цяло wired мрежата не изглежда да се ползва от посетителите, но все повече се оказва полезна за нас.

Пак използвахме за сървърно подстълбищното пространство от другата страна на залата, и съответно имаме снимки преди и след. Не е от най-подходящите – всичко наоколо е дървено, тясно е и отдолу минава тръбата за парното (т.е. сме може би едно от малкото сървърни, които вместо климатик имат парно), но е точно до ел. таблото, далеч е от потоците хора и на достатъчно централна позиция, че да можем да пускаме от него независими трасета.

Тази година преизползвахме кабелите от миналата година и взехме един резервен кашон кабел, та нямахме никакви проблеми с изграждането на мрежата.

За uplink тази година ползвахме същата оптика на NetX, но с гигабитови конвертори и 300mbps, та не усетихме никакъв проблем със свързаността.

Използвахме и същия DL380G5 за сървър/router, като тази година Леков пусна още един такъв като backup. Пак го използвахме да encode-ва 1080p stream-а от зала България, въпреки че май тая година нормалния ни encoder щеше да се справи (за една година софтуерът е понапреднал).

Тази година се наложи да променим номерата на VLAN-ите, понеже една част от AP-тата (едни големи linksys-и) не поддържаха VLAN tag-ове над 64. Съответно адресният ни план изглеждаше по следния начин:

IPv4

id  range           name
10  185.108.141.104/30  external
20  10.20.0.0/24        mgmt
21  10.21.0.0/22        wired
22  10.22.0.0/22        wireless
23  10.23.0.0/24        video
24  10.24.0.0/24        overflow

IPv6

10  2a01:b760:1:2::/120
21  2a01:b760:2:4::/62
22  2a01:b760:2:5::/62

По firewall-а и forced forwarding-а нямахме разлика – пак пуснахме proxy_arp_pvlan за потребителските VLAN-и, филтрирахме 25ти порт и не се допускаше трафик до management/video/overflow VLAN-ите от нормални потребители.

Имахме пълна IPv6 поддръжка в потребителските VLAN-и (wired и wireless), като тази година нямахме проблемът с изчезващият IPv6 за random хора – явно най-накрая странният bug е бил ремонтиран.

Изобщо мрежата беше максимално стабилна и при събрания опит може да планираме догодина повече вътрешно-екипна комуникация върху нея, и всякакви странни екстри (например стационарни телефони, повече монитори с информация, някакви сигнализации, работни станции на рецепции и всякакви весели неща). За сега най-големите потребители са wireless-а и видео екипа.

2016-11-21 VoctoMix на OpenFest

November 21st, 2016 by Vasil Kolev

Ситуация

За OpenFest имахме две кутии от тези от FOSDEM, които в общи линии ни даваха възможност да включим почти произволен източник на видео в тях и да го изкараме от мрежата. Те вървят в комплект от две – едната се използва, за да се включи в нея лектора, другата – за камерата. С тези две кутии и малко софтуерно видео миксиране може да се направи много лесно добър setup за видео запис на една зала.

Схемата на setup-а може да се види в github, като лесно може да се види, че е доста по-прост от другите, които използваме. Негов вариант мислим да използваме за FOSDEM 2017 (което може да се наблюдава в repo-тата в github – issue-та, wiki и всякакви работи).

VoctoMix

Липсващият компонент в цялата работа беше софтуерен миксер, който да ползваме. Пробвахме различни – първо един ffmpeg с малко patch-ове (чупи се твърде лесно), после OBS (който leak-ва памет като гламав и не е особено стабилен), и накрая се спряхме на voctomix, който е разработка на CCC и в общи линии е прекрасен хакерски инструмент, който работи по следния начин:

  • Има входове на TCP портове за следните неща:
    • Видео потоци (камери, лекторски лаптоп)
    • Поддържащи потоци (фон, какво да се пуска докато не сме live и т.н.)
    • Команди за разни действия (смяна на картина и т.н.)
  • Изходи, пак по TCP, за
    • Видео поток
    • Аудио поток
    • Копие на всеки входящ stream
    • preview на потоците и изходящата картина

Софтуерът в общи линии просто switch-ва между няколко неща (някоя картина на fullscreen, picture-in-picture в някакви варианти и т.н.) и вади поток, който може да се използва. Има отделно приложение (voctogui) което се закача към него и се използва като конзола – може да показва preview на потоците и да подава команди към основния процес (voctocore).

Как го използвахме

Излъчване от кутиите

Като за начало, изкарването на поток от кутиите става с ffmpeg/avconv, по UDP, по multicast. UDP, понеже е по-издръжливо на някакви random прекъсвания и няма да създаде десинхронизация, multicast, за да може да се гледа от повече от едно място (например за проверка какво точно излиза). Командата изглежда по следния начин:

# these are needed, because the default socket size is too small.
echo 81921024 > /proc/sys/net/core/wmem_max
echo 81921024 > /proc/sys/net/core/wmem_default

echo 81921024 > /proc/sys/net/core/rmem_max
echo 81921024 > /proc/sys/net/core/rmem_default

/usr/local/bin/bmd-streamer -f /usr/lib/firmware -k 1000 -S hdmi -F 0 | \
 ffmpeg -i - -c copy -f mpegts 'udp://227.0.0.1:9000&overrun_nonfatal=1&buffer_size=81921024&fifo_size=178481'

Интересното тук са параметрите на UDP stream-а – гигантски буфери (които и по-горе се казват на kernel-а), така че каквото и да се случва, да не се бави писането в буфера. Като цяло не е проблем да се губят пакети, но е доста лошо да се получава забавяне в целия stream, понеже води до десинхронизация. (да се губят пакети също е лошо, и за целта работя по нещо, което да вкарва forward error correction в тоя поток, един добър човек е написал patch за ffmpeg, реализиращ pro-mpeg, който има точно такава функционалност, надявам се да успеем да го ползваме на FOSDEM)

Приемане във voctomix

Самият voctocore приема потоците точно във видът, в който е конфигуриран (в нашия случай 1280×720, 30fps, audio в pcm_s16le на 44100hz), в MKV контейнер. За целта скриптовете, които го подават изглеждат ето така:

#/bin/sh
confdir="`dirname "$0"`/../"
. $confdir/default-config.sh
if [ -f $confdir/config.sh ]; then
    . $confdir/config.sh
fi


ffmpeg -y -nostdin \
    -i 'udp://227.0.0.1:9000&overrun_nonfatal=1&buffer_size=81921024&fifo_size=178481' \
    -ac 2 \
    -filter_complex "
        [0:v] scale=$WIDTH:$HEIGHT,fps=$FRAMERATE,setdar=16/9,setsar=1 [v] ;
        [0:a] aresample=$AUDIORATE [a]
    " \
    -map "[v]" -map "[a]" \
    -pix_fmt yuv420p \
    -c:v rawvideo \
    -c:a pcm_s16le \
    -f matroska \
    tcp://localhost:10000

Това в общи линии казва "вземи udp stream-а, scale-ни го до колкото искаме, сгъни пикселите и аспекта да са точно каквито ни трябват, и го прати като mkv на порт 10000". Сгъването на пикселите и аспекта (setsar, setdar) се налага основно когато не може да се промени изхода на камерата и идва в нещо странно като 1920×1088, което води до малко по-различна форма на пикселите.

За да работи цялото нещо, имаме два такива скрипта (по един за box), както и един подобен, който просто loop-ва едно PNG, което играе ролята на фон. В оригиналните скриптове хората са използвали видео за фон на picture-in-picture, но това е по-объркващо за гледащите и не го ползваме.

Излъчване и запис при voctomix

Излъчването и записът са в общи линии много подобни скриптове, като ще покажа само този, който праща до restreamer-а:

#/bin/sh
ffmpeg -y -nostdin \
    -i tcp://localhost:15000 \
    -threads:0 0 \
    -aspect 16:9 \
    -c:v libx264 \
    -maxrate:v:0 2000k -bufsize:v:0 8192k \
    -pix_fmt:0 yuv420p -profile:v:0 main -b:v 512k \
    -preset:v:0 ultrafast \
    \
    -ac 1 -c:a libfdk_aac -b:a 96k -ar 44100 \
    -map 0:v \
    -map 0:a -filter:a:0 pan=mono:c0=FL \
    -ac:a:2 2 \
    \
    -y -f flv rtmp://10.23.0.1:1935/st/STREAM

(скриптът е примерен, понеже доработвах след това нещата)

Като цяло, просто се взимат raw данните от порт 15000, encode-ват се до H.264 и се пращат до сървъра. По същият начин може да се обръщат във WEBM и засилват, но той иска много повече процесорно време и не сме стигнали до там, че да го ползваме.

Екстри за voctomix

Нещо, което не включихме на OpenFest, но ще има на FOSDEM е една дребна доработка, която позволява с много малко ресурси хора отдалечено да контролират voctomix-а. По принцип voctogui не е лек процес и има много сериозни мрежови изисквания, ако не се стартира локално (от порядъка на 1Gbps само за него), но позволява всякакви ужасяващи неща с малко дописване. С един прост скрипт, който прави screenshot веднъж в секунда, и съвсем прост друг, който подава команди ще имаме начин определени хора да имат контрол върху излъчването.

Също така нещо, което ползвахме донякъде на OpenFest за monitoring на stream-а е един друг скрипт с mpv, който взима списък URL-та и някакви имена към тях и ги пуска в отделни подредени един до друг прозорци на екрана, като за всеки overlay-ва един bar с нивото на звука, така че да може да се вижда дали е ок (понеже не е практически възможно да се слушат няколко зали едновременно). Проблемът му е, че се иска бая процесорно време, за да се декодират повечето потоци и един T420 с i7 процесор се озорваше с 6те потока от феста. Как изглеждаше екрана може да видите тук.

Опериране

Работата с voctomix не е сложна, но за момента пълна с неща, които имат да се свършат. Ето как изглежда (засега, работим по автоматизация) процесът на стартиране:

  • voctocore
  • voctogui
  • скриптове за приемане от камери (cam1.sh, grab.sh)
  • скрипт за генериране на фон
  • скрипт за stream-ване
  • запис (record.sh)

След което от voctogui при нужда се сменят различните картини. Като цяло е доста по-просто за разбиране от по-големите setup-и с конвертори и т.н., но и с по-малко функционалности.

Доколко добре работи?

Работи прекрасно, въпреки че се опитваме да открием един бъг с забавяне на audio-то, който се появява в някакъв момент. Започвам да си мисля, че има някакъв проблем със самия лаптоп, с който правим миксирането.

Какво още можем да искаме?

Хрумнаха ни няколко екстри, които да добавим, така че да стигнем функционалността на хардуерния setup:

  • Начин да излъчваме екрана за проектора от при нас. Това ще иска някаква доработка, за да смъкнем латентността на цялото нещо под 100ms, понеже иначе ще е доста забележимо (представете си как лектора прави нещо и проекторът се променя след 5 секунди). Единият от вариантите, който ни хрумна е проекторът да е вързан на едно pi и то директно да може да избира кой multicast да гледа (някоя камера, лаптопа на лектора или нещо трето).
  • Overlay надписи по време на лекцията – трябва да видим какво има да се пипне още, мисля, че има някаква такава функционалност (или може да ги сложим във фона).
  • По-добра синхронизация на различните потоци – ако работим с няколко камери, може да се окаже проблем, че едната върви с няколко кадъра след другата и трябва да си поиграем със забавяне.

Като цяло, аз съм много щастлив от voctomix и ако успея да убедя екипа, догодина можем много повече да ползваме него, отколкото чисто хардуерния setup (просто ще ни трябват мощни машини, за да се справят с encode-ването, че засега успяваме да работим само на 720p, без да подпалим лаптопа).

2016-11-10 OpenFest 2016

November 10th, 2016 by Vasil Kolev

“I ran. I ran until my muscles burned and my veins pumped battery acid. Then I ran some more.”
(екипът на OpenFest)
(оригиналът е от Fight club на Чък Паланюк)

И мина OpenFest 2016.

Няколко месеца подготовка, три дни лудница (първия – за setup на нещата), купища неща, които се счупиха и оправяхме в движение, проблеми с хора и техника, и всякакви забавления около това. Още не мога да си събера цялата глава, та ще карам накратко:

Първо, голяма благодарност на целия екип, че оцеля и не ме подпали, задето ги забърках в това;

Второ, имам да пиша нови post-ове по следните забавни теми (или по-скоро да ръчкам хора да ги напишат): мрежа, wifi, monitoring, voctomix, интеркома, телефоните дето звъняха.

Трето, трябва да изкараме официално информация за записи и streamdump-ове. За всички много нетърпеливи ето нещо, което да си пускат, докато чакат.

Четвърто, догодина още доброволци няма да ни се отразят зле. Ще има спам по темата в блога ми и вероятно по сайта на феста :)

И като финал, още обмислям как промяната на заглавието на блога ще ми се отрази на занимаването догодина. Детският кът, дето направихме тая година няма да може да се справя с чак толкова малки деца…
(разбира се, ако няма трета световна война и не се наложи да отложим OpenFest 2017, което като гледам новините може и да стане)

Гласуване за лекции за OpenFest 2016

October 10th, 2016 by Vasil Kolev

You all know the drill: vote.openfest.org.

Резултатът ни помага да подредим лекциите. Гласувайте, това поне е по-смислено от идващите избори (за които отказвам да пиша, не само защото ни ги набутаха на една от датите на феста)

Pieter Hintjens

October 9th, 2016 by Vasil Kolev

Изтървал съм, а снощи си мислех да пиша до FOSDEM да ги питам не искат ли да го поканят да говори за един последен път. Явно съм закъснял…

Не мисля, че мога да кажа много за него. Скоро научих за него, от един post на Meredith Patterson, и се зачетох в нещата, които е писал. Рядко ми се е случвало толкова да харесам как и какво пише някой, и за да не губя място, ще остава link-ове към няколко ценни негови неща:

Confessions of a necromancer, за различни негови софтуерни проекти;
A protocol for dying;
Scalable C (която май ще си остане недовършена);

… и изобщо повечето неща, които е писал.

Книгите му могат да се намерят по Amazon или разни други места online.

OpenFest 2016 call for volunteers

October 5th, 2016 by Vasil Kolev

И ако не сте чули, идва OpenFest 2016.

По случая се търсят още доброволци. От собствения си опит мога да кажа, че участието в организацията е толкова забавно, че човек чак има махмурлук след това :). Ако ви се занимава с най-голямото подобно събитие в България, запишете се в системата ни за целта. Имаме следните екипи, от които може да си изберете за участие.

Елате да се позабавляваме – миналата година екипът беше от около 60 човека и мисля, че никой от тях не съжаляваше за участието си :)

2016-09-25 SOTM ден 3

September 25th, 2016 by Vasil Kolev

И последен ден на SOTM.

Аз бях леко отнесен през половината ден, явно онова вчера е било хранително натравяне – през нощта имах някаква треска и сънувах как реконфигурирам fosdem-ски box-ове в огромни количества. Имаше разни проблеми, дето хванах твърде късно (например, че bmd-streamer с -B не може да слуша 1080p поток, което report-нах).

Освен това открихме, че за разлика от OBS, voctomix (от CCC) работи много много по-стабилно и вероятно ще използваме него за FOSDEM. Подкарахме даже един тестов stream за един час (като се възползвахме от multicast-натите stream-ове) и с малко занимавка би трябвало да го направим да работи за всичките 24 зали.

Следва прибиране утре, надявам се да не заспя някъде по летищата и да си изтърва полета.

2016-09-24 SOTM, ден 2

September 24th, 2016 by Vasil Kolev

Втория ден на SOTM мина.

Като изключим пожара в datacenter-а на университета и че за малко ни спряха и wired net-а, като цяло нещата бяха добре. Имахме малко проблеми с OBS, други с аудиото в голямата зала, но остана време хората от FOSDEM да вземат 3 ubuqiti access point-а и да пуснат wireless на хората от конференцията (които бяха много много щастливи).

Сериозно се замислям за някакъв подробен документ, в който да опишем как се прави техническата част на конференции – мрежа, аудио, видео и всякакви подобни неща, щото като гледам трупаме много интересен опит… Говорих си малко с Петко по темата, дали даже не можем да сглобим един прост за ползване image, който хората да наливат на определени типове устройства и да могат да си пускат добре wireless по конференциите.
(или да вземем да развием идеята с фирмата за организиране на такива неща)

In other news, нещо имаше гнило в обяда, щото доста от следобеда прекарах в тоалетните (поне тия на университета са поносими и имат тоалетна хартия). Надявам се до утре да съм се освестил…

2016-09-24 SOTM ден 1, със закъснение.

September 24th, 2016 by Vasil Kolev

Първият ден мина интересно …

Нещата си работеха, но имахме проблем с оригиналната конфигурация, понеже mistserver-а на кутиите от време на време умираше. В едната от почивките го смених с тъп pipe bmd-streamer -> ffmpeg -(udp)-> OBS и така нещата са доста по-ок, та се надявам тая сутрин да няма проблеми. Още се показва от време на време разлика в двата stream-а, което си мисля, че е бъг в OBS-а.

Също така по тия конференции хората са по-високи, та камерите трябва да се монтират по-високо. В случая в залата, в която седя от едната страна стативът се подпира на перваза на стената, от другата на една малка маса, лепнат здраво с gaffer.

Явно целия свят има проблем с вентилацията, и тук в залите трудно се диша и вратите стоят отворени през цялото време (има огромни вентилационни отвори, и вентилацията, до която се добра работи, ама не изглежда да помага).

От интересните неща, разказваха за LIDAR устройства, с които човек може да ходи наоколо да си създава карта (дори триизмерна). Би било много полезно да си намерим такова нещо, да можем да си планираме по-удобно събитията.

А сега си върви втория ден. Почти нищо не се е счупило (освен wifi-то на университета, ама ние така и така не го ползваме), да видим как ще продължи деня :)

Update: не им работи wi-fi-то заради пожар в datacenter-а, и wired internet-а им падна един-два пъти.

2016-09-22 SOTM, ден 0

September 22nd, 2016 by Vasil Kolev

Най-накрая се стъмни.

В Брюксел съм, за State of the Map 2016 – правим с няколко човека от FOSDEM видео/аудио записа и streaming-а, като си тестваме различните опции за идващия FOSDEM. Случва се във свободния университет в Брюксел (VUB), в рамките на три дни.

Setup-а, който тестваме е да stream-ваме видео от FOSDEM-ските кутии до латопи, на които търкаляме OBS, който да миксира и праща нещата към youtube. Ако сработи добре (което май не е много вероятно, като гледам около тестовете как се държи), ще го ползваме в някакъв вид за FOSDEM, да вадим един stream вместо два, и дори да можем да превключваме между двете.

Та, трима човека подкарвахме и връзвахме нещата цял ден (от около 9 сутринта), което включваше:
– говорене с локалните хора да видим кой за какво отговаря (бая време);
– разтоварване на техниката (сравнима по обем с едно-заловите конференции, дето правим);
– разполагане на камери и железария напред назад, така че да не се скъса като се върти залата (аудитория QC реално се върти и става на едно с QA, изглежда доста странно);
– опъване на мрежови кабели м/у двете зали и тайно измъкване на някакви настройки за статично ip, че да можем да си подкараме някаква мрежа, понеже локалния мрежов екип беше зает да ни разкарва напред-назад;
– подкарвания на audio, слагане на ground lift-ове, издирване кой кои кабели де е вързал и как се настройват миксери;
– flash-ване на image-и за box-овете и подкарване на stream-а.

Още към 3 следобед ми се струваше, че навън трябва да е тъмна нощ. Обмислям да се обръсна и да спя, че утре изродите^Wхората почват от 8 сутринта (първата лекция е в 9).

In other news, движението в Брюксел е по-ужасно от това в София, тия хора не са нормални.