Python - Django: Streaming-video - /mp4-Datei mit HttpResponse

Bin ich mit Python2.7, django==1.7 und uwsgi für das streaming von video - /mp4-Datei zu iPhone Spieler.

Mein code ist wie folgt:

def stream(request):
     with open('/path/video.mp4', 'r') as video_file:
        response = HttpResponse(video_file.read(), content_type='video/mp4')
        response['Content-Disposition'] = 'inline; filename=%s' % 'video.mp4'
        return response
     video_file.close

Wenn ich einige kleine Videos (weniger als 1MB), es-streams im browser, aber im iPhone palyer habe ich diese Fehlermeldung:

[uwsgi-http key: 127.0.0.1:8008 client_addr: 192.168.0.172
client_port: 14563] hr_write(): Broken pipe [plugins/http/http.c-Linie
564]

Und wenn die Größe des Videos ist mehr als 5 MB, ist es nicht Strom in beiden (also browser-und iPhone-Spieler) mit dem gleichen Fehler.

Habe ich versucht, das zu tun, chunk chunk Rückkehr mit StreamHttpRespose wie folgt:

def read(chunksize=8192):
    with open('/path/video.mp4', 'rb') as video_file:
        byte = video_file.read(chunksize)
        while byte:
            yield byte

return StreamingHttpResponse(read(), content_type='video/mp4')

Aber es ist der gleiche Fehler: Broken pipe.

fyi ich streamen können pdf-und Bild-Dateien. Dieses problem ist nur mit mp4-Dateien. Und auch ich habe die content_type zu "video-mpeg', den browser heruntergeladen, dass, während ich verhindern wollen-Datei herunterladen.

Was ist deine Idee? Jede Lösung!!!!?

  • Um zu streamen brauchst du einen anderen thread zum schreiben der Daten auf die Antwort. Denn die Art und Weise Sie es tun wird einfach warten, bis Sie gelesen haben, die ganze Datei und senden Sie Sie zusammen.
  • Vielen Dank für Ihren Kommentar, Aber in der zweiten Lösung (StreamHttpResponse) bin ich beim Lesen der video Datei als byte und senden Sie es in jedem chunk durch yield-Befehl. es heißt, es spielt keine Notwendigkeit zu warten, für immer die ganze Datei.
  • Ja. Du hast Recht
  • Hallo Aida, ich würde gerne wissen, wenn Sie noch keine Lösung gefunden zu diesem Thema. Ich habe das gleiche Problem 🙂 vielen Dank
  • Ich erklärte Ihr, was ich Tat, für, die. Aber es ist nicht die Lösung, nur funktioniert es einwandfrei. Wenn Sie finden keine Lösung, bitte beantworten Sie meine Frage, und verdienen Sie Ihre Punktzahl 😉
  • Danke @Aida.Mirabadi !

Schreibe einen Kommentar