Sobre la base de la respuesta de @ Allan , estoy tratando de redirigir la salida de ffmpeg a un servidor.
$ ffmpeg -f avfoundation -i ":1" -t 10 - | ssh user@host .... -
Pero me sale el siguiente mensaje de error:
"Se debe especificar al menos un archivo de salida"
También intenté usar ffserver en lugar de SSH, pero no tuve suerte.
¿ Es posible transmitir audio de esta manera?
Hay dos soluciones que puedo visualizar para este escenario:
Este es probablemente el método más fácil. Permita que la transmisión termine de grabarse y luego cópiela en una ubicación predeterminada en la red. Este script debería ajustarse a la factura:
#!/bin/bash
#
ffmpeg -f avfoundation -i ":1" -t 10 audiocapture.mp3
scp audiocapture.mp3 user@host:/foo/bar/audiocapture.mp3
exit 0
El script no verifica ningún tipo de error, pero grabará desde el micrófono y, cuando termine, lo copiará a través de SCP (copia segura) en una computadora remota. Para que esto funcione, debe configurar claves SSH para facilitar un inicio de sesión no interactivo .
El otro método es transmitir el audio a través de TCP a través de una conexión punto a punto. Usando la misma entrada de la respuesta anterior, simplemente cambiamos la salida a un flujo de red:
$ ffmpeg -f avfoundation -i ":1" -t 10 -f mpegts "tcp://remote_host_or_IP_:port"
Dónde....
-f
es el formato de transporte; en este caso mpegts (MPEG Transport Stream)tcp://remote_host_or_IP_:port
es el valor URI del nombre de host/dirección IP de la computadora remota y el número de puerto en el que estará escuchando.Se puede configurar el uso ffplay
de la computadora remota para recibir la transmisión (utilicé Windows 10 para esta parte, pero funcionará en macOS/Windows/BSD/Linux)
Emitir el comando
ffplay -i tcp://local_host_or_IP_addr:port?listen -hide_banner
Dónde....
-i
define el flujo de entradalocal_host_or_IP_addr:port
es la dirección IP o el nombre de host y el puerto TCP de la computadora que está escuchando (no la computadora que está transmitiendo).?listen
es necesario ponerlo en "modo de escucha"; de lo contrario, se agotará el tiempo de espera si la transmisión no está allí.A continuación se muestra un ejemplo realizado en Windows 10 que recibe la transmisión desde el micrófono de un host macOS. La dirección IP de la máquina con Windows 10 es 10.0.0.123 y estoy transmitiendo en el puerto 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
Una vez que comience a recibir la transmisión, los valores anteriores cambiarán y se abrirá una ventana de "visualización" del jugador.
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
Continuará "escuchando" hasta que se elimine el proceso.
sin ladera