Рейтинг:0

Безголовый браузер: вывод звука в Pulseaudio

флаг cg

Я пытаюсь запустить безголовый браузер на экземпляре EC2/Ubuntu 20.04, а затем выводить полученный аудиопоток в приемник Pulseaudio по умолчанию (который затем подхватывается DarkIce/Icecast). Я хочу запустить только одну веб-страницу (мою, размещенную на другом сервере, требующую jQuery и Howler.js), и полученный браузер/поток должен оставаться открытым 24/7.

Мне удалось получить аудиофайл на экземпляре для воспроизведения в Icecast (используя ogg123), поэтому ogg123>Pulseaudio>Darkice>Icecast2 работает. Я создал раковину по умолчанию, как показано ниже.

pactl load-module module-null-sink имя_приемника=радио
pacmd update-sink-proplist радиоустройство.description=радио
pacmd set-default-sink радио

и сделал Pulseaudio драйвером по умолчанию, создав ~/.asoundrc для включения

импульс по умолчанию
ctl.default импульс

Я не уверен, что правильный подход заключается в том, чтобы заставить браузер хорошо играть. Я пробовал (как в google-chome, так и в chromium) указывать непосредственно как на аудиофайл, так и на страницу с js, которая воспроизводит звук (с намерением в конечном итоге запустить его на экране), оба из которых, похоже, находят контент, ни подход воспроизводит любой звук. Например,

 google-chrome-stable --headless --disable-gpu --autoplay-policy=no-user-gesture-required --user-data-dir=/home/ubuntu/chromeUser --disable-accelerated-video-decode - -disable-software-rasterizer --enable-logging=stderr --v=1 https://domain.name/stream.html 

генерирует следующее

[0608/102421.257217:INFO:cpu_info.cc(53)] Доступное количество ядер: 1
[0608/102421.258656:INFO:cpu_info.cc(53)] Доступное количество ядер: 1
[0608/102421.258861:VERBOSE1:zygote_main_linux.cc(217)] ZygoteMain: инициализация 0 делегатов ветвления
[0608/102421.259318:VERBOSE1:zygote_main_linux.cc(217)] ZygoteMain: инициализация 0 делегатов ветвления
[0608/102421.271947:VERBOSE1:webrtc_internals.cc(118)] Не удалось получить каталог загрузки.
[0608/102421.280120:VERBOSE1:breakpad_linux.cc(2071)] Включен аварийный дамп без браузера для: gpu-process
[0608/102421.283276:ОШИБКА:gpu_init.cc(440)] Проход не поддерживается, GL отключен
[0608/102421.286107:VERBOSE1:breakpad_linux.cc(2071)] Включен аварийный дамп без браузера для: renderer
[0608/102421.288099:VERBOSE1:sandbox_linux.cc(69)] Активирована песочница seccomp-bpf для типа процесса: gpu-process.
[0608/102421.293815:VERBOSE1:sandbox_linux.cc(69)] Активирована песочница seccomp-bpf для типа процесса: визуализатор.
[0608/102421.303930:VERBOSE1:device_data_manager_x11.cc(216)] X Расширение ввода недоступно
[0608/102421.356750:VERBOSE1:configured_proxy_resolution_service.cc(852)] Поддержка PAC отключена, так как отсутствует системная реализация
[0608/102421.357514:VERBOSE1:configured_proxy_resolution_service.cc(852)] Поддержка PAC отключена, так как отсутствует системная реализация
[0608/102421.359494:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: https://domain.name/stream.html
[0608/102421.411474:VERBOSE1:document.cc(3974)] Document::DispatchUnloadEvents() URL = <null>
[0608/102421.411727:VERBOSE1:document.cc(4054)] Фактическая отправка события UnloadEvent: URL = <null>
[0608/102421.421675:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: /path/to/jquery.min.js
[0608/102421.424968:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: /path/to/jquery-ui.min.js
[0608/102421.429480:VERBOSE1:network_delegate.cc(32)] NetworkDelegate::NotifyBeforeURLRequest: /path/to/howler.min.js

Это правильный подход, чтобы заставить это работать (и если да, то почему это не так?), или я должен использовать Selenium/Puppeteer/что-то еще?

Спасибо, Крис

[в сторону: я пробовал количество вещей попытаться удалить ошибку «Проход не поддерживается, GL является быстрым шейдером», но безуспешно, хотя, похоже, это не мешает браузеру получить доступ к странице]

Рейтинг:1
флаг cg

Мне удалось заставить это работать, запустив Puppeteer, а не пытаясь спорить с Chromium из командной строки. я использовал этот ответ чтобы (надеюсь) держать Puppeteer открытым со следующими аргументами, чтобы звук запускался автоматически.

 this.browser = ожидание puppeteer.launch({
     безголовый: правда,
     ignoreDefaultArgs: [
         "--mute-аудио",
     ],
     аргументы: [
         "--autoplay-policy=нет жестов пользователя",
     ],
  });

После настройки приемника по умолчанию в PulseAudio и добавления ~/.ascoundrc (как указано выше) все работает (звук приемника принимает DarkIce > IceCast > трансляция). я скорее всего воспользуюсь pm2 для наблюдения за Puppeteer, но пока это рабочее решение.

Ответить или комментировать

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