J'utilise Pyramid avec ZODB comme base de données. Je veux retourner la réponse vidéo et je suis capable de mais le seul problème est le navigateur télécharge la vidéo entière, puis la joue et je ne veux pas que cela se produise. Je voulais diffuser de la vidéo, mais je suis incapable de trouver une solution appropriée. Voici mon codeComment servir Réponse vidéo sans télécharger l'intégralité de la vidéo sur le navigateur
Fonction qui retourne une réponse vidéo est:
@view_config(context=Content, name='getcontentplay')
def getContentImage(context,request):
blob = context.blobdata
resp = Response(content_disposition="inline; filename=\""+blob.filename.encode('utf-8')+"\"",content_type=blob.contentType,)
resp.app_iter = blob.data
resp.content_length = blob.size
return resp
Et Blob Storage Class est:
from ZODB.blob import Blob
from persistent import Persistent
class BlobWrapper(Persistent):
def __init__(self, filedata,contentType,filename):
self.contentType = contentType
self._blob = Blob(filedata)
self.filename = filename
def _getData(self):
fp = self._blob.open('r')
data = fp.read()
fp.close()
return data
def retFile(self):
return self._blob.open('r')
data = property(_getData)
@property
def size(self):
if 'size' in self.__dict__:
return self.__dict__['size']
reader = self._blob.open()
reader.seek(0,2)
size = int(reader.tell())
reader.seek(0)
reader.close()
self.__dict__['size'] = size
return size
def getSize(self):
return self.size
Et mon code HTML de modèle est
<video poster="/static/images/kid.png" controls controlsList="nodownload" preload="none">
<source src="${urltovideo}" />
</video>
J'ai eu des problèmes avec les encodages qui enregistrent l'information "c'est comment charger cette vidéo" à la fin du fichier au lieu du début. S'agit-il de toutes les vidéos personnalisées dans un format unique? Si tel est le cas, essayez de télécharger une vidéo de travail générique depuis un autre site et essayez-la. Je poste seulement un commentaire parce que je suis brumeux sur les détails et je pense que plus d'information est nécessaire. La chose blob pourrait être un problème mais cela pourrait aussi n'avoir rien à voir avec le problème réel, espérons que cela a du sens. Alors ... Comment les vidéos sont-elles encodées? Avez-vous essayé des vidéos d'autres sources? –
Aussi, juste pour vous le faire savoir, j'utilise pyramid pour passer des demandes de films à Nginix avec un en-tête 'X-Accel-Redirect', principalement dans un format mp4. J'intègre un jwplayer (propriétaire mais qui fonctionne pour moi) qui gère l'affichage croisé des vidéos. –
@plantian J'ai du mal à vous comprendre le code fonctionne très bien le seul problème est que le navigateur charge d'abord la vidéo entière et la joue ensuite. Supposons que si je télécharge une vidéo de 20 Mo, je devrais attendre que le navigateur charge 20 Mo avant que je puisse voir la lecture de la vidéo. Et aussi je viens d'éditer la question pour mieux la comprendre. Merci –