2017-08-22 11 views
0

私はデータベースストレージとして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>
です

+0

私は、このファイルの最後に「このビデオをロードする方法です」という情報を記録するエンコーディングには問題がありました。これらのカスタム動画はすべて1つの形式ですか?そうかもしれない場合は、別のサイトから一般的な作業用ビデオをダウンロードして試してみてください。私は詳細だけが不透明で、より多くの情報が必要だと思うので、コメントだけを投稿しています。ブロブの問題は問題になる可能性がありますが、実際の問題とは何の関係もない可能性があります。ビデオはどのようにエンコードされていますか?あなたは他のソースからのビデオを試しましたか? –

+0

また、ちょうどあなたに知らせるために、私は主にmp4形式で 'X-Accel-Redirect'ヘッダを使ってNginixに映画リクエストを渡すためにピラミッドを使用します。私はビデオのクロスブラウザ表示を処理するjwplayer(独自仕様だが私のために働く)を埋め込む。 –

+0

@plantian私はコードがうまく動作することを理解していない唯一の問題は、ブラウザが最初にビデオ全体をロードしてからそれを再生するということです。 20MBのビデオをアップロードすると、ビデオが再生されるまでにブラウザが20MBをロードするのを待たなければならないとします。また、私はちょうどより良い理解のために質問を編集しました。ありがとう –

答えて

0

あなたはチャンク/ストリーミング応答を取得する方法を求めていると、この内容はあなたのWSGIサーバとWSGIサーバとクライアントのブラウザ間の任意の他のサーバ/プロキシに完全に依存しています。たとえば、nginxはデフォルトで、クライアントに応答を送信する前に上流からの応答全体をバッファします。また、多くのWSGIサーバーはある程度同じことを行い、そのバッファリングをチューニングする方法については設定を調べる必要があります。

+0

あなたは私が参照できるリンクがありますか? –

関連する問題