Потоковая передача аудио страницы с помощью puppeteer

#node.js #audio #audio-streaming #puppeteer

#node.js #Аудио #потоковая передача аудио #puppeteer

Вопрос:

Предположим, я перехожу на страницу, где воспроизводится аудио. Есть ли какой-либо способ отобразить и захватить аудиопоток, поступающий с этой страницы puppeteer? Я не хочу просто сохранять его, а вместо этого имею доступ к потоку, который я могу постоянно передавать по другим материалам (например, на сервер с использованием discord api)

В официальном репозитории GitHub уже есть аналогичная проблема: функция startScreencast?

Но я просто хочу иметь доступ к аудио конвейеру экземпляра страницы (предпочтительно к потоку). Есть ли какой-либо способ добиться этого?

Комментарии:

1. На данный момент node.js для считываемого потока допускается только следующий тип данных nodejs.org/api/stream.html#stream_readable_streams . Или, может быть, вы можете прочитать аудио / видео файл с помощью fs

2. @Edilmanto Я не хочу читать какой-либо файл , как я уже сказал. Я бы хотел транслировать его напрямую, без какого-либо буфера 🙂

Ответ №1:

Вы можете запустить код на целевой странице следующим образом:

 await page.evaluate(() => {
  var audio = document.getElementById('audio');

  audio.onplay = function() {
    // Set the source of one <audio> element to be a stream from another.
    var stream = audio.captureStream();
    // This is your audio stream object...
  };
});
  

Подробная информация:

спецификация page.evaluate()

Захват МедиаПотока из холста, видео или аудиоэлемента

Комментарии:

1. Это не то, о чем я просил, я хочу записать звук всей страницы — независимо от того, как или какой звук воспроизводится. И я хочу сделать это, не имея доступа к тому, откуда исходит звук (например, аудиоэлементы, видеоэлементы и т. Д.). Некоторые вещи невозможно захватить, такие как капли и т. Д. … это был мой вопрос 🙂

2. Я не думаю, что это возможно с текущей версией Puppeteer, но, как вы сказали, функция startScreencast уже в пути. Возможно, это станет возможным в ближайшем будущем!

Ответ №2:

У меня была та же проблема, и поэтому я разработал пакет npm puppeteer-stream. Имейте в виду, что это будет работать только в режиме headful, поскольку расширения не поддерживаются в режиме headless. Я также привел пример того, как вы можете транслировать в discord.

Комментарии:

1. Спасибо за пакет npm. Не могли бы вы подробнее рассказать, почему захват звука невозможен в безголовом режиме? Является ли это ограничением пакета?

2. @yaskovdev github.com/Flam3rboy/puppeteer-stream/issues/4