Aufbauend auf der Antwort von @ Allan versuche ich, die ffmpeg-Ausgabe auf einen Server umzuleiten.
$ ffmpeg -f avfoundation -i ":1" -t 10 - | ssh user@host .... -
Aber ich bekomme folgende Fehlermeldung:
"Mindestens eine Ausgabedatei muss angegeben werden"
Ich habe auch versucht, ffserver anstelle von SSH zu verwenden, aber ich habe kein Glück.
Ist es möglich, Audio auf diese Weise zu streamen ?
Es gibt zwei Lösungen, die ich mir für dieses Szenario vorstellen kann:
Dies ist wahrscheinlich die einfachste Methode. Warten Sie, bis der Stream die Aufzeichnung beendet hat, und kopieren Sie ihn dann an einen vorbestimmten Ort im Netzwerk. Dieses Skript sollte die Rechnung erfüllen:
#!/bin/bash
#
ffmpeg -f avfoundation -i ":1" -t 10 audiocapture.mp3
scp audiocapture.mp3 user@host:/foo/bar/audiocapture.mp3
exit 0
Das Skript führt keinerlei Fehlerprüfung durch, nimmt jedoch vom Mikrofon auf und kopiert es nach Abschluss über SCP (sichere Kopie) auf einen Remote-Computer. Damit dies funktioniert, müssen Sie SSH-Schlüssel einrichten, um eine nicht interaktive Anmeldung zu ermöglichen .
Die andere Methode besteht darin, das Audio über TCP über eine Punkt-zu-Punkt-Verbindung zu übertragen. Mit der gleichen Eingabe aus der vorherigen Antwort ändern wir einfach die Ausgabe in einen Netzwerkstream:
$ ffmpeg -f avfoundation -i ":1" -t 10 -f mpegts "tcp://remote_host_or_IP_:port"
Wo....
-f
ist das Transportformat; in diesem Fall MPEGTs (MPEG Transport Stream)tcp://remote_host_or_IP_:port
ist der URI-Wert des Hostnamens/der IP-Adresse und der Portnummer des entfernten Computers, auf dem er lauschen wird.Die Verwendung ffplay
des Remote-Computers kann so eingestellt werden, dass er den Stream empfängt (ich habe Windows 10 für diesen Teil verwendet, funktioniert aber unter macOS/Windows/BSD/Linux).
Geben Sie den Befehl aus
ffplay -i tcp://local_host_or_IP_addr:port?listen -hide_banner
Wo....
-i
definiert den Eingabestromlocal_host_or_IP_addr:port
ist die IP-Adresse oder der Hostname und der TCP-Port des lauschenden Computers (nicht des streamenden Computers).?listen
ist erforderlich, um es in den "Zuhörmodus" zu versetzen, da es sonst zu einer Zeitüberschreitung kommt, wenn der Stream nicht vorhanden ist.Unten sehen Sie ein Beispiel in Windows 10, das den Stream vom Mikrofon eines macOS-Hosts empfängt. Die IP-Adresse des Windows 10-Computers ist 10.0.0.123 und ich sende auf Port 1234.
C:\Users\allan\Desktop\ffmpeg>ffplay -i tcp://10.0.0.123:1234?listen -hide_banner
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Sobald es beginnt, die Sendung zu empfangen, ändern sich die obigen Werte und ein Player-"Visualisierungs"-Fenster öffnet sich.
Input #0, mpegts, from 'tcp://10.0.0.123:1234?listen':B f=0/0
384 kb/s nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Program 1 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Metadata: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Service01 nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 0B f=0/0
FFmpeg nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 sq= 0B f=0/0
Stream #0:0[0x100]: Audio: mp2 ([3][0][0][0] / 0x0003), 44100 Hz, stereo, fltp, 384 kb/s
11.35 M-A: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Es wird weiterhin "zuhören", bis der Prozess beendet wird.
kein Hang