J'ai un projet avec Django Je travaille sur où je veux diffuser des fichiers mp3.Pipe brisée pendant le flux
J'ai cette même question: Streaming mp3 files with django, read from a page with <audio>
Permettez-moi d'expliquer: Je veux flux un ogg avec Django, et avec une étiquette <audio>
dans ma page html
j'ai une URL comme domain.tld/song/show/X/
, où X
est l'id de ma chanson. Je peux streamer avec VLC (directement avec le chemin du fichier), je peux diffuser pendant le test, (j'écris ce que je reçois et je le lis avec VLC).
Mais quand j'ouvrir mon navigateur et charger ma page d'accueil domain.tld
où j'ai et <\audio\>
avec url domain.tld/song/show/1/
balise, je reçois un gros tuyau cassé, comme si mon client a fermé la connexion.
J'ai lu sur d'autres post que certains problèmes ont été résolus lorsqu'ils ont mis le serveur en production. Donc, je pousse mon application sur le serveur, utilisez Apache, avec le django.wgsi
comme sur djangoproject.com. Je lance python 2.7.3 sur Debian 7 avec Django version 1.5. il mon code:
Song/views.py
def playAudioFile(request, pk):
f = get_stream_song(pk)# return a pipe from pipes.Template
l = f.read() # the file is an ogg get by pydub.com
f.close()
size_read = 550000
sr = size_read
while sr == size_read:
print "rep"
r = l[:size_read]
l=l[size_read:]
sr = len(r)
yield r
time.sleep(0.1)
#url : ~/song/show/X/
#@login_required
def show_song(request, pk):
return StreamingHttpResponse(playAudioFile(request, pk), mimetype='audio/ogg',)
Dans mon HTML, je dois juste que:
<audio controls height="100" width="100" preload="auto">
<source src="/.../song/show/1/" type="audio/ogg">
<embed height="50" width="100" src="/.../song/show/1/">
</audio>
L'erreur ressemble:
Traceback (most recent call last):
File "/usr/lib/python2.7/wsgiref/handlers.py", line 86, in run
self.finish_response()
File "/usr/lib/python2.7/wsgiref/handlers.py", line 127, in finish_response
self.write(data)
File "/usr/lib/python2.7/wsgiref/handlers.py", line 215, in write
self._write(data)
File "/usr/lib/python2.7/socket.py", line 324, in write
self.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 104] Connection reset by peer
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 46392)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/home/lumy/SPhoque/SonoPhoque/SoPhoque/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 150, in __init__
super(WSGIRequestHandler, self).__init__(*args, **kwargs)
File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__
self.finish()
File "/usr/lib/python2.7/SocketServer.py", line 704, in finish
self.wfile.flush()
File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
I J'ai deux fois chaque fois que j'essaie de diffuser.
Modifier 15h 29/05:
J'ai fait ce Rahan suggéré: regardant Firebug et débogueur Firefox:
Le client fait:
GET 1 200 OK localhost:8000 537.1KB 4.71s
Headers
Response Headersview source
Date Wed, 29 May 2013 13:08:54 GMT
Server WSGIServer/0.1 Python/2.7.3
Content-Type audio/ogg
Request Headersview source
Host localhost:8000
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12 Iceweasel/10.0.12
Accept audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5
Accept-Language en-us,en;q=0.5
Connection keep-alive
Range bytes=0-
Referer http://localhost:8000/
et les détails disent que la taille totale pour tous les documents est de 1 Mo (526 Ko à partir du cache)
Votre client/le navigateur met fin à la connexion. Vous devez vérifier cela. – Rohan
@Rohan avec wireshark? sur le débogueur firefox une réponse get 200 pour l'url /.../song/show/1/ – Lumy
Peut utiliser wireshark ou aussi vérifier dans le débogueur FF s'il y a quelque chose. – Rohan