¿Cómo transmitir audio usando FFMPEG?

3

Basándose en @ La respuesta de Allan , Estoy tratando de redireccionar la salida ffmpeg a un servidor.

$ ffmpeg -f avfoundation -i ":1" -t 10 - | ssh user@host .... -

Pero me aparece el siguiente mensaje de error:

  

"Se debe especificar al menos un archivo de salida"

También he intentado usar ffserver en lugar de SSH, pero no estoy teniendo suerte.

¿Es posible transmitir el audio de esta manera?

    
pregunta user290246 27.05.2018 - 17:34

1 respuesta

1

Hay dos soluciones que puedo visualizar para este escenario:

  • Guardar el archivo en una computadora remota
  • Transmisión de transmisión en vivo para que una computadora remota pueda recibir el audio

Guardando el archivo

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 de la red. Este script debe 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 realiza ninguna comprobación de errores de ningún tipo, pero grabará desde el micrófono, luego, cuando termine, lo copiará a través de SCP (copia segura) a una computadora remota. Para que esto funcione, debe configurar claves SSH para facilitar un inicio de sesión no interactivo .

Transmisión en tiempo real

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"

Donde ....

  • -f es el formato de transporte; en este caso mpegts (flujo de transporte MPEG)
  • 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 que escuchará.

Configura la computadora remota para que "escuche"

Al usar ffplay , la computadora remota puede configurarse para recibir la transmisión (usé 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

Donde ....

  • -i define el flujo de entrada
  • local_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).
  • Se requiere ?listen para ponerlo en "modo de escucha"; de lo contrario, se agotará el tiempo 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 reproductor.

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 finalice el proceso.

    
respondido por el Allan 28.05.2018 - 08:41

Lea otras preguntas en las etiquetas