【发布时间】:2010-12-11 00:14:49
【问题描述】:
我正在尝试制作一个小应用程序来使用 Web 界面流式传输我的 mp3 文件,我考虑过使用 django 在 python 中玩和做服务器端。
我想要像 /stream/ID 这样的 url 来流式传输与该 ID 对应的 mp3。 我在 django 中创建了一个视图,以使用不同的方法来提供这些文件,我尝试的最后一个是 here
如果我从 firefox 访问 /stream/ID,它会直接使用 firefox-totem 或类似的插件播放 mp3。如果我将该页面与我的音频播放器一起使用,其 url 与源相同,则它根本不起作用(与 apache 提供的 mp3 文件的链接一起使用)。
这是我的观点的代码(只发送一个测试文件)
def 流(请求):
resp = HttpResponse(FileIterWrapper(open('/.../test.mp3',"rb")),mimetype='audio/mpeg')
resp['Content-Length'] = os.path.getsize("/.../test.mp3")
resp['Content-Disposition'] = 'filename=test.mp3'
返回响应
我切断了完整的路径,这不是问题。
查看 django runserver 输出时,我注意到每次音频播放器尝试时,都会出现这 2 个错误,
Traceback(最近一次调用最后一次):
运行中的文件“/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py”,第 281 行
self.finish_response()
文件“/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py”,第 321 行,finish_response
self.write(数据)
文件“/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py”,第 417 行,写入
self._write(数据)
文件“/usr/lib/python2.6/socket.py”,第 318 行,写入
self.flush()
文件“/usr/lib/python2.6/socket.py”,第 297 行,刷新
self._sock.sendall(缓冲区(数据,write_offset,buffer_size))
错误:[Errno 104] 对等方重置连接
--------------------------------------
处理来自 ('127.0.0.1', 42891) 的请求时发生异常
回溯(最近一次通话最后):
_handle_request_noblock 中的文件“/usr/lib/python2.6/SocketServer.py”,第 283 行
self.process_request(request, client_address)
文件“/usr/lib/python2.6/SocketServer.py”,第 309 行,在 process_request 中
self.finish_request(request, client_address)
文件“/usr/lib/python2.6/SocketServer.py”,第 322 行,在 finish_request
self.RequestHandlerClass(request, client_address, self)
__init__ 中的文件“/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py”,第 562 行
BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
__init__ 中的文件“/usr/lib/python2.6/SocketServer.py”,第 618 行
self.finish()
文件“/usr/lib/python2.6/SocketServer.py”,第 661 行,完成
self.wfile.flush()
文件“/usr/lib/python2.6/socket.py”,第 297 行,刷新
self._sock.sendall(缓冲区(数据,write_offset,buffer_size))
错误:[Errno 32] 管道损坏
当我直接访问流 URL 时没有问题/错误。
我在 chromium 中尝试过同样的方法(最新版本,安装了 ffmpeg-extra),它适用于 apache 的 mp3,但使用流 url 时会超时。
我尝试在响应中设置不同的标题,但没有成功。 我目前正在设置内容长度、内容类型和内容处置
我正在寻找新的想法来尝试。
感谢您的帮助!
【问题讨论】:
标签: python django audio-streaming