OpenBSD FAQ - Мультимедиа [FAQ - На главную]



Включение аудиозаписи

По соображениям конфиденциальности запись звука в OpenBSD по умолчанию отключена. Для её включения используйте kern.audio.record sysctl.
# sysctl kern.audio.record=1
# echo kern.audio.record=1 >> /etc/sysctl.conf

Настройка аудиооборудования

Каждая модель звуковой карты имеет собственный набор элементов управления. У некоторых вообще нет элементов управления; у других по сотне и больше. Запуск Mixerctl(8) от имени суперпользователя (root) отобразит все элементы управления и текущие настройки.

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

Вот список элементов управления, которые следует учитывать:

Управление отключением звука и уровнем - Даже если кажется, что все настроено правильно правильно, может быть несколько регуляторов отключения звука (mute) или уровня громкости на пути прохождения сигнала. В приведенном ниже примере устройство имеет основной уровень записи и регулировка усиления микрофона:

record.adc-0:1=248,248
record.adc-0:1_source=mic
inputs.mic=85,85
Отключение питания внешнего усилителя (EAPD) - Этот переключатель обычно используется для энергосбережения в ноутбуках и может использоваться для выходного сигнала:
outputs.spkr_eapd=on
Источник записи - Некоторые устройства имеют несколько входов для микрофонов. Примеры таких элементов управления:
record.source=mic
record.adc-0:1_source=mic
Чтобы изменения вступали в силу при каждой перезагрузке, отредактируйте файл: /etc/mixerctl.conf. Например:
record.adc-0:1_source=mic
inputs.mic=85,85

Регулировка уровней звука

Утилита sndioctl(1) используется для управления звуком от имени обычного пользователя. При его запуске без аргументов будут перечислены все элементы управления и текущие настройки.

Элемент управления output.level присутствует всегда. Он либо соответствует аппаратному управлению, либо эмулируется программно.

Использование аудиоинтерфейса USB

Пример USB-аудиоинтерфейса в выводе dmesg может выглядеть так:
uaudio0 at uhub2 port 1 configuration 1 interface 1 "ABC C-Media USB Audio Device" rev 1.10/1.00 addr 2
uaudio0: class v1, full-speed, sync, channels: 2 play, 1 rec, 8 ctls
audio1 at uaudio0
В большинстве систем первым аудиоустройством является внутренняя звуковая карта. USB-аудиоустройство при подключении становится вторым. По умолчанию sndiod(8) настроен таким образом, что оба устройства видны для программ как snd/0 и snd/1 соответственно. Они могут использоваться независимо.

Программы будут использовать snd/default, которое по умолчанию указывает на snd/0. Эту связку можно быстро поменять при помощи server.device таким образом:

$ sndioctl server.device=1
Кроме того, sndiod(8) можно настроить так, чтобы snd/default соответствовало USB-устройству, когда оно подключено, или внутреннему устройству в противном случае:
# rcctl set sndiod flags -f rsnd/0 -F rsnd/1
# rcctl restart sndiod
Когда сервер опрашивает устройства, он сначала пытается подключиться к USB. Если его нет, вместо него используется внутренняя звуковая плата. Если USB-устройство отключено, sndiod пытается продолжить работу, используя внутреннюю звуковую карту. Если USB-устройство подключено снова, sndiod его увидит при следующей попытке открыть устройство. Чтобы заставить sndiod переключаться между устройствами, перезагрузите сервер:
# rcctl reload sndiod

Воспроизведение аудиофайлов

OpenBSD поставляется с aucat(1), программой, способной воспроизводить несжатые файлы WAV, AIFF и AU. Её можно использовать в очень простых случаях или просто для тестирования:

$ aucat -i filename.wav
Есть много других проигрывателей, доступных в виде пакетов, которые поддерживают и другие аудиоформаты.

Запись аудиофайлов

После включения записи с помощью sysctl kern.audio.record aucat(1) может использоваться для записи несжатых файлов WAV, AIFF и AU.
$ aucat -o file.wav
Вышеупомянутая команда начнет запись файла в формате WAV. Нажмите CTRL+C, чтобы закончить запись.

Чтобы воспроизвести файл, запустите:

