voiceConnection.receiver和voiceReciever.createPCMStream不接收数据

时间:2018-10-27 01:17:59

标签: discord.js

标题是我的问题。这是我正在使用的代码:

const voiceChannel = message.guild.channels.find(channel => channel.name === args[0]);
if (!voiceChannel || voiceChannel.type !== 'voice') {
  return message.reply(`I couldn't find the voice channel ${args[0]}.`);
}

await voiceChannel.join();
let connection = message.guild.voiceConnection;
connection.on('speaking', (user, speaking) => {
    if(speaking) {
        const receiver = connection.createReceiver();
        const stream = receiver.createPCMStream(user);
        receiver.on('opus', (user, buffer) => {
            console.log('got some data');
        });
        stream.on('data', chunk => {
            console.log(chunk.length);
        });
    }
});

控制台上什么都没有打印,所以我想流和语音接收器都没有接收到任何数据。另外,我看了很多文章,很多人使用此代码,并且对他们有用。如果有人知道为什么会发生这种情况,请帮忙!
预先感谢。

1 个答案:

答案 0 :(得分:1)

回答有点晚了,但可能会帮助别人。

您必须先发送一个静默帧。

const { Readable } = require('stream');
class Silence extends Readable {
  _read() {
    this.push(Buffer.from([0xF8, 0xFF, 0xFE]));
  }
}

与语音通道建立连接后,您可以执行以下操作:

connection.on('ready', ()=>{
connection.play(new Silence(), { type: 'opus' });
})

有关更多详细信息,您可以访问此page