1

HTML5 ビデオ タグで非常に奇妙な問題が発生しています。ポイントは、ブラウザでビデオを表示する必要があることです (それを変更することはできません。顧客はそれを HTML5 にしたいと考えています)。それで、私はそれがどのように機能するかについて潜んでいて、適切に機能するにはRangeヘッダーが必要であることを知り、それを続けるために小さなパーサーを書きました。基本的に、すべてが標準であり、適切なヘッダー/ボディ/その他を返します...使用するヘッダーのリストは次のとおりです

context.Response.StatusCode = 206;
if(begin == 0 && end == total)
    context.Response.StatusCode = 200;
context.Response.ContentType = "video/mp4";
context.Response.AddHeader("Accept-Ranges", "bytes");
context.Response.AddHeader("Content-Range", String.Format("bytes {0}-{1}/{2}", begin, end, total));
context.Response.AddHeader("Content-Disposition", "inline;");
context.Response.AddHeader("Content-Transfer-Encoding", "binary");

私がcurlで見たように、応答は適切で、バイトは本来のように送信されますが、問題は、ブラウザが(何らかの理由で)「Range: bytes=0-」(および約18683バイトを受信)で最初のリクエストを送信した後、送信を開始することです「範囲:バイト:6865374-」(番号はランダムで、ファイルの末尾近くにあります)のリクエストでは、ファイルの中間部分は受信を要求されないため、何も機能しません。サーバーは、「スレッドの終了またはアプリケーションの要求により、I/O 操作が中止されました」と言っています。ブラウザがサーバーとの接続を閉じているためだと思いますが、それについてはわかりません。素晴らしいことは、IE (驚き!) が正常に動作していることです。ただし、最初に mp4 ファイル全体をダウンロードしてから再生するだけです。私はすでにそれをどうするかわかりません。何かアイデアはありますか?

4

1 に答える 1

0

これが役立つことを願っています。ブラウザーやビデオ プレーヤーが最初の数バイトを要求し、次に最後の数バイトを要求することがあります。私が見たほとんどのビデオ プレーヤーは、ビデオの最後の 2 メガバイトを要求しました。プレーヤーはこれらの情報を使用して、ビデオの実際の長さを判断すると思います。必要なのは、ストリームの要求された部分を、その部分の適切なコンテンツ長を持つ部分コンテンツ (HTTP コード 206) として正確に送信することだけです。

役立つリンクは次のとおりです。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16

ビデオ プレーヤーは、ビデオ ファイルのバイト ベースのシークにこれを使用します。

于 2013-09-11T20:28:07.467 に答える