LINUX.ORG.RU

Избранные сообщения imul

Преобразование звука в MIDI в реальном времени

Галерея — Скриншоты

Спустя 2,5 месяца работы я готов вам представить свою программу wave2midi. Она анализирует спектр нот в звуковом сигнале в реальном времени и выдает на выход MIDI события, которые можно записывать в таких программах, как MuseScore, или проигрывать в синтезаторе Yoshimi. Моя программа может воспринимать даже аккорды!

Программа работает в среде UNIX подобных систем с звуковой системой JACK Audio Connection Kit.

К ней можно подключать любые программы, поддерживающие JACK.

Я использую w2midi для того, чтобы получать звук синтезатора, играя на электрогитаре и для того, чтобы получать звук синтезатора своим голосом в микрофон! Вы можете придумать свой способ её использовать. Можно, например, для более точного распознавания пропускать входящий сигнал через компрессор, а выходящие ноты транспонировать (я думаю есть такие утилиты, если нет, то напишу).

>>> Видео демонстрация

Программа состоит из интерфейса командной строки (w2midi) и графического интерфейса (w2midi_qt). CLI часть написана на C99, а графическая - на C++ с использованием фреймворка Qt5.

w2midi распространяется под лицензией Apache 2.0, w2midi_qt под GPL-3.0-only.

Хочу обратить внимание на настройку:

  • Чем выше буфер, тем выше задержка и точность
  • Если программа улавливает лишние звуки, измените порог срабатывания в Дб

Программа распознает частоты с помощью преобразования Фурье, а конкретно, с помощью библиотеки FFTW3. Частоты преобразуются в ноты по простой формуле: 12 * \log_2 \frac{f}{d}, где f - полученная частота, d - опорная. Гармонический ряд - относителен, я считаю его относительно частоты 440 герц (нота ля первой октавы).

Отдельно хочу обратить внимание на обертоны. Если просто анализировать ноты по такому алгоритму, то получается настоящая какафония… Это из за того, что музыкальные инструменты издают не чистую синусоиду, а еще и дополнительные гармоники, называемые обертонами, придающие тембр. Но они нам не нужны во время записи нот. Чтобы их побороть я придумал очень простой алгоритм: из полутонов, стоящий в интервале (расстояние между нотами) секунда (1-2 полутона) выбирается самый громкий. Да, все так просто… В музыке НИКОГДА не используются секунды. Самое интересное, что об этом нигде не написано, просто заметил эмпирическим путём такое интересное свойство.

Вот такая история. Инструкции по сборке из исходных кодов находятся в README.

>>> Видео демонстрация

>>> Репозиторий w2midi

>>> Репозиторий w2midi_qt

 , , , ,

realbarmaley
()

Не получается загнать Wi-Fi интерфейс в бридж

Форум — Admin
# ip link set wlp0s20f3 master br0
RTNETLINK answers: Operation not supported

Что интересно, с ethernet интерфейсом оно работает, как и должно, а с Wi-Fi не хочет.

Хочу сделать чтобы и хост, и виртуалки, которые запущены на хосте, сидели в одной сети, которая приходит из вне. Сеть, интернеты, DHCP получаю по Wi-Fi.

Как обычно для этого дела: создал бридж br0, tap0 интерфейсы для виртуалок, всё сюда засунул, думал точно так же загнать сюда wifi интерфейс и всё просто будет работать — бридж он же как простой свитч, с парой FORWARD правил.

Но нет.

Может есть альтернативные варианты? Важно, чтобы виртуалки были рядовыми участниками сети, без собственного NAT.

wlan0 — интерфейс с интернетами и IP адресом.

br0 — бридж

tap0 tap1 tap2 — виртуалки.

ip link add br0 type bridge
ip link set br0 up

ip link set tap0 master br0
ip link set tap0 up

iptables -t filter -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -i br0 -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

иии... в финальной стадии облом.

# ip link set wlp0s20f3 master br0
RTNETLINK answers: Operation not supported

