How to live stream PCM to website with Node?












0















I use discord.js for node.js. Bot use VoiceReceiver and createPCMStream() for get pcm. I managed to make a voice recorder in this way:



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);


But I want to deliver via express broadcast of this pcm in real time, or hang it on the port. Please tell me which way to look. I looked at the speaker, but I did not figure it out.










share|improve this question





























    0















    I use discord.js for node.js. Bot use VoiceReceiver and createPCMStream() for get pcm. I managed to make a voice recorder in this way:



    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);


    But I want to deliver via express broadcast of this pcm in real time, or hang it on the port. Please tell me which way to look. I looked at the speaker, but I did not figure it out.










    share|improve this question



























      0












      0








      0








      I use discord.js for node.js. Bot use VoiceReceiver and createPCMStream() for get pcm. I managed to make a voice recorder in this way:



      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);


      But I want to deliver via express broadcast of this pcm in real time, or hang it on the port. Please tell me which way to look. I looked at the speaker, but I did not figure it out.










      share|improve this question
















      I use discord.js for node.js. Bot use VoiceReceiver and createPCMStream() for get pcm. I managed to make a voice recorder in this way:



      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);


      But I want to deliver via express broadcast of this pcm in real time, or hang it on the port. Please tell me which way to look. I looked at the speaker, but I did not figure it out.







      node.js socket.io discord discord.js






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 19 '18 at 7:49









      Chris van Chip

      8011




      8011










      asked Nov 19 '18 at 11:55









      AlexeyAlexey

      13




      13
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53374125%2fhow-to-live-stream-pcm-to-website-with-node%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53374125%2fhow-to-live-stream-pcm-to-website-with-node%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

          ComboBox Display Member on multiple fields

          Is it possible to collect Nectar points via Trainline?