Я хочу постоянно передавать аудиопоток mpeg (тип MIME: audio/mpeg
) с URL-адреса (в частности, https://s1 -sjc.liveatc.net / kjfk_atis ) в один из голосовых каналов намой сервер Discord использует бот.
Я использую модуль discord.js
nodejs, который обрабатывает API-интерфейс Discord объектно-ориентированным способом. Я уже создал учетную запись бота и сделал базовый "Пинг! Понг!"тест, чтобы убедиться, что мой код работает.
Я понятия не имею, как работает аудиопоток mpeg или API голосового канала Discord, и не нашел никого с таким опытом.
Я искал дешевый подходкоторый просто отвечает пользователю URL в виде простого текста в текстовом канале. Но я чувствую, что это неприемлемо.
const Discord = require('discord.js');
const client = new Discord.Client();
client.on('ready', () => {
console.log(`Logged in as ${client.user.tag}!`);
});
client.on('message', msg => {
if (msg.content === 'ping') {
msg.reply('Pong!');
}
});
client.login('heregoesmybottoken');
Готовый результат должен подключиться к голосовому каналу и начать воспроизведение / потоковую передачу аудио с URL https://s1 -sjc.liveatc.net / kjfk_atis после запуска.
РЕДАКТИРОВАТЬ
Для меня решение обрезать аудиопоток, записать его на диск, затем прочитать егодиск является неприемлемым , потому что это вызывает сильную нагрузку ввода-вывода.
Поскольку никто еще не дал ответа, я провел собственное исследование и обнаружил, что метод, используемый для потоковой передачиАудио в https://s1 -sjc.liveatc.net / kjfk_atis отличается от потокового видео: оно не фрагментировано , но вместо этого постоянный HTTPS-запрос, содержащий то, что предположительно является необработанным PCMdata.
const request = require('request');
const fs = require("fs");
request('https://s1-sjc.liveatc.net/kjfk_atis').pipe(fs.createWriteStream('atis.mp3'));
Я написал этот код для загрузки потока, и действительно NodeJS начал непрерывно записывать в atis.mp3
, пока я не нажму Ctrl+C
. Файл содержит аудио и может открываться проигрывателем Windows Media.
Так что теперь мне просто нужно найти способ перенаправить этот поток в discord.js, и, надеюсь, node-opus автоматически преобразуетпоток в правильный формат.