ЧЯДНТ?

 , ,

Spoofing
()

Как-то попадался инструмент для отображения посещаемости ЛОР

Форум — Linux-org-ru

Один регистрант давал ссылку на счетчик комментов на ЛОР по годам. Как бы снова туда заглянуть?

Просто хочу убедится что ЛОР не смотря на все топовый форум ИТшников.

 

TolkoSprosit
()

Преобразование звука в MIDI в реальном времени

Форум — Talks

Я дописал свою программу wave2midi и записал ролик. Кому интересно ссылка.

 , , , ,

realbarmaley
()

Доступен тестовый образ OpenVMS E9.2 на x86_64

Форум — Talks

Компания VSI объявила о доступности тестового образа VMS для архитектуры x86_64. Для получения образа нужна регистрация.

https://vmssoftware.com/about/openvmsx86/

https://vmssoftware.com/docs/VSI_X86V91A_RN.pdf

Подробности

Перемещено Zhbert из proprietary

 ,

anonymous
()

После спящего режима ноутбук на debian реагирует на перезагрузку как на выключение.

Форум — General

Здравствуйте, у меня ноутбук packard bell dot s2 после команды (rtcwake -m mem -s 60) не перезагружается командой sudo reboot или sudo systemctl reboot или sudo shutdown -r now а выключается. Что делать не знаю я им управляю на расстоянии по ssh он у меня в качестве файлового сервера и не могу нормально перезагрузить его после сна….

 , , ,

Groled
()

Операционная система Атлант

Форум — Talks

Красноярские программисты создали на базе Linux собственную операционную систему «Атлант», не имеющую аналогов: она позволяет удаленно управлять парком из тысяч персональных компьютеров и дистанционно обновлять на них софт без остановки рабочих процессов. Newslab поговорил с главой фирмы-разработчика и выяснил, как им удалось совершить прорыв в мире IT-бизнеса.

В общем, если без пафоса, то они сделали ПО для управления Linux-машинами в домене и продают лицензии на него.

Презентация: https://rutube.ru/video/b662f26954f52be0a7a7da819644c49f/

Интервью с разрабами: https://newslab.ru/article/999309

Официальный сайт: https://applite.ru/atlant

Что думаете?

 

wandrien
()

Wireguard перестаёт работать если Peer долгое время «молчит»

Форум — Admin

Настроил на реальном физическом сервере Wireguard, так же настроил Wireguard на VDS. Всё хорошо, всё работает, хожу на свой сервер через VDS по внутренней VPN-сети.

Вечером прихожу домой, сажусь за ноутбук, подключаюсь к VDS, затем с VDS подключаюсь к своему серверу по Wireguard и...

# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
^C
--- 10.8.0.2 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4094ms

«А что случилось?»

Сейчас ногами дотопал до своего сервера, всё на месте, ещё раз проверяю пинговать с VDS (10.8.0.1) свой сервер (10.8.0.2) — не пингуется.

Теперь следите за рукой, я пингую с сервера (10.8.0.2) свою VDS (10.8.0.1) и всё типа работает!

# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=7.83 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=3.26 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=3.21 ms
^C
--- 10.8.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.208/4.765/7.831/2.168 ms

Окей, снова возвращаюсь на VDS, снова пингую сервер и о чудо, связь восстановлена!

# ssh root@82.146.53.64
Last login: Fri Apr 15 04:44:08 2022 from X.X.X.X
# ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_seq=1 ttl=64 time=3.00 ms
64 bytes from 10.8.0.2: icmp_seq=2 ttl=64 time=3.15 ms
64 bytes from 10.8.0.2: icmp_seq=3 ttl=64 time=3.16 ms
^C
--- 10.8.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.002/3.104/3.157/0.072 ms

Что, простите? Связь по Wireguard отваливается сама по себе если Peer продолжительное время никак не пингует шлюз????

О том, что эта проблема не случайная, я вам отвечу, что у меня на реальном физическом сервере два Wireguard wg0 wg1 которые идут на две разные VDS с разными IP и оба эти Wireguard отвалились.

