Потоковое воспроизведение mp3-файлов с помощью django, чтение со страницы с <audio> - PullRequest
1 голос
/ 11 декабря 2010

Я пытаюсь создать небольшое приложение для потоковой передачи моих 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 потока.

Я пытался установить разные заголовки в ответе, но безуспешно. В настоящее время я устанавливаю длину контента, тип контента и расположение контента

Я ищу новые идеи, чтобы попробовать.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 11 декабря 2010

Вы можете попробовать использовать wireshark для наблюдения за вашим браузером / медиаплеером / apache, пока он работает правильно.

...