Hatred's Log Place

DON'T PANIC!

Nov 18, 2015 - 1 minute read - Comments -

FFmpeg loop input

Если нужно сделать повторный стриминг небольшого файла (или просто сделать большой файл из нескольких повторов маленького), то поможет такая команда:

ffmpeg -re -f lavfi -i "movie=filename=/some/path/input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" -ar 44100 -f flv rtmp://some.server/app/live

Чуть подробнее: 1. -re процессит входные фреймы так, как если бы это был live stream 2. формат входного файла lavfi говорит, что входной файл, это не регулярный файл, устройство или сетевой ресурс, а описание графа фильтра (комплексного) 3. соответственно аргументом -i становится описание графа фильтра: 1. movie - фильтр задаёт источник данных, а его параметр loop=N задаёт число повторов, 0 - бесконечное число раз, отличное от нуля - будет сделано именно такое число повторов. 2. setpts - предыдущий фильтр действует принципу KISS: попросили повторять файл - буду, но PTS будет оставаться без модификаций, соответсвенно муксеру это может (и даже, скорее всего, обязательно) показаться неприятным. Соответственно нам нужно пересчитать PTS на основе прошедших (N) кадров, фреймрейта (FRAME_RATE) и time-base входного PTS (TB, про time-base я уже писал)

Дальнейшие опции роли не играют и могут сильно варьироваться. Выходным файлом может быть что угодно. Проблемы могут быть с входными файлами с переменным фреймрейтом, но я таких не видел.

Продублировал как ответы на вопросы на сайта Stack Exchange: * http://video.stackexchange.com/a/16933/12104 * http://stackoverflow.com/a/33774838/1828241

Nov 18, 2015 - 1 minute read - Comments - linux

Добавляем PGP ключ к Launchpad

