chuyển hướng âm thanh (micro) qua ssh, làm thế nào để điện thoại qua ssh?


47

Làm cách nào tôi có thể chuyển hướng micrô của một máy tính để nghe trên máy tính khác qua ssh? Thiết bị nào phù hợp hoặc dòng lệnh nào đúng?

Vài năm trước, thật dễ dàng và thú vị khi chuyển hướng âm thanh từ micrô từ xa sang máy tính cục bộ hoặc ngược lại - đó là một chiếc điện thoại dễ dàng. Có một số hướng dẫn cho nó, nhưng không ai trong số chúng dường như hoạt động trên các máy tính / bản phân phối linux mới hơn. Tôi thậm chí không có /dev/audiomáy tính của mình (Fedora 17).

Tôi nghĩ rằng nó có thể có liên quan đến âm thanh xung. Hoặc tôi không cần âm thanh xung cho điện thoại đơn giản này? Đó là thiết bị phù hợp?

Tôi có thể thấy tất cả các thiết bị âm thanh của mình khi tôi khởi động alsamixervà nhấn phím F6. Nhưng tôi không biết đó là những thiết bị trong /devcây của tôi .

Câu trả lời:


53

OK, tôi vừa tìm thấy nó, và nó vẫn hoạt động! Thật buồn cười. Bạn không cần bất kỳ ứng dụng ưa thích, tin nhắn tức thời hoặc tương tự. Với lệnh này, bạn gửi âm thanh của mình đến máy chủ từ xa.

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

Hoặc nếu bạn thích ffmpeg hơn

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

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


Nếu bạn muốn một chiếc điện thoại thực sự:

Lệnh trên chỉ dành cho một hướng. Đối với hướng khác, bạn phải bắt đầu một phiên ssh khác. Vì vậy, để nhận được những gì người dùng khác nói với bạn, hãy sử dụng

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

Hoặc nếu bạn thích ffmpeg hơn

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

nơi hw:3là alsadevice bạn muốn ghi lại (thấy nó với arecord -l, bạn cũng có thể sử dụng một tên thiết bị, tìm thấy điều này với arecord -L, trong nhiều trường hợp bạn chỉ có thể sử dụng thiết bị được liệt kê với lệnh sau đây: arecord -L | grep sysdefault).

Cập nhật

Năm 2018 trên các hệ thống Fedora Linux của tôi ffmpegkhông có hỗ trợ alsa đi kèm (dường như giống với các hệ thống RaspberryPi với Raspbian). Nhưng có một giải pháp đơn giản mà không cần biên dịch lại. Chỉ cần chuyển đầu ra của arecord (alsarecorder) sang ffmpeg:

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

Bạn nhận được thiết bị đầu vào plughw:2bằng cách tìm thiết bị của mình trong đầu ra của lệnh sau:

arecord -l

Trong trường hợp của tôi, tôi thấy card0card2(webcam của tôi có micrô). Vì vậy, tôi đã viết plughw:2cho card2.

Cập nhật 2 (không có mplayer)

Nếu bạn không có hoặc thích mplayernhưng ffplay(đó là một phần của ffmpeg), bạn có thể sử dụng:

  • âm thanh sóng không nén (băng thông cao, sử dụng cpu rất thấp ở phía ghi âm)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2" | ffplay -nodisp -
    
  • được nén bằng flac (băng thông thấp, sử dụng cpu thấp ở phía ghi âm)

    ssh <user>@<remotehost> "arecord -f cd -D plughw:2 | flac - -o -" | ffplay -nodisp -
    
  • được nén với ogg (băng thông rất thấp, sử dụng cpu cao ở phía ghi âm)

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

1
Có một số lý do bạn đang làm cat - | mplayer -thay vì chỉ mplayer -?
Chris Xuống

Lý do là: Tôi vừa sao chép lệnh từ nguồn được trích dẫn. Có thể là dư thừa. Tôi đã xóa nó, dường như vẫn còn hoạt động. Có lẽ có một trường hợp cạnh cần thiết và tác giả biết về nó mà không nói với nó trong bài viết của mình?
erik

3

Câu trả lời của Erik hoạt động tốt, nhưng sử dụng nó như thế nào, sử dụng flachoặc oggenc, có độ trễ đáng kể.
Một giải pháp là thêm -cache 256vào mplayerlệnh, vì vậy nó sẽ trông như sau:

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

Một điều khác cần đề cập là hiện nay khá nhiều phân phối hiện đại sử dụng PulseAudio, điều khiển thiết bị phần cứng, do đó việc sử dụng plughw:2sẽ thất bại nếu PulseAudio đang chạy.
Nói chung, defaultnên hoạt động tốt và sử dụng PulseAudio, nơi bạn có thể sử dụng pavucontrolhoặc tương tự để chọn nguồn đầu vào mong muốn của mình bằng PulseAudio.

Điều đó sẽ làm cho lệnh như sau:

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

NHƯNG: Điều này giới thiệu một độ trễ. Trong trường hợp của tôi, đó là khoảng tám giây. Đó là khủng khiếp.


Giải pháp đơn giản hơn nhiều so với bất kỳ lệnh nào khác:

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

Đó là nó. Đây là sử dụng hầu như bất kỳ CPU (0,1% theo htop). Đó là sử dụng ~ 60KB / giây băng thông cho tôi.

Nếu bạn muốn âm thanh nổi: ssh <user>@<host> "arecord -f cd" | aplay
Chỉ hữu ích nếu bạn có micrô âm thanh nổi, hãy tăng băng thông lên ~ 150KB / giây cho tôi. (Vì nó cũng tăng tốc độ lấy mẫu lên 44100Hz).

Thông tin thêm về tốc độ lấy mẫu ( -r) và tốc độ bit (bị ảnh hưởng bởi -f) có thể được tìm thấy ở đây .
Về cơ bản: Bạn càng đi thấp, chất lượng càng tệ nhưng băng thông cần thiết càng thấp.

Giải pháp này hoàn toàn tương thích với PulseAudio, bạn có thể điều khiển thiết bị đầu ra, âm lượng và hơn thế nữa bằng cách sử dụng pactlhoặc pavucontrolứng dụng GUI:

pavucontrol

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.