Пример потоковой передачи аудио с YouTube с использованием FFMPEG - PullRequest
0 голосов
/ 03 марта 2020

Я хотел бы использовать FFMPEG для потоковой передачи аудио с YouTube на другой источник

using (var ffmpeg = CreateProcess(track.GetUrl()))
using (var stream = client.CreatePCMStream())
{
    try { await ffmpeg.StandardOutput.BaseStream.CopyToAsync(stream); }
    finally { await stream.FlushAsync(); }
}

Где CreateProcess() выглядит следующим образом:

private Process CreateProcess(string url)
{
    return Process.Start(new ProcessStartInfo
    {
        FileName = "ffmpeg.exe",
        Arguments = $"-hide_banner -loglevel panic -i \"{url}\" -ac 2 -f s16le -ar 48000 pipe:1",
        UseShellExecute = false,
        RedirectStandardOutput = true
    });
}
  • url представляет URL видео YouTube.
  • client представляет аудио-клиент Discord, в который я хочу скопировать поток.
  • Я использую Discord. Net (последняя стабильная версия).

Кажется, что аргументы не верны, так как нет воспроизведения и такое исключение не возвращается.

1 Ответ

0 голосов
/ 15 апреля 2020

Я бы использовал YoutubeExplode в сочетании с CliWrap ;

var youtube = new YoutubeClient();
var streamManifest = await youtube.Videos.Streams.GetManifestAsync("...");
var streamInfo = streamManifest.GetAudioOnly().WithHighestBitrate();
await using var input = await youtube.Videos.Streams.GetAsync(streamInfo);

await using var output = client.CreatePCMStream();

var cmd = input | Cli.Wrap("ffmpeg").WithArguments("-i pipe:0 ...") | output;
await cmd.ExecuteAsync();
...