% Разни дребни технически неща по OpenFest 2016 ## Интерком Видео екипът има нужда от начин, по който да си комуникира между операторския пулт и камерите, в общи линии еднопосочно (т.е. режисьора да може да каже "камера 1, мръдни малко в ляво"). Предишни години за целта се употребяваха различни неща, най-често някаква част от комплектите безжични микрофони (един предавател и няколко приемника). Тази година микрофоните ни бяха кът, за това сглобих едно просто решение от ffmpeg и raspberry pi-та: На контролния лаптоп закачахме какъвто-и-да-е-микрофон (в случая - едни jabra headset-и, които бяха под ръка) и с ffmpeg ги бълвахме по multicast по мрежата: ~~~~~~sh 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-та до камерите се пускаше следния скрипт: ~~~~~~sh 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](https://github.com/krokodilerian/saytweets), и е съвсем съвсем тривиален: * С един php модул ([phirehose](https://github.com/fennb/phirehose)) се дърпат tweet-ове по признак и се пишат във файлове; * Друг скрипт проверява на какъв език са, с espeak ги обръща в говор и ги дава на asterisk-а чрез call file да ги изговори на някого. Цялото нещо отне чисто час-два да се напише и тества. Изглежда бая грозно (и може да седна да го оправя), но върши доста прилична работа и може да се използва като основа за всякакви подобни неща. На самия OpenFest реализацията беше, че имаше наслагани 3 стари черни телефона на различни места, които бяха вързани през grandstream ATA устройства (понеже бяха единствените, които поддържаха импулсно набиране) и когато дойдеше tweet с #openfest2016telefon, asterisk-а звънеше на трите едновременно и който пръв вдигнеше го чуваше. Архив на всичките неща, дето са казани по телефона може да се намери [тук](https://vasil.ludost.net/openfest2016speak/).