LINUX.ORG.RU

Сообщения Adeptus-Mechanicus

 

ElectronJS, запись и конвертирование в mp3 в real-time

Форум — Web-development

Задача

Получать поток данных с микрофона, конвертировать на лету в mp3 формат и передавать на сервер. Цифровой аналог рации.

Используется

  • ElectronJS (ver. 6.0.10);
  • fluent-ffmpeg (ver. 2.1.2)
  • ffmpeg (ver. 4.2-static)

Комментарий

Сейчас используется следующий алгоритм: В renderer процессе через navigator.getUserMedia инициализируется микрофон и получаем поток. Поток скармливается MediaRecorder. Когда приходит команда начать запись, данные собираются в blob, blob скармливается FileReader, чтобы получить base64 строку. Полученный результат передаётся через IPC из renderer процесса в main. В main процессе данные сохраняются во временный файл. Временный файл скармливается ffmpeg, который в виде выходного файла некий url адрес конечного файла, куда производится запись/передача. Это одинаково работает, и в Windows системе, и в Linux системах.

Сейчас требуется real-time реализация, чтобы данные конвертировались в mp3 и передавались в процессе записи.

Что пробовал:

  • Скармливать данные из MediaRecorder в ffmpeg через Stream API. Мысль такова: Пока «активен» поток, ffmpeg конвертирует и передаёт данные в real-time режиме. Поток закрываем, конвертирование останавливается, в файл записывается окончание. Через remote.require подключил ffmpeg в renderer процессе. Создал сквозной Transform поток, который входящие данные трансформировал в Blob’ы. Поток скармливался ffmpeg. Аналогично действующему решению, только данные передаются сразу в ffmpeg. ffmpeg ругается на входные данные, это странно, потому что такие же данные записываются во временный файл. Ещё не разобрался в причинах такого поведения.

  • Передавать в ffmpeg адрес микрофона. Мысль такова: ffmpeg всеяден и может самостоятельно брать поток данных с микрофона. ElectronJS будет только управлять командами «старт», «стоп» и предоставлять конечный url. Здесь всплывает пласт проблем, связанных с поиском и объявлением аудио устройств.

Вопросы

Какие ещё можно рассмотреть доступные варианты, что мог упустить из виду или сделать неправильно?

 , , ,

Adeptus-Mechanicus
()

Оптимизация куска кода

Форум — Web-development

Доброе утро, ЛОР.

Задача: Плагин авторизации для Moodle. Плагин проверяет на внешней системе идентификационные данные пользователя. Если результат true, авторизует пользователя, иначе отклоняет авторизацию.

Особенность: Moodle работает только с локальными профилями. Если авторизация разрешена, а локальный профиль отсутствует, пользователя потребуется создать.

В начале был такой код:

public function user_login($username, $password) {
    if (!auth_billing::check_user($username, $password)) {
        return false;
    }

    if (!$user = get_complete_user_data('email', $username)) {
        if (!auth_billing::create_user($username)) {
            return false;
        }

        $user = get_complete_user_data('email', $username);
    }

    complete_user_login($user);
    self::redirect();
}

Авторизация происходит по адресу электронной почты и паролю пользователя. На версии Moodle 3.5+ код работает, как и ожидается. На старых версиях Moodle всплыл нюанс: В функцию передаётся адрес эл. почты только тогда, когда локальный профиль отсутствует. В остальных случаях, передаётся логин существующего пользователя.

Функция была переписана таким образом:

public function user_login($username, $password) {
    if (!validate_email($username)) {
        if (!$user = get_complete_user_data('username', $username)) {
            return false;
        }

        if (!auth_billing::check_user($user->email, $password)) {
            return false;
        }
    } else {
        if (!auth_billing::check_user($username, $password)) {
            return false;
        }

        if (!$user = get_complete_user_data('email', $username)) {
            if (!auth_billing::create_user($username)) {
                return false;
            }

            $user = get_complete_user_data('email', $username);
        }
    }

    complete_user_login($user);
    self::redirect();
}

Вопрос: Это работает и выполняет возложенную задачу. Не устраивает количество условий и уровень вложенности. Существуют способы оптимизации этого кода?

 , ,

Adeptus-Mechanicus
()

Дилемма по видеокартам

Форум — Linux-hardware
  • Процессор Intel Core i7-870 Lynnfield;
  • Материнская плата Gigabyte GA-P55A-UD3R;
  • Видеокарта XFX Radeon HD 5770;


