そのため、コンテンツがサーバーアプリケーションの仮想ディレクトリとは異なるドライブにあるため、ファイル取得サービスを実装する必要がありました。
ファイルサイズを取得できます。次に、ブラウザが合計サイズを認識し、シークバーの比率を把握できるようにコンテンツヘッダーを設定します。
ここで、合計サイズのヘッダーを設定します。
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);
}
}