UDP를 통해 네트워크를 통해 (alsa) 오디오 보내기

UDP를 통해 네트워크를 통해 (alsa) 오디오 보내기

내가 이해한 바에 따르면 이것은 "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명령 과 파이프를 수정합니다 .netcatfoo

echo foo | netcat -u 192.168.2.29 8111 | vlc -

netcat"듣기"가 인쇄됩니다 foo. 솔직히 말해서, 대신 단독 이면 충분할 echo것입니다 . "수신" 상태가 되어 그것이 어디서 왔는지 알아내는 echo foo개행 문자를 인쇄할 것입니다 .netcat

이런 식으로 "리스너"는 netcat데이터를 보낼 위치를 알고 이를 수행하기 시작합니다.

TCP를 사용하면 수신 측에서 실제 데이터를 어떤 방향으로든 보내기 전에 핸드셰이크 중에 연결 측의 주소와 포트를 학습하기 때문에 이러한 문제가 없습니다.

관련 정보