Пока я не пинганул со стороны сервера каждую из VDS по Wireguard, этот сервер с обоих VDS считался в оффлайне и не пинговался, лол.

Как этим Wireguard можно после этого пользоваться? И это считается надёжным решением? Мне что, в cron засунуть ping по одному пакету раз в каждый час?

Конфигурация на сервере:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg0 type wireguard
ip addr add 10.8.0.2/24 dev wg0
wg set wg0 listen-port 51820 private-key /root/.wireguard/peer.key
wg set wg0 peer 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU= endpoint 82.146.53.64:51820 allowed-ips 10.8.0.0/24

ip link add dev wg1 type wireguard
ip addr add 10.8.1.2/24 dev wg1
wg set wg1 listen-port 51830 private-key /root/.wireguard/peer.key
wg set wg1 peer 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ= endpoint 82.146.41.144:51830 allowed-ips 10.8.1.0/24

# End of file
# ifconfig wg0
wg0       Link encap:(hwtype unknown)
          inet addr:10.8.0.2  P-t-P:10.8.0.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1112  TX bytes:1256

# ifconfig wg1
wg1       Link encap:(hwtype unknown)
          inet addr:10.8.1.2  P-t-P:10.8.1.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1356  TX bytes:948

# wg
interface: wg0
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51820

peer: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  endpoint: 82.146.53.64:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 12 minutes, 5 seconds ago
  transfer: 1.09 KiB received, 1.23 KiB sent

interface: wg1
  public key: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  private key: (hidden)
  listening port: 51830

peer: 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ=
  endpoint: 82.146.41.144:51830
  allowed ips: 10.8.1.0/24
  latest handshake: 29 minutes, 27 seconds ago
  transfer: 1.32 KiB received, 948 B sent

Конфигурация на первом VDS:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg0 type wireguard
ip addr add 10.8.0.1/24 dev wg0
wg set wg0 listen-port 51820 private-key ~/.wireguard/peer.key
wg set wg0 peer PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms= allowed-ips 10.8.0.0/24
ip link set wg0 up

# End of file
# ifconfig wg0
wg0       Link encap:(hwtype unknown)
          inet addr:10.8.0.1  P-t-P:10.8.0.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:5812 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6344 errors:0 dropped:37 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:572432  TX bytes:1973080

# wg
interface: wg0
  public key: 4WYdcHokRun38j6/hjUM9RpIgV2NE/tNRDT+W9lRMmU=
  private key: (hidden)
  listening port: 51820

peer: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  endpoint: X.X.X.X:51820
  allowed ips: 10.8.0.0/24
  latest handshake: 14 minutes, 24 seconds ago
  transfer: 559.02 KiB received, 1.88 MiB sent

Конфигурация на втором VDS:

# cat /etc/rc.local
#!/bin/bash
#
# /etc/rc.local: local multi-user startup script
#

ip link add dev wg1 type wireguard
ip addr add 10.8.1.1/24 dev wg1
wg set wg1 listen-port 51830 private-key ~/.wireguard/peer.key
wg set wg1 peer PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms= allowed-ips 10.8.1.0/24
ip link set wg1 up

# End of file
# ifconfig wg1
wg1       Link encap:(hwtype unknown)
          inet addr:10.8.1.1  P-t-P:10.8.1.1  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1420  Metric:1
          RX packets:15271 errors:1 dropped:0 overruns:0 frame:1
          TX packets:13208 errors:2 dropped:7 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1565444  TX bytes:3344568

# wg
interface: wg1
  public key: 6xGlQ7CW8R8LVOCYh+7N14Kv+b6vyMGvxEMizRCBzxQ=
  private key: (hidden)
  listening port: 51830

peer: PoV1YwQr9VjVBSNMVZHkIrw17IKL4I9s9cpQUNNQgms=
  endpoint: X.X.X.X:51830
  allowed ips: 0.0.0.0/0
  latest handshake: 33 minutes, 9 seconds ago
  transfer: 1.49 MiB received, 3.19 MiB sent

