我有一个可以将模拟音频转换为数字音频的设备,并且有一种方法可以通过 UDP 协议收听本地服务器中的流。
echo 'subscribe' | nc -u 192.168.0.194 9444
,我会收到大约 15 秒的响应,如下所示,我应该能够将其转换为可以播放的音频:?a?????̻?yyzzyyzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}|||}|}~~~~~~~~~~~}~~~~~~}}~~~}}}}}|||||}|||||||||||}|||||||||||{{{{{{{{{{{{{{zzzzzzzzzzzzzz?a???p?̻?zzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzywxxxxxwwxxxxxxxxxxxyyyzzyyzyyyyyyyyyzzzyyyyzzzzzzzzz{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|{|||||||||||||||||||||||||||||?a???P?̻?||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}||||}|}~~~~~~~~~~~}~~~~~~}}}}~~~}}}}|||||}||||||||||||||||||{|||{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy?a???0?̻?yyyzzzzzzzzzzyzzzyyzzzzzzzzzzzzzzzzzzzzzzxwwwxxxxwwxxxxxxxxxxyyyzyyyyyyyyyyzzzyyyyyyyyzzzzzzzzzzz{zz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}~~~~~~~~~~?a???̻?~~~~}}~~~~~}}}}}}}}}}|||{|}|||||||||}}|||||||{|||{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyzyyyyzzzzzzzzyyyyyzzzzzzzzzzzzzzzzzzzzxwwwxxxxwwxxxxxxxxxxxyyyyyyyyyyyyzzzyxy?a????̻?yyzzyyzzzzzzzzzzzz{z{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}||||||}~~~~~~~~~~~~~}}}~~~~~}}~}}}}}}}||{|}|||||||||||||||||{{||{{{{{{{{{{{{{{{zzzzzzzzzzzzzzz?a????̻?zzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzyyzzzzzzzzzzzzzzzzzzzzzzzzzzzxwwxxxxxwxxxxxxxxxxxyyyzyyzyyyyyyzzzyyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||||||||||||||||||||||||||?a?İ?̻?||||||||||||||||||||{||{|||||||||||||||||||||||||||||||||||||}}}||||}~~~~~~~~~~~~~~~~~~~~}}}~~~~}}}||||{|}||||||||||||||||||||||{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyyzy?a?Ɛ?̻?zzzzzzzzzzzzyyzzzzyzzzzzzzzzzzzzzzzzzzzzzxwxxxxwwwxxxxxxxxxxxyyyzyyyyyyyyyzzzyyyyyzyyzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||~~~~~~~~~~?a??p?̻?~~~}}}~~~~~~~~}}}}}}}||{|}||||||||||||}}||{{|||{|{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxwxxxxwwwxxxxxxxxxxxyyyzyyyyyyzyyyyzzzz?a??P?̻?yyyyyzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}||||}~~~~~~~~~~~~~~~~~~}}}}}~~}}}}||||{|}|||||||||||||||||{||{|{{{{{{{{{{{{{{zzzzzzzzzzzzzzz?a??0?̻?zzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyyyyzyyzzzzzzzzzyyzzzzzzzzzzzzzzzzzzzzzzzywwwxxyyxxwxxxxxxxxxxyyyzyyzyyyyyyzzzyyyyzyyyzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||????̻?|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}|}}}~~~~~~~~~~~}~~~~~~}}~~~}}}}}|||||}|||}|||||||||||||||||||{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzz?a ????̻?zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzywwwxxyyxxxxxxxxxxyyyyyyzyyzyyyyyyzzzzyyyzzzyyzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}||}}}~~~~~~~?a...
async Task StartListener(){
UdpClient listener = new UdpClient(9444);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("192.168.0.194"), 9444);
byte[] requestMessage = Encoding.ASCII.GetBytes("subscribe");
await listener.SendAsync(requestMessage, requestMessage.Length, groupEP);
while (true){
await listener.SendAsync(requestMessage, requestMessage.Length, groupEP);
var udpReceiveResult = await listener.ReceiveAsync(); //Waiting for broadcast
byte[] bytes = udpReceiveResult.Buffer;
Console.WriteLine($"Received broadcast from {groupEP} : {Encoding.ASCII.GetString(bytes, 0, bytes.Length)}");
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b"subscribe", ("192.168.0.194", 9444))
sock.connect(("192.168.0.194", 9444)) # Keeping this seems to make no difference
sock.settimeout(5)
try:
while True:
print("Stream receiving.") # Receive data from UDP
data, addr = sock.recvfrom(1024) # <-GETS STUCK HERE, then times out
print(data) # Doesnt land here, prints nothing
except KeyboardInterrupt:
pass
finally:
sock.close() # Stream stopping
print("Stream closed and socket closed.")
无用的错误消息,因为没有添加超时,它只是停留在
sock.recvfrom
线上并且不执行任何操作,即使在设备停止发送数据之后也是如此:
Traceback (most recent call last):
File "/Users/saamer/Documents/GitHub/api/a2.py", line 11, in <module>
data, addr = sock.recvfrom(1024) # Buffer size is ?? bytes
^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out
可能有用的信息:
最终我希望能够做一些这样的事情来播放音频。我试图向 chatGPT 询问这个问题,它建议的唯一一件事就是更改
recvfrom()
内的值,我对 100 万进行了更改,但没有任何积极结果
我必须将之前的所有代码更改为这个确切的顺序:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 9444)) # Throws an error if it's anything else
sock.sendto(b"subscribe", ("192.168.0.194", 9444)
try:
...
其余代码有效。还是不知道我是怎么想出来的。但基本上
0.0.0.0
允许监听来自该端口的所有数据包,并且它不允许我绑定到 192.168.0.194