我正在开发一个应用,该应用可解析来自广播/冰广播流(MP3格式)的元数据,并将音频无格式元数据中继到带有标签的网页
建筑:
Windows 7 w / Python 2.7
localhost:8080-> Tornado应用程序在/上提供音频播放器,在/ metadata上提供元数据
localhost:8000-> Python套接字中继解析的流(不带HTTP header ),仅流数据
...
其他套接字连接到discogs / gracenote api以收集其他元数据
使用这样的音频标签:
<audio id="stream" preload="none" src="http://localhost:8000"></audio>
我希望能够在我的浏览器中听到流,并将浏览器限制为仅将单个连接发送到我的服务器。它确实起作用,但是当我刷新页面时,浏览器将像往常一样开始缓冲流,然后突然通过发送RST数据包取消连接。
在python后端上,我在套接字处理的主循环中收到以下错误:
error: [Errno 10053] An established connection was aborted by the software in your host machine
该套接字处理看起来像这样,基本上它解析了shoutcast流中的元数据,并将mp3数据发送回客户端:
while self.running:
data = ''
for i in range(bytes):
data += self.s_stream_in.recv(1)
print "sending..."
self.conn.sendall(data)
length = ord(self.s_stream_in.recv(1)) * 16
if length > 0:
data = self.s_stream_in.recv(length)
in_queue.put(data)
bytes = metaint
我在python后端代码中尝试了多种方法来防止这些RST的发生,包括设置各种套接字标志并确保没有防火墙/防病毒干扰连接。然后,我决定使用音频标签中的原始源流来查看是否存在相同的问题。添加分号以告知shoutcast发送流而不是Web界面。
<audio id="stream" preload="none" src="http://streamerepsilon.jazz.fm:8000/;"></audio>
惊喜,惊喜!原始流表现出相同的行为:与mp3流的初始连接运行良好,但是刷新页面时,RST数据包将发送到流服务器。我已经在Chrome浏览器中观察到了这种行为。
最佳答案
我在这里向 Chrome 开发人员提交了错误报告:
https://code.google.com/p/chromium/issues/detail?id=281710
关于html - 使用HTML5 <audio>标记时,浏览器在页面刷新时将RST发送到shoutcast流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494070/