Στο σημερινό άρθρο θα δούμε πως μπορούμε να μεταφέρουμε audio μέσω μιας σύνδεσης ssh με απομακρυσμένο server.

Παρόλο που η χρήση της σύνδεσης μέσω ssh χρησιμοποιείται συνήθως για απομακρυσμένη διαχείριση κάποιου υπολογιστή η διακομιστή, υπάρχουν όμως περιπτώσεις που το χρησιμοποιούν κάποιοι για X fordwarding (απομακρυσμένη σύνδεση με επιφάνεια εργασίας) ενώ ακόμα πιο λιγότεροι είναι αυτοί που το κάνουν σωστά το X forwarding:

ssh -Y user@hostname

Σε αυτό το άρθρο δεν θα ασχοληθούμε με αυτό, αλλά με κάτι που ακόμα πιο λίγοι άνθρωποι κάνουν… να μεταφέρουν audio μέσα από μία κρυπτογραφημένη σύνδεση :P

Για τις δοκιμές σας, μπορείτε να χρησιμοποιήσετε ενα VirtualBox με εγκατεστημένο Ubuntu Server 14.04

SSH audio forwarding: Βήμα 1 – Encoding

Σε πρώτη φάση θα κάνουμε encoding ένα *.wav αρχείο ήχου χρησιμοποιώντας το ogg. Γιατί να το κάνουμε αυτό; Γιατί το ogg αρχείο είναι μικρότερο σε μεγεθος και θα μεταφερθεί πιο γρήγορα, μέσω internet, από ότι ένα wav αρχείο.

Advertisements

Αφού συνδεθείτε μέσω ssh στον server σας (ή στο VM σας) κατεβάστε ένα *.wav αρχείο ήχου από το Internet (έχει κάτι ωραία ο Duke Nukem :P) πχ:

wget http://www.wavsource.com/snds_2015-02-22_2812738926347607/video_games/duke/clean-up.wav

Για να το μετατρέψουμε σε ogg φορμά, θα πρέπει πρώτα να εγκαταστήσουμε το απαραίτητο εργαλείο oggenc το οποίο παρέχεται από το vorbis-tools. Σε Ubuntu/Debian/Mint το κάνετε εγκατάσταση ως εξής:

sudo apt install vorbis-tools

Αφού γίνει η εγκατάσταση, κάντε το αρχείο που κατεβάσατε, encode χρησιμοποιώντας τον ogg encoder:

oggenc file.wav

Το output θα είναι κάπως ετσι:

The file sound will be converted into *.ogg format and it will also be smaller in size.

Opening with wav module: WAV file reader
Encoding "clean-up.wav" to "clean-up.ogg" at quality 3.00
[ 66.1%] [ 0m00s remaining] |

Done encoding file "clean-up.ogg"

File length: 0m 02.0s
Elapsed time: 0m 00.0s
Rate: 51.6728
Average bitrate: 24.8 kb/s

SSH audio forwarding: Βήμα 2 – Decoding

Σε δεύτερη φάση, θα πρέπει ο server από τον οποίο θέλετε να στριμάρετε το αρχείο, να μπορεί να αναπαράγει το αρχείο. Δηλαδή αν το μηχάνημα δεν έχει καν audio device, μην το δοκιμάσει κανείς και μετά γκρινιάζει γιατί δεν δουλεύει. Επίσης, αν το δοκιμάσετε σε VM, τότε δώστε virtual audio device «AC97» (με αυτήν το τέσταρα και δουλεύει).

Στην συνέχεια πρέπει να ρυθμίσουμε με έναν κειμενογράφο ώστε τα vorbis-tools να χρησιμοποιούν ALSA από προεπιλογή (αντί του pulse audio).

vim /etc/libao.conf
default_driver = alsa

Αφού αποθηκεύσετε, δοκιμάστε να παίξετε το αρχείο:

ogg123 clean-up.ogg

Προφανώς δεν θα ακούσετε κάτι, αλλά θα δείτε το εξής output:

Playing: -
Ogg Vorbis stream: 1 channel, 8000 Hz

SSH audio forwarding: Βήμα 3 – Streaming

Αν φτάσατε μέχρι εδώ σημαίνει ότι ο παραπάνω server μπορεί να παίξει το αρχείο ήχου (clean-up.ogg στην περίπτωση μου) χρησιμοποιώντας ALSA χωρίς κανένα πρόβλημα. Τώρα όσο για να το ακούσουμε και εμείς από το δικό μας local μηχάνημα, δίνουμε τα εξής:

ssh user@hostname 'cat /path/to/file.ogg' | ogg123 -

Σημείωση: πετάξτε το σε κάνα MOTD, ή ηχογραφείστε τον εαυτό σας και να ακούγεται μόλις κάνει ο άλλος SSH Login :P