web-dev-qa-db-fra.com

rediriger le son (microphone) via ssh, comment téléphoner via ssh?

Comment puis-je rediriger le microphone d'un ordinateur pour l'écouter sur un autre ordinateur via ssh? Quel est le bon appareil ou quelle est la bonne ligne de commande?

Il y a quelques années, il était facile et amusant de rediriger le son d'un microphone distant vers un ordinateur local ou vice versa - c'était un téléphone facile. Il y a certainsinstructions pour cela, mais aucun d'entre eux ne semble fonctionner sur les nouveaux ordinateurs/distributions Linux. Je n'ai même pas de /dev/audio sur mon ordinateur (Fedora 17).

Je pense que cela peut avoir quelque chose à voir avec le son Pulse. Ou n'ai-je pas besoin de l'audio Pulse pour ce simple téléphone? Quel est le bon appareil?

Je peux voir tous mes périphériques audio lorsque je démarre alsamixer et appuie sur la touche F6. Mais je ne sais pas quels sont les appareils de mon /dev arbre.

52
erik

OK, je viens de le trouver, et ça marche toujours! Très drôle. Vous n'avez pas besoin d'applications sophistiquées, de messageries instantanées ou similaires. Avec cette commande, vous envoyez votre audio à l'hôte distant.

arecord -f cd -t raw | oggenc - -r | ssh <user>@<remotehost> mplayer -

Ou si vous préférez ffmpeg

ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | ssh <user>@<remotehost> mplayer - -idle -demuxer ogg

Source: http://shmerl.blogspot.de/2011/06/some-fun-with-audio-forwarding.html


Si vous voulez un vrai téléphone:

La commande ci-dessus n'était que pour une seule direction. Pour l'autre direction, vous devez démarrer une autre session ssh. Donc, pour recevoir ce que l'autre utilisateur vous dit , utilisez

ssh <user>@<remotehost> 'arecord -f cd -t raw | oggenc - -r' | mplayer -

Ou si vous préférez ffmpeg

ssh <user>@<remotehost> ffmpeg -f alsa -ac 1 -i hw:3 -f ogg - \
    | mplayer - -idle -demuxer ogg

hw:3 est le même appareil que vous souhaitez enregistrer (trouvez-le avec arecord -l; vous pouvez également utiliser un nom d'appareil, trouvez-le avec arecord -L; dans de nombreux cas, vous pouvez simplement utiliser le périphérique répertorié avec la commande suivante: arecord -L | grep sysdefault).

Mise à jour

En 2018, sur mes systèmes Fedora Linux, ffmpeg ne comprend pas de support alsa (il semble qu'il en soit de même sur les systèmes RaspberryPi avec Raspbian). Mais il existe une solution simple sans recompilation. Il suffit de diriger la sortie de un enregistrement (alsarecorder) à ffmpeg:

ssh <user>@<remotehost> 'arecord -f cd -D plughw:2 | ffmpeg -ac 1 -i - -f ogg -' \
    | mplayer - -idle -demuxer ogg

Vous obtenez le périphérique d'entrée plughw:2 en trouvant votre appareil dans la sortie de la commande suivante:

arecord -l

Dans mon cas, je vois card0 et card2 (ma webcam qui a un microphone). J'ai donc écrit plughw:2 pour card2.

Mise à jour 2 (sans mplayer)

Si vous n'avez pas ou aimez mplayer mais ffplay (qui fait partie de ffmpeg), vous pouvez utiliser:

  • audio wave non compressé (bande passante élevée, utilisation très faible du processeur côté enregistrement)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • compressé avec flac (faible bande passante, faible utilisation du processeur côté enregistrement)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • compressé avec ogg (bande passante très faible, utilisation élevée du processeur côté enregistrement)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
59
erik

La réponse d'Erik fonctionne bien, mais en l'utilisant telle quelle, en utilisant flac ou oggenc, il y a un retard important.
Une solution consiste à ajouter -cache 256 à la commande mplayer, donc cela ressemblerait à ceci:

ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | mplayer -cache 256 -

Une autre chose à mentionner est que de nos jours, presque toutes les distributions modernes utilisent PulseAudio, qui prend le contrôle du périphérique matériel, utilisant donc plughw:2 échouera si PulseAudio est en cours d'exécution.
Généralement, default devrait fonctionner correctement et utiliser PulseAudio, où vous pouvez utiliser pavucontrol ou similaire pour sélectionner la source d'entrée souhaitée à l'aide de PulseAudio.

Cela rendrait la commande comme suit:

ssh <user>@<remotehost> "arecord -f cd | oggenc -" | mplayer -cache 256 -

MAIS: Cela introduit un décalage. Dans mon cas, c'est environ huit secondes. C'est terrible.


La solution est beaucoup plus simple que toute autre commande:

ssh <user>@<Host> "arecord -f S16_LE -r 36000" | aplay

C'est ça. Cela utilise à peine n'importe quel CPU (0,1% selon htop). Il utilise ~ 60 Ko/s de bande passante pour moi.

Si vous voulez un son stéréo: ssh <user>@<Host> "arecord -f cd" | aplay
Utile uniquement si vous avez un microphone stéréo, augmente la bande passante à ~ 150 Ko/s pour moi. (Puisqu'il augmente également la fréquence d'échantillonnage à 44100Hz).

Plus d'informations sur le taux d'échantillonnage (-r) et le débit binaire (affecté par -f) peut être trouvé ici .
Fondamentalement: plus vous descendez, plus la qualité est mauvaise, mais plus la bande passante nécessaire est faible.

Cette solution est entièrement compatible avec PulseAudio, vous pouvez contrôler le périphérique de sortie, le volume et bien plus en utilisant pactl ou pavucontrol GUI application:

pavucontrol

3
confetti