Это вообще нормальное поведение для Wireguard? Шлюз перестаёт видить Peer, пока Peer не отправит шлюзу какой-нибудь ping?

 

Spoofing
()

«Окуляр ГОСТ» — форк Okular с плагином КриптоПро

Новости — Open Source
Группа Open Source

Компания «Лаборатория 50» выпустила «Окуляр ГОСТ» — форк популярной программы Okular для работы с PDF.

Главной возможностью является поддержка соответствующих ГОСТ хэш-алгоритмов в функциях проверки и электронной подписи файлов.

( читать дальше... )

>>> Окуляр ГОСТ

 ,

anonymous
()

Расскажите про крипту на сегодняшний день

Форум — Talks

Т.к. намечаются явные траблы с валютой, похоже что надо будет осваивать крипту. Тема очень обширная, объять разумом трудно. Сориентируйте по «прикладной» части для нубов, которым надо в основном:

  • расплачиваться
  • возможно, хранить денежку
  • выводить за бугром

То есть, речь о «стабильной» крипте.

  • Какой кошелек/биржу посоветуете для «ежедневного использования». С учетом потенциальных банов. И какие варианты бакапов если угнали телефон и т.п.
  • Какая крипта лучше для ежедневного использования и длительного хранения.
  • Что в европах по законодательству насчет приземления крипты? Купить-то не проблема, но не хотелось бы на выводе претензий про легальность.

 

Vit
()

Китайская Pangu Lab вскрыла уязвимость Bvp47 от АНБ

Форум — Security

Коротко с сайта SecurityLab.ru

Исследователи из китайской лаборатории Pangu Lab раскрыли подробности о бэкдоре «высшего уровня», используемом APT-группировкой Equation Group. Инструмент, получивший название Bvp47 из-за многочисленных ссылок на строку Bvp и числовое значение 0x47 в алгоритме шифрования, был обнаружен на системах под управлением Linux в ходе расследования в 2013 году. В ходе вредоносной кампании Operation Telescreen, связанной с развертыванием Bvp47, использовался вариант вредоноса, отличающийся «расширенным поведением скрытого канала, основанным на пакетах TCP SYN, обфускации кода, сокрытии системы и тактике самоуничтожения».

Что скажете? Есть у кого интересные подробности?

UPD

По просьбам комментаторов ссылка на полный отчёт 56 страниц.

Full Report Download: The Bvp47 Technical Paper (PDF)

 

MAGNet
()

Посоветуйте 2.5" SATA HDD enclosure

Форум — Talks

Посоветуйте 2.5" SATA HDD enclosure, поддерживающий uas фактически, т.е. которым вы сами пользовались. На днях купил нечто с заявленной, но криво реализованной поддержкой, пришлось переключить в USB Mass Storage.

Желательно еще, чтобы его не страшно было в T14s пихать.

@intelfx

 , ,

i586
()

Немонстроузный web-проигрыватель бесконечного DASH потока с IP камеры.

Форум — Web-development

Все говнобраузеры до сих пор не умеют в RTSP и даже не умеют нормально проигрывать бесконечный поток. Какое-то позорище натуральное. Бесконечный поток с камеры, например, поставленный на паузу вообще ни разу не должен продолжаться с той самой секунды когда его остановили. Внезапно. А должен продолжаться при снятии с паузы с самого последнего принятого keyframe. И браузеру нахер не нужно сжирать всю память пытаясь сохранить всё, что было передано с момента нажатия на паузу. Но, видимо, для браузерописцев эти элементарные вещи совершенно недоступны для понимания, и в результате реализация HTMLVideoElement’а, что в хроме, что в фаерфоксе является полным говном.

Для проигрывания таких потоков вебмакаки используют монстроузные жирнющие жабоскриптные плееры, которые фактически с ложечки кормят HTMLVideoElement загружаемыми кусочками видео, обычно DASH или HLS.

