Как транслировать PCM на сайт с Node? - PullRequest
0 голосов
/ 19 ноября 2018

Я использую discord.js для node.js. Бот использует VoiceReceiver и createPCMStream () для получения pcm. Мне удалось сделать диктофон следующим образом:

const client = new Discord.Client({disableEveryone: false});
client.on("ready", function(){
    console.log(`${client.user.username} is online!`);
    client.user.setActivity("Ожидает!");
})

function generateOutputFile(channel, member) {
  // use IDs instead of username cause some people have stupid emojis in their name
  const fileName = `./recordings/${channel.id}-${member.id}-${Date.now()}.pcm`;
  return fs.createWriteStream(fileName);
}

client.on('message', message => {
  // Voice only works in guilds, if the message does not come from a guild,
  // we ignore it
  if (!message.guild) return;

  if (message.content === '/stream') {
    // Only try to join the sender's voice channel if they are in one themselves

    const voiceChannel = message.member.voiceChannel;

    if (message.member.voiceChannel) {
      message.member.voiceChannel.join()
        .then(connection => { // Connection is an instance of VoiceConnection
            const receiver = connection.createReceiver();

            connection.on('speaking', (user, speaking) => {
                  if (speaking) {
                    // this creates a 16-bit signed PCM, stereo 48KHz PCM stream.
                    const audioStream = receiver.createPCMStream(user);
                    // create an output stream so we can dump our data in a file
                    const outputStream = generateOutputFile(voiceChannel, user);
                    // pipe our audio data into the file stream
                    audioStream.pipe(outputStream);
                    outputStream.on("data", console.log);
                    // when the stream ends (the user stopped talking) tell the user
                    audioStream.on('end', () => {});
                  }
            })

            message.reply('Я тут, напишите /start, когда будете готовы начать!');
        })
        .catch(console.log);
    } else {
      message.reply('Сначала вы должны присоединиться к каналу!');
    }
  }
})

client.login(token);

Но я хочу доставить через экспресс-трансляцию этого ПКМ в режиме реального времени или повесить его на порт. Пожалуйста, скажите мне, как посмотреть. Я посмотрел на динамик, но не понял.

...