$ aucat -i file.wav
Если запись работала, но воспроизведение записи было тихим или не таким, каким ожидалось, возможно, микшер нуждается в некоторой настройке. Убедитесь, что был выбран правильный источник для записи, и что он включен.

При необходимости полученный WAV-файл можно сжать при помощи соответствующей программы из портов. В качестве альтернативы для записи, обработки и сжатия аудиофайлов можно использовать такие порты как sox, ffmpeg или audacity.

Запись контрольного микса всего воспроизведения звука

Мониторинговый поток (monitoring stream) записывает комбинированный аудиосигнал со всех воспроизводящих устройств, позволяя дублировать или сохранять все, что проходит через аудиоподсистему. Эта функция может быть полезна для скринкастов или любого вида микширования живого звука.

Создайте monitor sub-device mon для sndiod(8) при помощи:

# rcctl set sndiod flags -s default -m play,mon -s mon
# rcctl restart sndiod
Настройте свою программу для записи звука с устройства snd/mon, например:
$ aucat -f snd/mon -o file.wav
На этом этапе все, что воспроизводит ваша система, записано в file.wav.

Снижение задержки звука

Задержка - это время между тем, когда программа принимает решение играть образец, и когда пользователь слышит образец. Поскольку аудиоданные всегда буферизуются, эта задержка пропорциональна размеру аудиобуфера. Рекомендуются следующие значения: Чем меньше аудио буфер (для достижения низкой задержки), тем больше вероятность перебега/недобега есть. Переполнение/опустошение буфера приводит к прерыванию звука.

sndiod(8) устанавливает минимальную задержку для всех аудиоприложений, а задержка по умолчанию составляет 160мс. Если вы планируете использовать приложения, требующие меньшей задержки, используйте -b, чтобы выбрать желаемую задержку (выраженную в количестве кадров). Например, при 48000 выборок в секунду задержка 50 мс соответствует:

48000 samples/second × 0.050 seconds = 2400 samples
Затем сделайте:
# rcctl set sndiod flags -b2400

Улучшает ли низкая задержка синхронизацию аудио-видео?

Нет, синхронизация звука с видео не требует малой задержки. Проблемы синхронизации часто вызваны самим программным обеспечением. Заставить приложение использовать буферы меньшего размера (запустив sndiod(8) в режиме с низкой задержкой) в некоторых случаях может скрыть реальную проблему, и создается впечатление, что программа работает лучше, но, очевидно, правильнее всего будет начать поиск соответствующей ошибки.

Использование удаленного аудиооборудования

sndiod(8) можно настроить для приема подключений из сети, позволяя другим машинам также использовать звуковую карту. В удаленной системе со звуковой картой запустите:
# rcctl set sndiod flags -L-
В локальной системе настройте свою программу на использование snd@hostname/0, где "hostname" - это адрес удаленной системы. Переменная среды AUDIODEVICE может иметь значение, указанное выше значение, чтобы сделать удаленную звуковую карту звуковым устройством по умолчанию.

Любая система, способная подключиться к TCP-порту 11025 удаленного хоста, сможет использовать аудиоустройство. Из соображений конфиденциальности только один пользователь из одной системы может иметь подключения к нему в данный момент. Если несколько систем должны использовать аудиоустройство одновременно, файл cookie авторизации sndio(7) должен быть таким же. Например, скопируйте свой ~/.sndio/cookie во все учетные записи, который может использовать аудиоустройство.

Чтобы избежать сбоев, TCP-трафик на порту 11025 может быть приоритетным с помощью пакетного фильтра. В конфигурации по умолчанию sndiod будет потреблять около 200КБ/с пропускная способность сети.

Выбор аудиоустройства по умолчанию

Звуковое устройство по умолчанию выбирается с помощью AUDIODEVICE переменного окружения. Если он не установлен, используется snd/default, который является указателем на первое аудиоустройство. под управлением sndiod(8). Самый гибкий способ выбора устройства по умолчанию - экспорт AUDIODEVICE, возможно, в профиле входа пользователя.

Кроме того, устройство sndiod(8) по умолчанию может быть изменено на лету при помощи server.device, предоставляемого sndioctl(1):

$ sndioctl server.device=1