Оказалось что самый маленький плеер умеющий проигрывать multiple-file-DASH видео (openplayer.js) весит 167 килобайт, сцуко! И это минифицированный вариант! Чему там можно столько весить я нихрена не понял. Про «референсный» dash.js я вообще молчу. Это лютейший звездец размером больше полмегабайта в минифицированном виде. Мелкософтовский пример жабоскриптного DASH-плеера заточен на single-file-DASH. А ffmpeg c -single_file 1 пишет поток на диск бесконечно, засирая диск далеко не всегда нужным видеомусором.

Разумеется, как всегда, когда дело касается вебни, чтобы решить элементарную проблему, вместо того, чтобы взять какой-нибудь эталонный микроскопический плеер, пришлось быстренько изобрести велосипед. Разумеется, всё легко влезло в смешные 5 килобайт, причём в неминифицированном виде.

Вот велосипед:

Жабоскрипт:

'use strict'

function Dash( id )
{
    var _ = this;
    _.v = document.getElementById( id );
    var url = _.v.src;
    _.v.src = undefined;
    var slash = url.lastIndexOf("/");
    _.path = url.substring( 0, slash + 1 );
    _.mpd = url.substring( slash + 1 );
    _.init = true;
    _.xhr = [];
    _.load_mpd( false );
    _.video_update  = function() { _._video_update(); };
    _.video_updated = function() { _._video_updated(); };
    _.video_updating = false;

    _.v.addEventListener( 'click', _.toggle.bind(_), false );

    _.v.addEventListener( 'pause', function ()
    {
        console.log( 'paused' );
        this.removeEventListener( 'timeupdate', _.video_update );
        if( _.videoSource.updating ) _.videoSource.abort();
        _.xhr.forEach( function ( xhr ) { xhr.abort(); } );
    }, false);

    _.v.addEventListener( 'play', function()
    {
        console.log( 'playing' ); 
        this.addEventListener( 'timeupdate', _.video_update, false );
    }, false);

    _.v.addEventListener( 'ended', function()
    {
        console.log( 'ended' );
        this.removeEventListener( 'timeupdate', _.video_update );
    }, false);

    _.v.addEventListener( 'error', function(e) { console.log( 'video error: ' + e ); }, false );
    _.v.addEventListener( 'emptied', function() { console.log( 'emptied' ); }, false );
}

Dash.prototype.play = function() { this.load_mpd( true ); }
Dash.prototype.stop = function() { this.v.pause(); }
Dash.prototype.toggle = function()
{
    if( this.v.paused == true ) this.play();
    else                        this.stop();
}

Dash.prototype.mpd_parse = function( data )
{
    var _ = this, e, g;
    e = data.querySelectorAll("Representation")[0];
    g = e.getAttribute.bind( e );
    _.id        = g( 'id' );
    _.mimetype  = g( 'mimeType' );
    _.codecs    = g( 'codecs' );
    _.width     = g( 'width' );
    _.height    = g( 'height' );

    e = data.querySelectorAll( 'SegmentTemplate' )[0];
    g = e.getAttribute.bind( e );
    _.timescale = g( 'timescale' );
    _.ini       = g( 'initialization' );
    _.seg       = g( 'media' );
    _.start     = g( 'startNumber' );

    _.ini = _.ini.replace( '$RepresentationID$', _.id );
    _.seg = _.seg.replace( '$RepresentationID$', _.id );

    _.duration = [];

    data.querySelectorAll("S").forEach( function( v, i )
    {
        _.duration[i] = v.getAttribute( 'd' ) / _.timescale;
        if( i == 0 ) _.ts = v.getAttribute( 't' );
    } );
}

