使用HTML5 <audio>标记</audio>时,浏览器会在页面刷新时将RST发送到shoutcast流

时间:2013-08-28 17:06:22

标签: html5 audio stream

我正在开发一个解析shoutcast / icecast流(MP3格式)元数据的应用程序,并将音频sans-metadata中继到带有标签的网页

架构:

Windows 7 w / Python 2.7

localhost:8080 - &gt; Tornado应用程序提供音频播放器和/元数据/元数据

localhost:8000 - &gt; Python套接字中继解析流w / NO HTTP头,只流数据

...

其他套接字连接到discogs / gracenote apis以收集其他元数据

使用这样的音频标签:

<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中观察到了这种行为。

1 个答案:

答案 0 :(得分:0)

我在这里向铬开发者提交了一份错误报告:

https://code.google.com/p/chromium/issues/detail?id=281710