Другой способ изменить устройство вывода звука по умолчанию - сделать желаемый устройство первое устройство, управляемое sndiod(8). Например, чтобы использовать внешний ЦАП, а не встроенный на материнской плате аудио, просто измените sndiod(8) флаги запуска для использования этого устройства:

# rcctl set sndiod flags -f rsnd/1
# rcctl restart sndiod
Это сделает второе аудиоустройство (rsnd/1) по умолчанию.

Отладка проблем со звуком

Если при воспроизведении аудио ничего не слышно, возможно там: регулятор микшера установлен на низкий или просто приглушенный. См. этот раздел для настройки микшера. Пожалуйста, включите звук всех входов и выходов, прежде чем сообщать о проблеме.

Если вы считаете, что ваше устройство должно работать, но по какой-либо причине нет, тогда пришло время для небольшой отладки. Следующие шаги помогут определить, обрабатываются ли данные DAC.

# cat > /dev/audio0 < /dev/zero &
[1] 9926
# audioctl play.{bytes,errors}
play.bytes=3312000
play.errors=0
# audioctl play.{bytes,errors}
play.bytes=7065600
play.errors=0
# audioctl play.{bytes,errors}
play.bytes=9379200
play.errors=0
# kill %1
# fg %1
cat > /dev/audio0 < /dev/zero
Terminated
Здесь мы видим, что количество обработанных данных play.bytes увеличивается каждый раз, когда мы проверяем, значит, данные текут. Мы также видим, что устройство не прогоняет ни одного образца (play.errors). Это тоже хорошо.

Обратите внимание, что даже если у вас были подключены динамики при запуске вышеуказанного test, вы ничего не должны были слышать. Тест отправляет на устройство нули, что является тишиной для всех в данный момент. поддерживаемой кодировки по умолчанию.

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

Если у вас все еще есть проблемы, возможно, пришло время отправить отчет об ошибке. Помимо обычной информации отчета об ошибке, такой как полный dmesg и описание проблемы, включите также вывод по умолчанию Mixerctl -v и результат вышеупомянутого теста для обработки DAC.

Использование MIDI-инструментов

Протокол цифрового интерфейса музыкальных инструментов (MIDI) обеспечивает стандартизированные и эффективные средства представления информации о музыкальном исполнении как электронные данные. MIDI-данные содержат только инструкции, необходимые синтезатору для воспроизведения звуки, а не сами звуки.

Для воспроизведения MIDI-данных необходимо подключить синтезатор к MIDI-порту устройства. Точно так же для записи MIDI-данных требуется MIDI-инструмент (например, MIDI-интерфейс). клавиатура). Усовершенствованные MIDI-инструменты могут содержать несколько частей (синтезаторы, клавиатуры, панели управления и т.д.). Они отображаются в OpenBSD как несколько MIDI-портов.

Если у вас уже запущен OpenBSD, поищите MIDI-порты в выводе команда dmesg(8). Пример MIDI-портов в выводе dmesg:

umidi0 at uhub2 port 2 configuration 1 interface 0 "Roland Roland XV-2020" rev 1.10/1.00 addr 2
midi0 at umidi0: <USB MIDI I/F>
umidi1 at uhub1 port 2 configuration 1 interface 1 "Evolution Electronics Ltd. USB Keystation 61es" rev 1.00/1.25 addr 3
midi1 at umidi1: <USB MIDI I/F>
Он показывает два драйвера midi(4), известная программами как: Выход клавиатуры можно подключить ко входу синтезатора следующим образом:
$ midicat -q midi/0 -q midi/1
Теперь вы можете слышать, что играете на MIDI-клавиатуре синтезатора.

Сервер sndiod(8) предоставляет MIDI через порты, позволяя программам отправлять друг другу MIDI-данные. Например, если у вас нет подключенного аппаратного синтезатора, вы можете запустите программный (например, порт audio/fluidsynth), а затем используйте его как MIDI выход:

$ midicat -q midi/0 -q midithru/0

Использование веб-камеры

Включение записи видео

По соображениям конфиденциальности запись видео в OpenBSD по умолчанию отключена. Для его включения можно использовать sysctl kern.video.record.
# sysctl kern.video.record=1
# echo kern.video.record=1 >> /etc/sysctl.conf

Поддерживаемое оборудование