Ситуация такова:

После долгой и счастливой жизни, посыпался системный диск.

В связи с заменой, как диска, так и OS, пересмотрел цели и понял, что на стационарной системе мои задачи удовлетворит *nix система.

Столкнулся с проблемой, что на Ubuntu LTS (16.04) имеется вариант использовать amdgpu-pro для новых карт, либо открытый драйвер для всех остальных. AMDGPU-pro естественно не признаёт мою карту, на открытых драйверах расширение некорректное и гудит карта как паровоз. FGLRX в репозиториях отсутствует, на сайте AMD под 12.xx и 14.xx версии только.

Поэтому прошу совета, как мне поступить дальше.

Мне видятся такие варианты:

  • Я чудик, который не осилил установку драйверов, ибо всё не так печально.
  • Сменить видео-карту. И тут возникает вопрос, на какую.

    В своей жизни я имел близкий контакт только с данной AMD'шной и Intel'грированными.

    Какая карта будет наиболее качественной и долгоживущей, как по поддержке, так и по железной составляющей?

    Главное - стабильность, качество и запаса на несколько лет спокойной работы.

    Мне видеться, например, NVidia Geforce GTX 680.

  • Избавиться от барахла, разгрузить мозг и приобрести что-то похожее на Dell XPS 13 / Apple MacBook Air Old Version.

 , , , ,

Adeptus-Mechanicus
()

FreeBSD vs. Gentoo [Asus Eee PC 4G]

Форум — Desktop

Всем добра и пони. Хотелось бы поднять интересную для себя тему.

Есть говно мамонтанетбук Asus Eee PC 701 (4G). Из плюшек – RAM на 2G.
Стоял Debian Wheezy, но рандомные зависания победить не смог. Планирую сменить ОСь и постараться выжать всё из железа по максимуму. Поэтому хочу перейти на source-based систему.

Рассматриваю Gentoo и FreeBSD. Какая ОСь позволит собрать минималистичную систему, без ущерба удобства пользования ПК? Не однократно встречал высказывания, что фряха лучше работает с памятью и более производительна относительно Gentoo, если приготовить их обе правильно. Хотя и много жалоб на кривую работу того же Flash’а и прочих пользовательских удобств.

 , ,

Adeptus-Mechanicus
()

Epiphany и съеденные пиксели

Форум — Desktop

Аве, ЛОР!
Аве, %username%!

Использую для сёрфинга браузер Epiphany. Браузер всем нравится, кроме убийственной кнопки «Веб-Браузер» в верхнем левом углу. Как от неё избавиться?

Расследование показало, что кнопка работает в оболочке Gnome. В других системах оно должно работать иначе. Как совместить Epiphany и MATE для вселенской гармонии? Русскоязычный и иноязычный Интернет молчит.

Система Debian Wheezy.
Epiphany версии 3.4.2.
DE MATE 1.8.0.

 , , ,

Adeptus-Mechanicus
()

Периодические зависания «ежа» под Debian’ом

Форум — Linux-hardware

Добрый вечер, ЛОРчане!

Столкнулся со следующей неожиданной проблемой. Изредка зависает нетбук. Зависает намертво, переход Ctrl + Alt +F\d не работает, на кнопку включения/выключения не реагирует, индикатор активности диска молчит, сенсорная панель тоже мертва. Приходится выключать удерживанием кнопки питания.

Так как выполнил оптимизацию системы под SSD, после такого «выкидыша» приходится минут 30 танцевать с проверкой всех разделов (журнал отсутствует, запись отложена и пр.).

Системность выявить не могу. Было два-три зависания почти подряд, проверял журналы. Выявил, что какое-то почтовое ПО что-то не могло сделать (не помню уже), вылечил. Неделю проработал отлично. Во время отключения служб в автозапуске, завис на отключении hdparm. Повторить ошибку не смог. После этого месяц он меня не беспокоил, я даже забыл об этом. И сейчас, почти сразу после включения он завис. Получилось так, что он завис при подключении ЗУ.

Прямо сейчас сижу, проверяю все разделы. Подозрения, что журналы будут пусты.

Как выявить этот баг? Прошу помощи.

Аппарат: ASUS Eee PC 701 (4G)

Система: Debian Stable (Wheezy), без элементов ветки testing, с backports веткой. Из нестандартных репозиториев только официальный DropBox, Sublime Text 2.

 , , ,

Adeptus-Mechanicus
()

RSS подписка на новые темы