Я пытаюсь создать небольшое приложение для потоковой передачи моих mp3-файлов через веб-интерфейс, и я подумал о том, чтобы поиграть с серверной стороной на python и использовать django.
Я хочу, чтобы URL, такие как / stream / ID, передавали mp3, соответствующий этому идентификатору.
Я сделал в django представление для обслуживания этих файлов различными способами, последний из которых я попытался описать здесь
Если я получаю доступ к / stream / ID из firefox, он воспроизводит mp3 напрямую с помощью firefox-totem или какого-нибудь такого плагина. Если я использую страницу с моим аудиоплеером с тем же URL-адресом, что и у источника, он вообще не работает (работает со ссылкой на mp3-файл, обслуживаемый apache).
вот код моего взгляда (отправьте только один тестовый файл)
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, я заметил, что каждый раз, когда пытается запустить аудиоплеер, я получаю эти 2 ошибки,
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-адресу потока.
Я попробовал то же самое в chromium (последняя версия, с установленным ffmpeg-extra), он отлично работает с mp3 от apache, но время ожидания при использовании URL потока.
Я пытался установить разные заголовки в ответе, но безуспешно.
В настоящее время я устанавливаю длину контента, тип контента и расположение контента
Я ищу новые идеи, чтобы попробовать.
Спасибо за вашу помощь!