Поддерживаются многие веб-камеры, соответствующие спецификации USB Video Class (UVC) драйвером устройства uvideo(4) и доступны пользователю через слой video(4).

Поддерживаемая веб-камера (или другое видеоустройство) отображается в dmesg нравится:

uvideo0 at uhub0 port 8 configuration 1 interface 0 "Azurewave Integrated Camera" rev 2.01/69.05 addr 10
video0 at uvideo0
uvideo1 at uhub0 port 8 configuration 1 interface 2 "Azurewave Integrated Camera" rev 2.01/69.05 addr 10
video1 at uvideo1
Это устройство будет доступно через /dev/video0.

Некоторые ноутбуки также подключают второе (непригодное для использования) видеоустройство для инфракрасного порта камеры. Используемое устройство камеры можно найти с помощью команды video (1):

$ video -q -f /dev/video0
video device /dev/video0:
  encodings: yuy2
  frame sizes (width x height, in pixels) and rates (in frames per second):
        320x180: 30
        320x240: 30
        352x288: 30
        424x240: 30
        640x360: 30
        640x480: 30
        848x480: 20
        960x540: 15
        1280x720: 10
  controls: brightness, contrast, saturation, hue, gamma, sharpness, white_balance_temperature
$ video -q -f /dev/video1
video: /dev/video1 has no usable YUV encodings
По умолчанию только root имеет доступ к видеоустройствам. Для использования обычного пользователя необходимо изменить разрешения устройства:
# chown $USER /dev/video0

Запись трансляции с веб-камеры

В этом разделе используются ffplay и ffmpeg из пакета graphics/ffmpeg. Чтобы увидеть возможности данной камеры, запустите следующее:
$ ffplay -f v4l2 -list_formats all -i /dev/video0
[...]
[video4linux2,v4l2 @ 0x921f8420800] Raw       : yuyv422 : YUYV : 640x480 320x180 320x240 352x288 424x240 640x360 848x480 960x540 1280x720
[video4linux2,v4l2 @ 0x921f8420800] Compressed:   mjpeg : MJPEG : 1280x720 320x180 320x240 352x288 424x240 640x360 640x480 848x480 960x540
В первой строке показаны поддерживаемые разрешения в несжатом формате YUYV. Частота кадров в этом формате может быть очень низкой. Во второй строке показаны поддерживаемые разрешения сжатого видео MJPEG, что может обеспечить гораздо более высокую частоту кадров.

Выберите одно из разрешений MJPEG и запустите следующее, чтобы проверить его:

$ ffplay -f v4l2 -input_format mjpeg -video_size 1280x720 -i /dev/video0
[...]
Input #0, video4linux2,v4l2, from '/dev/video0':B sq=    0B f=0/0
  Duration: N/A, start: 1599377893.546533, bitrate: N/A
    Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 1280x720, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
Поток веб-камеры должен отображаться вместе с разрешением и кадром.

Если это сработает, видео можно записать с помощью ffmpeg следующим образом:

$ ffmpeg -f v4l2 -input_format mjpeg -video_size 1280x720 -i /dev/video0 ~/video.mkv
Нажмите "q", чтобы закончить запись.

Управление настройками веб-камеры

Веб-камеры обычно имеют яркость, контрастность и другие элементы управления, которые можно изменено с помощью команды video(1).
$ video -c
brightness=128
contrast=32
saturation=64
hue=0
gamma=120
sharpness=3
white_balance_temperature=auto
Например, настройку яркости можно изменить на 200:
$ video brightness=200
brightness: 128 -> 200
Все настройки можно вернуть к значениям по умолчанию с помощью video -d.

Некоторые настройки поддерживают автоматическую регулировку, если задано значение "auto".

Доступ к веб-камере в веб-браузерах

По умолчанию Chromium имеет доступ к /dev/video. Чтобы Chromium мог получить доступ и к другим видеоустройствам, пути к устройствам должны быть добавлен в /etc/chromium/unveil.main и /etc/chromium/unveil.utility_video.

Firefox имеет доступ к /dev/video и /dev/video0 по умолчанию. Чтобы разрешить Firefox доступ к другим видеоустройствам, пути к устройствам должны быть добавлен в /etc/firefox/unveil.main.