Dash.prototype.load_mpd = function( start )
{
    var _ = this;
    _.xhr[0] = new XMLHttpRequest();
    _.xhr[0].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;

        var parser = new DOMParser();
        var xmlData = parser.parseFromString( this.response, 'text/xml' );

        _.mpd_parse( xmlData );

        if( start )
        {
            _.video_updating = false;
            _.num = parseInt( _.start ) + 1;
            _.ts_current = _.v.currentTime;
            _.load_seg();
        }

        if( _.init )
        {
            _.v.width  = _.width;
            _.v.height = _.height;
            _.mediaSource = new window.MediaSource();
            _.mediaSource.addEventListener( 'sourceopen', function (e) {
                _.videoSource = _.mediaSource.addSourceBuffer( _.mimetype + '; codecs="' + _.codecs + '"' );
                _.videoSource.mode = 'sequence';
                _.videoSource.addEventListener( 'updateend', _.video_updated, false );
                _.load_ini();
            }, false );
            _.v.src = URL.createObjectURL( _.mediaSource );
        }
    }
    _.xhr[0].open( 'GET', _.path + _.mpd );
    _.xhr[0].send();
}

Dash.prototype.append = function( f )
{
    var _ = this;
    _.xhr[1] = new XMLHttpRequest();
    _.xhr[1].responseType = 'arraybuffer';
    _.xhr[1].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;
        _.videoSource.appendBuffer( new Uint8Array( this.response ) );
    };
    _.xhr[1].open( 'GET', _.path + f );
    _.xhr[1].send();
}

Dash.prototype.load_ini = function()
{
    this.append( this.ini );
}

Dash.prototype.load_seg = function()
{
    var n = this.num.toString();
    if( n.length < 5 ) n = ( '0000' + n ).slice( -5 );
    this.append( this.seg.replace( '$Number%05d$', n ) );
}

Dash.prototype._video_update = function()
{
    var _ = this;
    if( _.video_updating ) return;
    var i = _.num - _.start;
    if( _.v.currentTime >= _.ts_current - _.duration[i] * 0.5 )
    {
        _.video_updating = true;
        _.load_seg();
    }
}

Dash.prototype._video_updated = function()
{
    var _ = this;

    if( _.init ) { _.init = false; return; }

    if( _.v.paused == true )
    {
        _.v.currentTime = _.ts_current;
        _.v.play();
    }
    _.ts_current += _.duration[ _.num - _.start ];
    _.num++;
    if( _.num - _.start >= _.duration.length - 1 ) _.load_mpd( false );
    _.video_updating = false;
}

Страничка:

<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT src="tiny-dash.js" type="text/javascript"></SCRIPT>
<SCRIPT>
var dash;
window.addEventListener( 'load', function() { dash = new Dash( 'dashvideo' ); }, false );
</SCRIPT>
<TITLE>Camera stream</TITLE>
</HEAD>
<BODY bgcolor="#000000" text="#c0c0c0">
<VIDEO id="dashvideo" src="media/manifest.mpd" preload="none">No video available</video>
</DIV>
</BODY>

На серваке из-под nobody запустить

#!/bin/sh

stream="rtsp://host:port/ch0_264"
target="/где.там.страничка.лежит/media/manifest.mpd"

/usr/bin/ffmpeg \
-probesize 32 \
-loglevel quiet \
-i "${stream}" \
-an \
-c:v copy \
-f dash \
-window_size 4 \
-extra_window_size 1 \
-min_seg_duration 2000000 \
-remove_at_exit 1 \
"${target}"

В /где.там.страничка.лежит/media лучше примонтировать tmpfs - и шустро, и диск не трогает.

Длительность сегмента и размер окна можно подкрутить, если канал убогий.

Для руления плеером из жабоскрипта есть методы Dash.play(), Dash.pause() и Dash.toggle(). Всякие кнопки и украшательства добавляются по вкусу.

Работает в хроме и фаерфоксе. Задержка, разумеется есть, но без неё, увы, при воспроизведении DASH не обойтись.

Решение отлично подходит для камер, которые нафиг не нужно куда-то записывать, но которые хотят смотреть много (и даже очень много) людей одновременно. HTTP сервер всего лишь раздаёт не особо большие файлики из tmpfs, так что нагрузка минимальна.

