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

48

Comment puis-je rediriger le microphone d'un ordinateur pour l'écouter sur un autre ordinateur via ssh? Quel est le bon périphérique 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 inversement - c'était un téléphone facile. Il y a quelques instructions pour cela, mais aucune d’entre elles ne semble fonctionner sur les nouveaux ordinateurs / les distributions Linux. Je n'ai même pas un /dev/audiosur mon ordinateur (Fedora 17).

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

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

erik
la source

Réponses:

55

OK, je viens de le trouver, et ça marche toujours! Très drôle. Vous n'avez pas besoin d'applications sophistiquées, de messagerie instantanée ou autres. 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 aimez mieux 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 était seulement pour une 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 aimez mieux ffmpeg

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

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

Mise à jour

En 2018, mes systèmes Fedora Linux ffmpegne prennent pas en charge le support alsa (il semble en être de même sur les systèmes RaspberryPi avec Raspbian). Mais il existe une solution simple sans recompiler. Il suffit de diriger la sortie de arecord (alsarecorder) vers 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:2en trouvant votre périphérique dans la sortie de la commande suivante:

arecord -l

Dans mon cas, je vois card0et card2(ma webcam qui a un microphone). Alors j'ai écrit plughw:2pour card2.

Mise à jour 2 (sans mplayer)

Si vous n'avez pas ou aimez mplayermais ffplay(ce qui en fait partie ffmpeg) vous pouvez utiliser:

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

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

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

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
erik
la source
1
Y a-t-il une raison que vous faites cat - | mplayer -au lieu de juste mplayer -?
Chris Down
La raison est la suivante: je viens de copier la commande de la source citée. Peut-être redondant. Je l'ai supprimé, semble encore fonctionner. Peut-être y a-t-il un cas critique où l'auteur aurait eu besoin de le savoir sans le dire dans son message?
erik
3

La réponse d'Erik fonctionne bien, mais si vous l'utilisez telle quelle, utilisez flacou oggenc, il y a un décalage important.
Une solution consiste à ajouter -cache 256à la mplayercommande afin que cela ressemble à 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. Par conséquent, l’utilisation plughw:2échouera si PulseAudio est en cours d’exécution.
En règle générale, defaultdevrait fonctionner correctement et utiliser PulseAudio, où vous pouvez utiliser pavucontrolou similaire pour sélectionner la source d'entrée souhaitée à l'aide de PulseAudio.

Cela ferait la commande comme suit:

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

MAIS: Ceci 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. Ceci utilise à peine n'importe quel processeur (0,1% selon htop). Il utilise ~ 60Ko / 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 à environ 150 Ko / s pour moi. (Puisqu'il augmente également le taux d'échantillonnage à 44100Hz).

Plus d'informations sur le taux d'échantillonnage ( -r) et le débit binaire (affecté par -f) sont disponibles ici .
Fondamentalement: plus vous baissez, 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, etc. à l'aide de pactlou de l' pavucontrolapplication graphique:

pavucontrol

confettis
la source