Come riprodurre l'audio utilizzando FFMPEG?

3

Basandosi su @ risposta di Allan , Sto provando a reindirizzare il output ffmpeg a un server.

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

Ma ricevo il seguente messaggio di errore:

"At least one output file must be specified"

Ho anche provato a utilizzare ffserver invece di SSH, ma non sto avendo fortuna.

È possibile emettere stream in questo modo?

    
posta user290246 27.05.2018 - 17:34
fonte

1 risposta

1

Ci sono due soluzioni che posso visualizzare per questo scenario:

  • Salvataggio del file su un computer remoto
  • Avere un flusso live trasmesso in modo che un computer remoto possa ricevere l'audio

Salvataggio del file

Questo è probabilmente il metodo più semplice. Consentire allo stream di completare la registrazione, quindi copiarlo in una posizione predeterminata sulla rete. Questo script dovrebbe adattarsi alla fattura:

#!/bin/bash
#
ffmpeg -f avfoundation -i ":1" -t 10 audiocapture.mp3
scp audiocapture.mp3 user@host:/foo/bar/audiocapture.mp3

exit 0

Lo script non esegue alcun tipo di controllo degli errori di alcun tipo ma, registrerà dal microfono, al termine lo copierà tramite SCP (copia protetta) su un computer remoto. Per fare in modo che funzioni, è necessario impostare chiavi SSH per facilitare un accesso non interattivo .

Streaming in tempo reale

L'altro metodo consiste nel trasmettere l'audio via TCP tramite una connessione point-to-point. Usando lo stesso input della risposta precedente, cambiamo semplicemente l'output in un flusso di rete:

$ ffmpeg -f avfoundation -i ":1" -t 10 -f mpegts "tcp://remote_host_or_IP_:port"

Dove ....

  • -f è il formato di trasporto; in questo caso mpegts (MPEG Transport Stream)
  • tcp://remote_host_or_IP_:port è il valore URI del nome host / indirizzo IP del computer remoto e il numero di porta su cui sarà in ascolto.

Imposta il computer remoto su "ascolta"

Usando ffplay il computer remoto può essere impostato per ricevere il flusso (ho usato Windows 10 per questa parte, ma funzionerà in macOS / Windows / BSD / Linux)

Emetti il comando

ffplay -i tcp://local_host_or_IP_addr:port?listen -hide_banner

Dove ....

  • -i definisce il flusso di input
  • local_host_or_IP_addr:port è l'indirizzo IP o il nome host e la porta TCP del computer in ascolto (non il computer che esegue lo streaming).
  • ?listen è richiesto per metterlo in "modalità di ascolto" altrimenti scadrà se lo stream non è presente.

Di seguito è riportato un esempio di Windows 10 che riceve lo streaming dal microfono di un host macOS. L'indirizzo IP del computer Windows 10 è 10.0.0.123 e sto trasmettendo sulla porta 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 volta che inizia a ricevere la trasmissione, i valori sopra indicati cambieranno e si aprirà una finestra di "visualizzazione" del giocatore.

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

Continuerà a "ascoltare" fino a quando il processo non sarà terminato.

    
risposta data 28.05.2018 - 08:41
fonte

Leggi altre domande sui tag