В принципе, это всё несложно использовать для организации self-hosted zoom при минимальной доработке - нужно только организовать передачу потоков с вебок на сервер (да хоть через netcat), а там их так же раскладывать в сегменты ffmpeg’ом.

Лицензия - WTFPL

ЗЫ: Хотел в теги добавить ещё «копрофилию» но ограничение на 5 тегов испортило всю малину.

ЗЗЫ: Это, кстати, эксклюзив специально для ЛОР. :) Нигде больше публиковать это я не собираюсь.

 , , , ,

Stanson
()

Выпуск minidjvu-mod 0.9m02

Новости — Open Source
Группа Open Source

minidjvu-mod – это кодировщик текстового слоя для создания многостраничных DjVu документов (аналог cjb2 пакета DjVuLibre). Пожалуй, единственный свободный (GPL-3.0) кодировщик на данный момент, способный конкурировать по итоговому размеру файла с коммерческими проприетарными аналогами (documenttodjvum.exe от LizardTech).

minidjvu-mod является форком проекта minidjvu, разработанного Ильёй Межировым и Алексеем Крюковым в 2005-2010 гг. По сравнению с оригиналом, алгоритмы обработки переписаны с использованием битовых операций напрямую над монохромными изображениями, а также добавлена поддержка многопоточной обработки (OpenMP) общих словарей (djbz) документа. Полученный прирост в производительности позволил убрать некоторые эвристики и потратить дополнительные ресурсы на более полную оптимизацию общего словаря, от чего напрямую зависит качество сжатия итогового документа. В результате на современных многоядерных CPU minidjvu-mod уже не критично отстает по скорости работы от коммерческих аналогов, а также стал сравним по качеству сжатия результата.

В новой версии minidjvu-mod 0.9m02 также добавлена возможность передавать параметры кодирования документа через файл настроек. С его помощью можно дополнительно:

  • задавать индивидуальные параметры обработки конкретным изображениям;
  • контролировать, какие изображения попадут в тот или иной общий словарь (djbz);
  • задавать индивидуальные параметры кодирования общих словарей.

>>> Страница проекта на github

 

Truf
()

Настройка Wireguard для доступа к локальной сети

Форум — Admin

Локальная сеть офиса с сервером на Ubuntu 20.04

Надо настроить доступ в эту сеть удаленным клиентам. Wireguard вообще подходит для такой задачи?

Везде инструкции, как настроить Wireguard для доступа клиентов в Интернет. Либо инструкции по настройке туннеля в офис, но почему-то для этого надо два сервера.

А простой доступ к локальной сети - такое вообще возможно, и если возможно, то как?

 

Name2006
()

73!

Форум — Talks

Сегодня все связисты страны будут купаться в волнах КВ, спрашивать прохожих какое у них КСВ и творить прочию дичь.

Перемещено Zhbert из general

 

exception13
()

Релиз OpenIPC 2.1

Новости — Hardware and Drivers
Релиз OpenIPC 2.1
Группа Hardware and Drivers

Вышла новая мажорная версия дистрибутива Linux OpenIPC (изначально основанного на OpenWRT), предназначенного для установки непосредственно в камерах видеонаблюдения для замены оригинальных прошивок, большинство из которых со временем перестают обновляться производителями.

Основные новшества релиза:

  • кроме SoC HiSilicon (60% китайских камер на нашем рынке) заявлена поддержка SigmaStar и Xiongmai;
  • добавлена поддержка протокола HLS, которая позволяет организовать трансляцию видео в любом браузере непосредственно с камеры без использования промежуточного сервера;
  • OSD система (on screen display) имеет возможность выводить произвольные данные шрифтами в Unicode (в том числе на русском языке);
  • поддержка протокола NETIP (также известного на DVRIP) для обновления камер в существующих инсталляциями с китайскими видеорегистраторами.

( читать дальше... )

>>> Сайт проекта

 , ,

widgetii
()

Как работает Nvidia prime?

Форум — Linux-hardware

Стоит значится 465 драйвер. Но при запуске игрулек - запуск идет на IntelHD а не nvdidia я может что-то не понимаю. Или там настраивать что-то надо?

 ,

