Дискорд бот не проигрывает трек
В коде созданы все условия чтобы он мог играть музыку. Перепробовал все способы/аналоги. Прошу вашей помощи!
try
{
var tempFileName = Path.GetTempFileName();
var getTrackManifest = await Program.youtube.Videos.Streams.GetManifestAsync(Tracks[0].Id);
var getAudioStream = getTrackManifest.GetAudioOnlyStreams().TryGetWithHighestBitrate();
await Program.youtube.Videos.Streams.DownloadAsync(getAudioStream, $"{tempFileName}");
var ffmpegProcess = Process.Start(new ProcessStartInfo
{
FileName = "ffmpeg",
Arguments = $"-hide_banner -loglevel panic -i \"{tempFileName}\" -ac 2 -f s16le -ar 48000 pipe:1",
UseShellExecute = false,
RedirectStandardOutput = true,
});
var ffmpegOutput = ffmpegProcess.StandardOutput.BaseStream;
using (var audioStream = _audioClient.CreatePCMStream(AudioApplication.Mixed))
{
if (audioStream == null) { Console.WriteLine("Аудио-поток равен нулю"); }
Console.WriteLine("58 str");
Console.WriteLine(getAudioStream.Url);
try
{
Console.WriteLine($"Загрузка трека");
byte[] buffer = new byte[81920];
int bytesRead;
while ((bytesRead = await ffmpegOutput.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await audioStream.WriteAsync(buffer, 0, bytesRead);
}
Console.WriteLine($"Трек проигран");
}
finally
{
await audioStream.FlushAsync();
}
Console.WriteLine("62 str");
File.Delete(tempFileName);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Ошибок никаких нет, выводит нужную ссылку на аудио-поток. Но стопорится на строке с await audioStream.WriteAsync(buffer, 0, bytesRead); И далее бот просто молчит. Следующий вывод через Console.WriteLine($"Трек проигран"); не происходит.
Источник: Stack Overflow на русском