redirect suara (mikrofon) via ssh, bagaimana cara menelepon via ssh?

47

Bagaimana saya bisa mengarahkan mikrofon dari satu komputer untuk mendengarkannya di komputer lain melalui ssh? Perangkat mana yang tepat atau mana yang merupakan baris perintah yang benar?

Beberapa tahun yang lalu itu mudah dan menyenangkan untuk mengarahkan ulang suara dari mikrofon jarak jauh ke komputer lokal atau sebaliknya - itu adalah telepon yang mudah. Ada beberapa instruksi untuk itu, tetapi sepertinya tidak ada yang bekerja pada distro komputer / linux yang lebih baru. Saya bahkan tidak punya /dev/audiodi komputer saya (Fedora 17).

Saya pikir itu mungkin ada hubungannya dengan pulsa audio. Atau saya tidak perlu pulsa audio untuk telepon sederhana ini? Perangkat mana yang tepat?

Saya dapat melihat semua perangkat suara saya ketika saya mulai alsamixerdan menekan tombol F6. Tapi saya tidak tahu perangkat apa yang ada di /devpohon saya .

erik
sumber

Jawaban:

53

OK, saya baru saja menemukannya, dan masih berfungsi! Sangat lucu. Anda tidak memerlukan aplikasi mewah, pengirim pesan instan atau sejenisnya. Dengan perintah ini Anda mengirim audio ke host jarak jauh.

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

Atau jika Anda suka ffmpeg lebih baik

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

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


Jika Anda menginginkan telepon nyata:

Perintah di atas hanya untuk satu arah. Untuk arah lain Anda harus memulai sesi ssh lainnya. Jadi, untuk menerima apa yang dikatakan pengguna lain kepada Anda, gunakan

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

Atau jika Anda suka ffmpeg lebih baik

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

di mana hw:3alsadevice yang ingin Anda rekam (temukan dengan arecord -l; Anda juga dapat menggunakan nama perangkat, temukan ini dengan arecord -L; dalam banyak kasus Anda bisa menggunakan perangkat yang terdaftar dengan perintah berikut:) arecord -L | grep sysdefault.

Memperbarui

Pada tahun 2018 pada sistem Fedora Linux saya ffmpegtidak termasuk dukungan alsa (tampaknya sama pada sistem RaspberryPi dengan Raspbian). Tetapi ada solusi sederhana tanpa kompilasi ulang. Cukup pipa output dari arecord (alsarecorder) ke ffmpeg:

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

Anda mendapatkan perangkat input plughw:2dengan menemukan perangkat Anda di output dari perintah berikut:

arecord -l

Dalam kasus saya, saya melihat card0dan card2(webcam saya yang memiliki mikrofon). Jadi saya menulis plughw:2untuk card2.

Perbarui 2 (tanpa mplayer)

Jika Anda tidak memiliki atau suka mplayertetapi ffplay(yang merupakan bagian dari ffmpeg) Anda dapat menggunakan:

  • audio gelombang terkompresi (bandwidth tinggi, penggunaan CPU sangat rendah di sisi perekaman)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • dikompresi dengan flac (bandwidth rendah, penggunaan cpu rendah di sisi perekaman)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • dikompresi dengan ogg (bandwidth sangat rendah, penggunaan cpu tinggi di sisi perekaman)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | oggenc -" | ffplay -nodisp -
    
erik
sumber
1
Apakah ada beberapa alasan yang Anda lakukan, cat - | mplayer -bukan hanya mplayer -?
Chris Down
Alasannya adalah: Saya baru saja menyalin perintah dari sumber yang dikutip. Mungkin berlebihan. Saya sudah menghapusnya, sepertinya masih berfungsi. Mungkin ada kasus tepi di mana itu diperlukan dan penulis tahu tentang hal itu tanpa memberi tahu di posnya?
erik
3

Jawaban Erik bekerja dengan baik, tetapi bagaimana menggunakannya, menggunakan flacatau oggenc, ada jeda yang signifikan.
Sebuah solusi adalah dengan menambahkan -cache 256ke mplayerperintah, sehingga akan terlihat sebagai berikut:

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

Hal lain yang perlu disebutkan adalah bahwa saat ini hampir setiap distribusi modern menggunakan PulseAudio, yang mengambil kendali atas perangkat keras, oleh karena itu penggunaan plughw:2akan gagal jika PulseAudio sedang berjalan.
Secara umum, defaultharus berfungsi dengan baik dan menggunakan PulseAudio, di mana Anda dapat menggunakan pavucontrolatau serupa untuk memilih sumber input yang Anda inginkan menggunakan PulseAudio.

Itu akan membuat perintah sebagai berikut:

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

TAPI: Ini menimbulkan kelambatan. Dalam kasus saya, sekitar delapan detik. Itu buruk.


Solusinya jauh lebih sederhana daripada perintah lain:

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

Itu dia. Ini menggunakan hampir semua CPU (0,1% menurut htop). Ini menggunakan ~ 60KB / s bandwidth untuk saya.

Jika Anda ingin suara stereo: ssh <user>@<host> "arecord -f cd" | aplay
Hanya berguna jika Anda memiliki mikrofon stereo, meningkatkan bandwidth hingga ~ 150KB / s untuk saya. (Karena itu juga meningkatkan laju sampling ke 44100Hz).

Informasi lebih lanjut tentang laju sampling ( -r) dan laju bit (dipengaruhi oleh -f) dapat ditemukan di sini .
Pada dasarnya: Semakin rendah Anda pergi, semakin buruk kualitas tetapi semakin rendah bandwidth yang dibutuhkan.

Solusi ini sepenuhnya kompatibel dengan PulseAudio, Anda dapat mengontrol perangkat output, volume, dan lainnya menggunakan pactlatau pavucontrolaplikasi GUI:

pavucontrol

konfeti
sumber