virussokk93
()

Улучшаем изображения и видео с помощью нейросетей [увеличение, очистка артефактов сжатия, 60 FPS]

Форум — Talks

(!) Во-первых, если вы хотите сразу, ни в чем не разбираясь, просто сходу нажать пару кнопок и получить результат, то вам нужна графическая программа, которая написана только под Windows -
Waifu2x-Extension-GUI: https://github.com/AaronFeng753/Waifu2x-Extension-GUI/releases
Она уже содержит все необходимое, и позволяет в полностью автоматическом режиме разбить видео на кадры, улучшить их с помощью одной нейросети, увеличить плавность (60 FPS) в другой, и собрать итоговое видео в пару кликов.
Пример такой конверсии: https://www.youtube.com/watch?v=qGk4E9ss95s
Оригинал видео: https://www.youtube.com/watch?v=ht39JUr5wm8

Свободные Vulcan-реализации нейросетей представлены 是 nihui !

Нейросети для улучшения фотографий

Topaz Gigapixel AI - Лучшая нейросеть для улучшения фотографий, дает самое четкое и детальное изображение. Только для Windows и macOS. Может работать как плагин для Photoshop. Встречайте на всех файлопомойках страны.

realsr-ncnn-vulcan - Лучшая-свободная нейросеть для улучшения фотографий, победитель конкурса 2020 года среди собратьев. Скачать: https://github.com/nihui/realsr-ncnn-vulkan


Нейросети для улучшения рисунков

Topaz Gigapixel AI - Также является лучшей и для улучшения рисунков, дает самое четкое и детальное изображение. Только для Windows и macOS. Может работать как плагин для Photoshop. Встречайте на всех файлопомойках страны.

waifu2x-ncnn-vulcan - Лучшая-свободная нейросеть для улучшения рисунков, значительно опережает по качеству всех своих собратьев. Скачать: https://github.com/nihui/waifu2x-ncnn-vulkan


Нейросети для улучшения видео
В принципе, для улучшения видео, будь то фильм или мультфильм, можно использовать любую нейросеть, разложив на кадры и применив наиболее подходящую по типу контента. Но существует нейросеть, обученная на видео-материале и дающая лучшие результаты:

Topaz Video Enhance AI - Дает более лучший результат на видео-материале, чем нейросети, обученные на статике. Подходит как для фильмов, так и мультфильмов. Только для Windows и macOS. Встречайте на всех файлопомойках страны.


Нейросети для увеличения плавности видео (60 FPS)

rife-ncnn-vulkan - Лучшая нейросеть для увеличения плавности видео. На голову опережает всех, как по качеству, так и по скорости. Скачать: https://github.com/nihui/rife-ncnn-vulkan


Обзоры и примеры

Обзор RealSR - https://linuxreviews.org/RealSR
Обзор Waifu2x - https://linuxreviews.org/Waifu2x

480p видео, улучшенное при помощи Topaz Gigapixel AI - https://www.youtube.com/watch?v=b-U8CA1yF4U
(Topaz Video Enhance AI даст еще более лучший результат, при использовании модели Gaia-HQ)

Плейлист видео с увеличенной плавностью (60 FPS) - https://www.youtube.com/playlist?list=PLbZqiWS25MmQAJSuE4MbsvzriRfew_kNQ

Moderators
()

$деньги$ Кто возьмётся делать простые проекты хардверные с гитхаба? Большая часть - тупо готовые модули и копипаста. У самого нет времени.

Форум — Talks

Добрый день . Хочу делать мелкие проекты (максимум ЛУТ, остальное из готовых модулей, но с нормальным креплением в корпусе и пайкой проводов). Корпус уровня китай/распачная коробка можно. Количество изделий 1-3 штуки. Кто возьмётся за такие проектики? Часть оборудования сам могу прислать.

https://ibb.co/jbX96hz Вот пример первого простого проекта.

 , , , ,

aafedorov1989
()