Просто памятка: 1. Генерируем ключ (gpg --gen-key). 2. Экспортируем ключ (gpg -a --export <тут мыло или другой идентификатор ключа>, а подробнее тут: https://www.gnupg.org/gph/en/manual/x56.html). 3. Идём на http://keyserver.ubuntu.com/ и добавляем в окно “Submitting a new OpenPGP Key” ключ экспортированный на прошлом шаге. 4. Теперь получаем отпечаток (fingerprint) ключа (gpg --fingerprint) 5. Идём на https://launchpad.net/~USERNAME/+editpgpkeys, проходим все круги ада шаги авторизации и на странице внизу находим “Import an OpenPGP key” и в поле ввода копируем свой отпечаток с предыдущего шага. Причём нажатие на кнопку Import Key может как-то странно реагировать, тогда как нажатие Enter в онке ввода отпечатка работает как надо. 6. Ждём письма на почту. 7. Расшифровываем файл из письма (gpg -d file.txt). 8. Переходим по ссылке из файла. 9. PROFIT.

Имеет смысл в ~/.profile или ~/.bashrc добавить строки:

# PPA
export DEBFULLNAME="Foo Bar"
export DEBEMAIL="foo_bar@gmail.com"

Одно но: полное имя и почта должны соответствовать идентификатору ключа GPG. Иначе - создавайте алиасы.

Nov 13, 2015 - 1 minute read - Comments - linux

IceWM: I'm alive!

Хороший WM((http://icemw.org, https://ru.wikipedia.org/wiki/IceWM)). Официально не развивается с 2013 года. Хорошей новостью является то, что автор не совсем на него забил и, хотя бы, обновляет сайт. Собственно на сайте появилась ссылка на неофициальный, но развиваемый репозиторий: https://github.com/bbidulock/icewm, так что реквесты приветствуются :)

Nov 12, 2015 - 4 minute read - Comments - programming

О качестве документации и понимании сути

Есть такой чип: Cypress FX3. Это чип для построения USB 3.0 устройств. Внутри железная реализация протокола, 512кБ памяти и ядро ARM926E-JS. Cypress предоставляет SDK, в котором поставляется RTOS ThreadX и необходимый код для работы с их железом.

Как и классических встраеваемых SDK есть возможность ставить пользовательские колбеки и, по сути, управлять и строить логику конкретного приложения, ну и реализовать нужное вам USB 3.0 (2.0 тоже) устройство.

Nov 12, 2015 - 1 minute read - Comments -

Перекличка

Пост ни о чём. Просто хочется узнать сколько людей читает этот блог :) Такая вот блажь накатила. Поэтому велкам в камменты: кто читает, кому что интересно, может какие-то пожелания и т.п.

Nov 6, 2015 - 1 minute read - Comments -

FFmpeg и VP9 (libvpx)

Тут немец один в почту постучался. У него проблемы с кодированием кодеком VP9:

ffmpeg: /build/buildd/libvpx-1.3.0/vp9/encoder/vp9_encodeframe.c:1747: rd_pick_partition: Assertion `tp_orig < *tp' failed.

Если вы сидите на каком-нить Mint 17 или Ubuntu 14.04, то у вас в системе стоит libvpx версии 1.3.0 в котором есть баг: при параметре arnr-maxframes равным нулю он крешится вот таким вот образом. Причем 0 - это валидное значение согласно документации. Если эту опцию принудительно не указывать для vpxenc, то он нормально кодирует, т.е. использует какое-то значение отличное от нуля, если указать - такой же креш. А вот FFmpeg, там внутри тоже не без косяка: лапша в настройках, задаёт дефолтное значение в 0, хотя разработчики рассчитывали (судя по всему) как раз на -1. Потому такая петрушка.

Лечится указанием ffmpeg опции -arnr-maxframes со значением -1 или больше 0. -1 - включит это самое “дефолтное” значение внутри libvpx.

В новых версиях libvpx проблема исправлена. Репорты: * https://trac.ffmpeg.org/ticket/4413 * https://bugs.chromium.org/p/webm/issues/detail?id=690

ЗЫ о целесообразности использования VP9 меня не спрашивайте. Меня просто спросили, а я разобрался :) ЗЗЫ FFmpeg версии 2.8.1 но роли это не играет.

Oct 21, 2015 - 4 minute read - Comments - programming

Qt Creator из Git, VirtualBox и Linux Guest

Заголовок не отражает всей сути. Конкретно:
* VirtualBox: 5.0.8 * Гость: Linut Mint 17.2 и Ubuntu 14.04.2, x86_64 * Зост: Win8, x86_64 * Сборка Qt Creator из PPA: https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git

Проблема: при запуске крешится. Выводится такой стек-трейс: alexd@alexd-VirtualBox ~ $ qtcreator-git libGL error: pci id for fd 18: 80ee:beef, driver (null) OpenGL Warning: glFlushVertexArrayRangeNV not found in mesa table OpenGL Warning: glVertexArrayRangeNV not found in mesa table OpenGL Warning: glCombinerInputNV not found in mesa table OpenGL Warning: glCombinerOutputNV not found in mesa table OpenGL Warning: glCombinerParameterfNV not found in mesa table OpenGL Warning: glCombinerParameterfvNV not found in mesa table OpenGL Warning: glCombinerParameteriNV not found in mesa table OpenGL Warning: glCombinerParameterivNV not found in mesa table OpenGL Warning: glFinalCombinerInputNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerInputParameterivNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterfvNV not found in mesa table OpenGL Warning: glGetCombinerOutputParameterivNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterfvNV not found in mesa table OpenGL Warning: glGetFinalCombinerInputParameterivNV not found in mesa table OpenGL Warning: glDeleteFencesNV not found in mesa table OpenGL Warning: glFinishFenceNV not found in mesa table OpenGL Warning: glGenFencesNV not found in mesa table OpenGL Warning: glGetFenceivNV not found in mesa table OpenGL Warning: glIsFenceNV not found in mesa table OpenGL Warning: glSetFenceNV not found in mesa table OpenGL Warning: glTestFenceNV not found in mesa table libGL error: core dri or dri2 extension not found libGL error: failed to load driver: vboxvideo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals OpenGL Warning: glXGetFBConfigAttrib for 0000000001deadb0, failed to get XVisualInfo OpenGL Warning: XGetVisualInfo returned 0 visuals for 0000000001deadb0 OpenGL Warning: Retry with 0x8002 returned 0 visuals Could not initialize GLX 0 libLLVM-3.6.so.1 0x00007fe411df7912 llvm::sys::PrintStackTrace(_IO_FILE*) + 34 1 libLLVM-3.6.so.1 0x00007fe411df5eb1 2 libpthread.so.0 0x00007fe431190340 3 libc.so.6 0x00007fe43085ecc9 gsignal + 57 4 libc.so.6 0x00007fe4308620d8 abort + 328 5 libQt5Core.so.5 0x00007fe43143230e 6 libqxcb-glx-integration.so 0x00007fe4325e52dc 7 libqxcb-glx-integration.so 0x00007fe4325e60f8 8 libqxcb-glx-integration.so 0x00007fe4325e484b 9 libQt5XcbQpa.so.5 0x00007fe429bbcf91 QXcbIntegration::createPlatformOpenGLContext(QOpenGLContext*) const + 49 10 libQt5Gui.so.5 0x00007fe4303e721d QOpenGLContext::create() + 45 11 libUtils.so.1 0x00007fe43205afc5 Utils::HostOsInfo::canCreateOpenGLContext(QString*) + 165 12 libQmlDesigner.so 0x00007fe40a098f2c QmlDesigner::QmlDesignerPlugin::initialize(QStringList const&, QString*) + 28 13 libExtensionSystem.so.1 0x00007fe4323111e6 ExtensionSystem::Internal::PluginSpecPrivate::initializePlugin() + 246 14 libExtensionSystem.so.1 0x00007fe43230920c ExtensionSystem::Internal::PluginManagerPrivate::loadPlugin(ExtensionSystem::PluginSpec*, ExtensionSystem::PluginSpec::State) + 828 15 libExtensionSystem.so.1 0x00007fe43230d070 ExtensionSystem::Internal::PluginManagerPrivate::loadPlugins() + 256 16 qtcreator 0x0000000000409a31 17 libc.so.6 0x00007fe430849ec5 __libc_start_main + 245 18 qtcreator 0x0000000000409db2 Аварийный останов

Существует какая-то проблема в реализации поддержки OpenGL в гостевых расширениях VirtualBox. В результате это аффектит два плагина: QmlDesigner и QmlProfiler.

В качестве work-around можно не загружать эти плагины (для меня не критично, но для кого-то может оказаться - очень, но тогда добивайтесь более действенного результата сами). Для этого сначала запустить Qt Creator так: qtcreator-git -noload QmlDesigner -noload QmlProfiler после чего выключить загрузку этих плагинов в настройках и запускать QtC обычным образом.

Oct 20, 2015 - 4 minute read - Comments -

Ускорение позиционирования в удалённом flv файле при использовании http-транспорта

Пост основан на двух вопросах на Тостере и RU.SO. На RU.SO я же накатал ответ, на основе которого и буду строить свой псто. Кроме того, рассматриваю более подробно как работает перемотка со стороны FFmpeg.

В общем, жаждущие - подкат.

Oct 9, 2015 - 5 minute read - Comments - туризм

Горелка Optimus Vega

Волею судеб, китайская BRS-8 оказалась первой моей шланговой горелкой (мультитопливной тоже, но роли не играет). Но был замечен минус: после обычных накручивающихся (через ковеевский переходник Cobra) ощущался повышенный расход газа. Но плюсы контура испарителя и возможность погреть баллон очень сильно манили. Ещё хотелось чего-то более лёгкого: вес “газового” комплекта BRS-8 у меня доходит до 500 грамм, что не сильно мало.

Рассматривал различные варинты, взвешивал за и против (если кому интересно: выкладки могу опубликовать), ориентировался на известные бренды. Остановился на Optimus Vega, при покупке на eBay она встала мне с доставкой около 4000 руб, текущая цена, в районе 7000 руб, поставила бы на ней крест изначально. Собственно варианты были следующими: * Optimus Vega * MSR WindPro II * Primus Express Spider * Primus Gravity II EF

Плюс краем глаза смотрел на Fire-Maple FMS-118 (забегая вперёд, скажу, что в текущей ситуации остановился бы на ней)

Итак, сама горелка:

Sep 22, 2015 - 21 minute read - Comments - туризм

Слоны идут на север 2. Или: даже корабли не выходят в море в понедельник

Вводное слово

Где-то 30 августа звонит Женя и предлагает на неделю сгонять на севера Приморья, поглядеть на Большой Амгинский, сходить на г.Курортная, посетить теплые источники и вообще, полюбоваться красотами северной Приморской природы. А я, [[zhurnal:2010-08-31_22.05_slony_idut_na_sever|зная эти красоты]], просто не мог отказаться от такого предложения, благо жена, услышав о чём речь, сама сказала - ехать! Вот только сделала ремарку по поводу отправки в понедельник 14, а не в воскресенье 13. Но мы не суеверные!

Sep 7, 2015 - 7 minute read - Comments - туризм

Расход газа в походе

Добрая статья: http://www.mount.ru/shop/dir.php?id=235 в целом соответствует моему опыту использования газа.

Конспективно: 1. Минимальный: 30 грамм/человек/день 1. пожалуй только на Jet Boil и прочих интегрированных системах или котелками с радиаторами плюс использование горелки только доведения до кипения и запаривание еды. У самого такого расхода не получалось. 2. Стандартный: 60-90 грамм/человек/день 1. в т.ч. готовка риса, гречки, но отсутствие топления снега и льда. Вода от 7-10 градусов. Каши из перловки и кукурузы - в пролёте. Наличие ветрозащиты. Котёл 2.7 л, для горелок, Ковея, алюминиевый. 3. Экстремальный: от 100 до 300, а то и выше грамм/человек/день 1. топление снега, готовка на большой высоте: на берельском седле, по ощущениям, потребление было около 120 грамм. 2. отсутсвие защитных ветровых стенок, экранов, неэффективные (костровые: с овальным дном или с нагаром, который является отличным теплоизолятором) или слишком большие котлы (больше 2-3 литров - уже много потерь, нужно озадачиться теплотканью).

Выводы: 4. В низкогорье (до 2000-2500 м) и на равнине при отсутствии топления снега при готовке (т.е. будете не просто запаривать, а варить) можете уложиться в 60-70 грамм и меньше 5. При топлении снега увеличьте до 90-100 6. При увеличении высоты доведите до 120

Иногда получается комбинировать, к примеру: 1. на Jet Boil или чём-то подобном натопить и накипятить воды и залить в термосы 2. основное блюдо приготовить на горелке добавляя туда уже подогретую и натопленную воду

При таком раскладе, расход выше чем чисто на Jet Boil, но проще готовить на палатку из 3-4 человек плюс меньше расход, чем чисто на горелке.

Пост буду уточнять по мере появления свежих наблюдений. Ещё есть старый пост: [](/blog/2014/04/25/gaz_gazovye_smesi_i_xolod/)

Aug 28, 2015 - 1 minute read - Comments - linux programming

Qt5, OpenGL и Ubuntu/Mint

Временами, при сборке ловится такое:

/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status

При этом в системе наблюдается такое:

$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/insync/libGL.so.1
/usr/lib/nvidia-346-updates/libGL.so
/usr/lib/nvidia-346-updates/libGL.so.1
/usr/lib/nvidia-346-updates/libGL.so.346.82
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/primus/libGL.so.1
/usr/lib32/nvidia-346-updates/libGL.so
/usr/lib32/nvidia-346-updates/libGL.so.1
/usr/lib32/nvidia-346-updates/libGL.so.346.82

Т.е. вроде всё есть, но чего-то не хватает. А не хватает того, что они живут в директориях, которые не видны линковщику. Для рантайма средство есть через aternatives:

x86_64-linux-gnu_gl_conf
x86_64-linux-gnu_egl_conf

Для девелопмента должен стоять пакет libgl1-mesa-dev. После его установки станет так:

$ ls -l /usr/lib/x86_64-linux-gnu/libGL.so
lrwxrwxrwx 1 root root 13 марта 12 08:47 /usr/lib/x86_64-linux-gnu/libGL.so -> mesa/libGL.so

Проблема в том, что пакет стоит, а файла нет… Скорее всего были какие-то нюансы при обновлении или ещё чего. Лечится:

sudo apt-get install --reinstall libgl1-mesa-dev

Aug 12, 2015 - 2 minute read - Comments - linux

Обновлённый графический стек в Ubuntu/Mint

Собственно, не только стек, но и ядро 3.19

Основная ссылка: http://www.opennet.ru/opennews/art.shtml?num=42744

Команда для обновления:

sudo apt-get install --install-recommends linux-generic-lts-vivid xserver-xorg-core-lts-vivid xserver-xorg-lts-vivid xserver-xorg-video-all-lts-vivid xserver-xorg-input-all-lts-vivid libwayland-egl1-mesa-lts-vivid

Стоит отметить, что при наличии PPA xorg-edgers у вас не получится обновиться: нужно сначала вычистить этот PPA и все установленные из него пакеты заменить на дистрибутивные. Но воспользоваться для этого ppa-purge не получится: удивитесь количеству конфликтов.

Я делал вручную по следующему алгоритму…

ВНИМАНИЕ!!! СЛЕДУЙТЕ ДАННЫМ ИНСТРУКЦИЯМ ТОЛЬКО В СЛУЧАЕ, ЕСЛИ ВЫ РЕАЛЬНО ПОНИМАЕТЕ, ЧТО ДЕЛАЕТЕ. УБИТЬ СИСТЕМУ ТАК ПРОЩЕ ПРОСТОГО.

Перво-наперво: выполняйте команды из чистой консоли, а не из терминала. Если вы не понимаете о чём речь, лучше тут и остановиться.

Далее, для простоты на x86_64 системах стоит удалить i386 пакеты - они ставились, например, при установке Skype, TeamViewer или Wine. Соответсвенно, сами программы тоже снесутся. На всякий случай стоит сохранить список:

dpkg -l | grep :i386 | awk '{print $2}' > i386_list.txt

После чего нужно их удалить:

dpkg -l | grep :i386 | awk '{print $2}' | xargs sudo apt-get remove

Нет стоит использовать purge на этой стадии.

Затем нужно удалить в настройках apt репозиторий xorg-edgers и обновить список пакетов:

sudo apt-get update

После, нужно заменить все пакеты в названии которых (точнее версии) содержатся слова xedgers ,sarvatt и ricotz, а так же пакеты: * ppa-purge * wayland * i915 которые содержатся в данном репозитории, но не соответствует правилам вышеприведённым правилам именования, на пакеты из основного репозитория.

Сделать этом можно в два этапа. Сначала удаляем пакеты игнорируя все зависимости:

dpkg -l | grep 'xedgers<br/>|sarvatt<br/>|ricotz' | awk '{print $2}' | xargs sudo dpkg -r --force-depends ppa-purge wayland i915

Затем восстановить поломанные зависимости:

sudo apt-get install -f

Поставятся уже дистрибутивные пакеты.

После этого можно восстановить i386 пакеты и доставить пакеты ppa-purge, i915, если необходимо.

После данных действий, можно будет обновить стек xorg.