Ich möchte Raw Audio von WASAPI Loopback von NAudio aufnehmen und Pipe zu FFmpeg für Streaming über Speicherströme. Von diesem document, kann FFmpeg Eingabe als Raw bekommen, aber ich habe Ergebnis Geschwindigkeit bei 8 ~ 10x! ist hier mein Code:Rohaudio von NAudio
waveInput = new WasapiLoopbackCapture();
waveInput.DataAvailable += new EventHandler<WaveInEventArgs>((object sender, WaveInEventArgs e) =>
{
lock (e.Buffer)
{
if (waveInput == null)
return;
try
{
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
{
memoryStream.Write(e.Buffer, 0, e.Buffer.Length);
memoryStream.WriteTo(ffmpeg.StandardInput.BaseStream);
}
}
catch (Exception)
{
throw;
}
}
});
waveInput.StartRecording();
FFmpeg Argumente:
ffmpegProcess.StartInfo.Arguments = String.Format("-f s16le -i pipe:0 -y output.wav");
1. Kann jemand bitte diese Situation erklären und eine Lösung geben Sie mir?
2. Sollte ich Wav-Header zum Speicher-Stream hinzufügen dann Pipe zu FFmpeg als Wav-Format?
Die Arbeitslösung
waveInput = new WasapiLoopbackCapture();
waveInput.DataAvailable += new EventHandler<WaveInEventArgs>((object sender, WaveInEventArgs e) =>
{
lock (e.Buffer)
{
if (waveInput == null)
return;
try
{
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
{
memoryStream.Write(e.Buffer, 0, e.BytesRecorded);
memoryStream.WriteTo(ffmpeg.StandardInput.BaseStream);
}
}
catch (Exception)
{
throw;
}
}
});
waveInput.StartRecording();
FFMpeg Argumente:
ffmpegProcess.StartInfo.Arguments = string.Format("-f f32le -ac 2 -ar 44.1k -i pipe:0 -c:a copy -y output.wav");
ich verwendet, um dieses '-f s32le -i Rohr: 0 -ar 44100 -ac 2 -sample_fmt s32 -c: a Kopieren Sie -y output.wav. aber bekam 2x Geschwindigkeit. Der FFMpeg sagte: Guested Channel Layout für Input Stream # 0.0: Mono. Stream # 0: 0: Audio: pcm_s32le, 44100 Hz, mono, s32, 1411 kb/s – Ken
Ich habe das oben geändert zu: '-f s32le -ac 2 -ar 44100 -i pipe: 0 -beispiel_fmt s32 -c: a kopiere -y output.wav' und erhielt das Ergebnis: Stereo und Geschwindigkeit von 3x auf 1x in den ersten 4 Minuten und 1x stetig weiter. Es brachte Interferenz und Rauschen in den gesamten Ton, aber ich konnte den Ton erkennen. Was soll ich tun, um damit umzugehen? Ihre Informationen haben mir sehr geholfen. Vielen Dank. – Ken
Ich glaube nicht, dass S32 richtig ist. Sie möchten float angeben (nicht sicher, wofür das Flag steht). Ich kann die Geschwindigkeitszunahme nicht erklären, aber ich nehme ab - das ist sehr seltsam –