私のローカルDBからビデオをストリーミングするアプリケーションがあります。私は昨日データを返すことを試みるのに多くの時間を費やしましたRangeFileContentResult
またはRangeFileStreamResult
成功なし。RangeFileContentResultとRanged Requestsを使用したビデオストリーミング
要するに、これらの2つの結果のいずれかとしてファイルを返すと、正しくストリームする(または全く再生しない)ように見えることがありません。
ブラウザからの要求が以下のヘッダで送信されます:
Range: bytes=0-
そして、応答が提供されていますが、例として、これらのヘッダを与える:
Accept-Ranges: bytes
Content-Range: bytes 0-5103295/5103296
ネットワークトラフィックの面では、私が手部分的な結果のための一連の206、そして最終的に正しいと思われる(フィドラーによると)200。 Chromeのネットワークタブはこれと一致せず、最初のリクエスト(常に13バイトと見なしてハンドシェイクしています)と、キャンセルまたは保留中のステータスを持つリクエストがもう2つあります。 私が理解する限り、これは多かれ少なかれ正しいです、206 - キャンセル、206 - キャンセルなど。しかし、ビデオは決して再生されません。
コントローラの結果をFileResultに切り替えると、ビデオが再生され、Chrome、IE10、Firefoxが再生され、ダウンロードが完了する前に再生されているように見えます(ストリーミングのような感じです!そうではありません)
しかし、結果の範囲では、私はchromeやIEには何も得ておらず、ビデオ全体がfirefoxの1滴でダウンロードされます。
私が理解している限り、はダウンロードするバイトの範囲でクライアントに応答する必要があります(これは私の言うことではありません。ファイル全体を取得するように指示しています))。そして、クライアントはそれに対応する必要があります。
誰もがこのエリアに考えを持っていますか?具体的には:
a)RangeFileContentResult
は、クライアントにバイトの範囲を送り返すべきですか? b)クライアント側から要求されたバイトの範囲を明示的に制御できる方法はありますか? c)RangeFileContentResult
をリクエストしているときに、ブラウザがビデオを全く読み込まない原因となる理由がありますか?
編集:私は見ているかを説明するための図を追加しました:
EDIT2:[OK]を、プロットは厚くなるようにします。我々は別のシステムのテストバージョンをプッシュするために必要なRangedFileのgubbinsで遊んとしながら、私は以下のように私のコントローラのアクションに「RangeFileContentResultを」左:
private ActionResult RetrieveVideo(MediaItem media)
{
return new RangeFileContentResult(media.Content, media.MimeType, media.Id.ToString(), DateTime.Now);
}
をむしろ奇妙な、これは今、私たちのAzure上で期待通りに動作するようです私のローカルマシンにはまだありません。 Azure IIS8ではうまく動作するが、私のローカル7.5インスタンスでは動作しないIISベースのものがあるのだろうか?あなたのファイルは標準を使用してプレイするはずです。
こんにちは。私はLib.Web.Mvcの著者であり、私はこの特定の問題を掘り下げて喜んでいます。私たちはiPad上のSafariと同様のものを持っていましたが、これはファイルに関する情報を得るために上限を使わずに要求を出したためです。ブラウザは、データが送信されるのを待たずに要求をキャンセルしていました(一般に、プロトコルはブラウザによって違反されていました)。これは似たようなものかもしれません。あなたの環境の詳細をメールで送ってください。私は問題を再現することができます。また、Lib.Web.Mvcのソースコード全体とその他のものをhttp:\\ tpeczek.codeplex.comで見つけることもできます。 – tpeczek
@tpeczekこんにちはトーマス、ありがとう、あなたに私にあなたに連絡するための最善のアドレスを教えてくれますか?私が見ている主な変わったことは、同じビルドからロードする間の不一致です。例えばユーザ1の場合は動作し、ユーザ2の場合は動作しません。その後、ユーザー1がリフレッシュされ動作しますが、ユーザー2はリフレッシュされますが、ユーザー2はリフレッシュしません。私に最高の住所を知らせてください、そして私はあなたにいくつかの詳細をポップします。 – dougajmcdonald
私のプロフィールからのもの:[email protected]できるだけ詳しく(コード、ビデオ、関係するブラウザ、設定、例外の詳細、ログなど) – tpeczek