Дискорд бот не проигрывает трек

Рейтинг: 0Ответов: 1Опубликовано: 29.06.2023

В коде созданы все условия чтобы он мог играть музыку. Перепробовал все способы/аналоги. Прошу вашей помощи!

                    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($"Трек проигран"); не происходит.

Ответы

▲ 0Принят

Огромно спасибо @EvgeniyZ , который подсказал правильное решение! Вся ошибка была из-за того что я скачал одну библиотеку

Нужно скачать две библиотеки:
Opus
libsodium

Все они приложены к официальной документации: github