用django流式播放mp3文件,从带有<audio> </audio>的页面读取

时间:2010-12-11 00:14:49

标签: python django audio-streaming

我正在尝试制作一个小应用程序,通过Web界面流式传输我的mp3文件,我想在django中使用python进行服务器端操作。

我希望像/ stream / ID这样的网址流式传输与该ID对应的mp3。 我在django中查看了使用不同的方法来提供这些文件,我尝试的最后一个是here

如果我从firefox访问/ stream / ID,它会直接使用firefox-totem或类似插件播放mp3。如果我使用与我的音频播放器页面相同的url作为源它根本不起作用(使用apache提供的mp3文件的链接)。

这是我的视图代码(只发送一个测试文件)

def stream(request):  
    resp =  HttpResponse(FileIterWrapper(open('/.../test.mp3',"rb")),mimetype='audio/mpeg')  
    resp['Content-Length'] = os.path.getsize("/.../test.mp3")  
    resp['Content-Disposition'] = 'filename=test.mp3'  
    return resp

我剪掉了完整的路径,这不是问题。

在查看django runserver输出时,我注意到每次音频播放器尝试时,我都会收到这两个错误,

Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py", line 281, in run
    self.finish_response()
  File "/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py", line 321, in finish_response
    self.write(data)
  File "/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py", line 417, in write
    self._write(data)
  File "/usr/lib/python2.6/socket.py", line 318, in write
    self.flush()
  File "/usr/lib/python2.6/socket.py", line 297, in flush
    self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 104] Connection reset by peer
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 42891)
Traceback (most recent call last):
  File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py", line 562, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__
    self.finish()
  File "/usr/lib/python2.6/SocketServer.py", line 661, in finish
    self.wfile.flush()
  File "/usr/lib/python2.6/socket.py", line 297, in flush
    self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 32] Broken pipe

直接访问流URL时没有问题/错误。

我尝试使用chrome(最新版本,安装了ffmpeg-extra),使用apache的mp3工作正常,但使用流网址时超时。

我尝试在响应中设置不同的标头,但没有成功。 我目前正在设置内容长度,内容类型和内容处置

我正在寻找新想法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用wireshark观察浏览器/媒体播放器/ apache是​​否正常工作。