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

标签 html audio stream

我正在开发一个应用,该应用可解析来自广播/冰广播流(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/

相关文章:

html - 如何将 2 个文本输入字段合二为一?

javascript - 将链接更改为事件的 onclick

android - 什么是android音轨的最大和最小值,音频类型为float?

java - System.out 重定向到 JTextPane

scala - Stream 中的 isEmpty 方法是否评估整个 Stream?

c - fprintf、printf 和 sprintf 之间的区别?

html - General Anchor css 覆盖类...但仅在一页上

Html、table、img 和 css - 如何让文本正确换行?

python - 使用python从wav文件中绘制fft

python - 如何使用 pygame 正确实现音频延迟测试