私はデータベースストレージとしてZODBのピラミッドを使用しています。私はビデオレスポンスを返したいと思いますが、唯一の問題はブラウザがビデオ全体をダウンロードして再生し、それを再生し、そのようなことが起こりたくないということです。私はビデオをストリーミングしたかったのですが、適切な解決策を見つけることができませんでした。 は、ここに私のコード動画レスポンスを返すサービスの仕方ブラウザ上でビデオ全体をダウンロードせずにビデオレスポンス
関数の次のとおりです。
@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
およびBLOBストレージクラスは次のとおりです。
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
そして、私のHTMLテンプレートのコードが
<video poster="/static/images/kid.png" controls controlsList="nodownload" preload="none">
<source src="${urltovideo}" />
</video>
私は、このファイルの最後に「このビデオをロードする方法です」という情報を記録するエンコーディングには問題がありました。これらのカスタム動画はすべて1つの形式ですか?そうかもしれない場合は、別のサイトから一般的な作業用ビデオをダウンロードして試してみてください。私は詳細だけが不透明で、より多くの情報が必要だと思うので、コメントだけを投稿しています。ブロブの問題は問題になる可能性がありますが、実際の問題とは何の関係もない可能性があります。ビデオはどのようにエンコードされていますか?あなたは他のソースからのビデオを試しましたか? –
また、ちょうどあなたに知らせるために、私は主にmp4形式で 'X-Accel-Redirect'ヘッダを使ってNginixに映画リクエストを渡すためにピラミッドを使用します。私はビデオのクロスブラウザ表示を処理するjwplayer(独自仕様だが私のために働く)を埋め込む。 –
@plantian私はコードがうまく動作することを理解していない唯一の問題は、ブラウザが最初にビデオ全体をロードしてからそれを再生するということです。 20MBのビデオをアップロードすると、ビデオが再生されるまでにブラウザが20MBをロードするのを待たなければならないとします。また、私はちょうどより良い理解のために質問を編集しました。ありがとう –