1

そのため、コンテンツがサーバーアプリケーションの仮想ディレクトリとは異なるドライブにあるため、ファイル取得サービスを実装する必要がありました。

ファイルサイズを取得できます。次に、ブラウザが合計サイズを認識し、シークバーの比率を把握できるようにコンテンツヘッダーを設定します。

ここで、合計サイズのヘッダーを設定します。

   string bytes = Convert.ToString( fInfo.Length );                   
   Response.AddHeader("Content-Length", bytes );
   Response.AddHeader("Content-Range", "bytes 0-" + bytes + "/" + bytes);

その結果:

Content-Length: 1389363
Content-Type: video/ogg
Content-Range: bytes 0-1389363/1389364

結果のファイルをダウンロードし、バイトが一致することを確認しました。Firefoxで正常に動作し、すべてChromeで奇抜です。クロームでは、最後まで再生されますが、シークバーは移動せず、最後に到達した現在の時間に負の無限大を示します。また、ビデオの長さが無効であるためか、ビデオをスクラブできません。

同じファイルをChromeで直接再生すると正しく機能するので、Firefoxが#%tとして提供しないようにChromeが望んでいるのはコンテンツヘッダーである可能性がありますか?

何か案は?長さの単位が間違っていますか?組み込みのサーバー側のg-zipエンコーディングが干渉していますか?

私は標準のビデオオブジェクトを使用しています:

<video class="videoplayer" controls="" autoplay="autoplay" tabindex="0">
<source type="video/ogg" src="http://vb_html.dev/GetFile.aspx?filename=c:/_assets/4c2c09c2-f2ff-e011-a992-009056af18ff/softsignage/softsignage-00000000600.ogv"></source>
Your browser does not support the video tag.
</video>

詳細については、これがファイルデータの受け渡し方法です。

  FileStream mystream = new FileStream(anyFilePath, FileMode.Open, FileAccess.Read);
                    byte[] buffer = new byte[4096];
                    using (BinaryReader reader = new BinaryReader(mystream))
                    {

                        while (true)
                        {
                            int bytesRead = mystream.Read(buffer, 0, buffer.Length);
                            if (bytesRead == 0) break;
                            Response.OutputStream.Write(buffer, 0, bytesRead);
                        }
                    }
4

2 に答える 2

1

ステータス コードを 206 に設定してみてください。

response.StatusCode = 206;
于 2012-09-28T09:21:28.890 に答える