6 votes

Comment diffuser de l'audio en utilisant FFMPEG?

S'appuyant sur la réponse de @Allan, j'essaie de rediriger la sortie de ffmpeg vers un serveur.

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

Mais je reçois le message d'erreur suivant:

"Au moins un fichier de sortie doit être spécifié"

J'ai également essayé d'utiliser ffserver au lieu de SSH mais je n'ai pas de chance.

Est-il possible de diffuser l'audio de cette manière?

1 votes

Apparemment c'est le cas, voir duckduckgo.com/?q=streaming+ffmpeg+over+ssh

7voto

Douglas Points 10417

Il existe deux solutions que je peux envisager pour ce scénario :

  • Enregistrer le fichier sur un ordinateur distant
  • Avoir une diffusion en direct pour qu'un ordinateur distant puisse recevoir l'audio

Enregistrer le fichier

C'est probablement la méthode la plus simple. Permettre à l'enregistrement de se terminer puis le copier dans un emplacement prédéterminé sur le réseau. Ce script devrait faire l'affaire :

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

exit 0

Le script ne fait aucune vérification d'erreur de quelque nature que ce soit, mais enregistrera à partir du microphone, puis, une fois terminé, le copiera via SCP (copie sécurisée) vers un ordinateur distant. Pour que cela fonctionne, vous devez configurer les clés SSH pour faciliter une connexion non interactive.

Diffuser en temps réel

L'autre méthode consiste à diffuser l'audio via TCP via une connexion point à point. En utilisant le même input que dans la réponse précédente, nous changeons simplement la sortie vers un flux réseau :

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

Où....

  • -f est le format de transport; dans ce cas un mpegts (MPEG Transport Stream)
  • tcp://remote_host_or_IP_:port est la valeur URI de l'adresse IP ou du nom d'hôte de l'ordinateur distant et du numéro de port sur lequel il écoutera.

Configurer l'ordinateur distant en mode "écoute"

En utilisant ffplay, l'ordinateur distant peut être configuré pour recevoir le flux (j'ai utilisé Windows 10 pour cette partie, mais cela fonctionnera également sur macOS/Windows/BSD/Linux)

Émettre la commande

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

Où....

  • -i définit le flux d'entrée
  • local_host_or_IP_addr:port est l'adresse IP ou le nom d'hôte et le port TCP de l'ordinateur qui écoute (pas l'ordinateur qui diffuse).
  • ?listen est requis pour le mettre en mode "écoute" sinon le temps d'attente sera dépassé s'il n'y a pas de flux.

Ci-dessous se trouve un exemple réalisé sous Windows 10 recevant le flux du microphone d'un hôte macOS. L'adresse IP de la machine Windows 10 est 10.0.0.123 et je diffuse sur le 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

Dès le début de la réception de la diffusion, les valeurs ci-dessus changeront et une fenêtre de "visualisation" du lecteur s'ouvrira.

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

Il continuera à "écouter" jusqu'à ce que le processus soit arrêté.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X