私が理解したところによると、これは「mic_rec」という名前のパイプにwav形式で300秒間モノを録音します。
rec arecord -D hw:4,0 -d 300 -f cd -t wav -c 1 mic_rec
これにより、名前付きパイプ "mic_rec"で見つかったすべてのエントリがtcpを介してポート8111に送信されます。
cat mic_rec |netcat -l -p 8111
UDPプロトコル
cat mic_rec |netcat -u -l -p 8111
TCPを使用した受信(有効):
netcat 192.168.2.29 8111 |vlc -
UDPを使用して受信(非):
netcat -u 192.168.2.29 8111 |vlc -
この方法(TCPを使用)は機能しますが、約2秒の遅延があります。だから私が最初に考えたのは、-uパラメータを使用してUDPに切り替えることでした。しかし、これはうまくいかないようです。受信側では何も聞こえません。私が逃したものは何ですか?
Pulseaudioにはこれを行うより簡単な方法があるようです。しかし、私が知っている限り、私が使用しているデバイス(NanoPi Neo 1.4)はこの機能をサポートしていません。
答え1
UDPを必ず使うべきではないと思います。それ自体を通して遅延の問題を解決してください。この答えは、UDPの試みがまったく機能しない理由を説明しようとします。
UDPは接続されていないプロトコルであり、ハンドシェイクはありません。これはnetcat
、「リスナー」(netcat -l
)がデータをどこに送信するのかわからないことを意味します。~までnetcat
それはあなたの(または何でも)「接続」から何かを受け取ります。しかし、netcat
「接続」自体は何も送信しません。
netcat
「接続」で何でも送ってください。コマンドを変更せずにEnter何かを入力し(実行中の端末で)。試してみてください。または、ユーザーの入力を待たずに送信するようにecho foo
コマンドとパイプを変更します。netcat
foo
echo foo | netcat -u 192.168.2.29 8111 | vlc -
netcat
「リスニング」が印刷されますfoo
。正直に言うと、代わりに単独で十分echo
です。 「受信」状態になり、それがどこから来たのかを調べるecho foo
改行文字を印刷します。netcat
このようにして、「リスナー」はnetcat
データの送信先を知り、それを開始します。
TCPを使用すると、受信側で実際のデータを任意の方向に送信する前に、ハンドシェイク中に接続側のアドレスとポートを学習するため、この問題はありません。