5

このコードプロジェクトの記事のコードを使用して、MP4 ビデオ ファイルを SQL サーバー (varbinary(MAX)) にアップロードし、そこから再生しています。

私の要件は、ファイル システムからビデオを保存および取得する代わりに、SQL サーバーを使用することです。

これは、ビデオを再生するために使用しているコードです。

<video id='my_video_1'  controls
   width="640" height="264"
  data-setup="{"controls":true, "preload":none}" >
  <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' type='video/mp4'>  
</video>

ビデオ ソースとして物理的なビデオ ファイルを使用すると、機能します。ただし、上記のコードは機能しません。

「Internet Explorer」では、タグは赤い十字の付いた黒いボックスをレンダリングします

「Chrome」ではプレーヤー ボタンは表示されますが、再生ボタンをクリックしてもビデオが再生されません。右クリックすると、「名前を付けてビデオを保存...」オプションが表示され、ダウンロードしたファイルはデスクトップ メディア プレーヤーで正常に動作します。

正しいコードを教えてください。

4

2 に答える 2

5

HTML5タグには、 Range RequestsVideoのサポートが必要です。

静的ファイルを提供する場合、このサポートはサーバーによって内部的に提供されますが、HttpHandlerこのサポートを自分で提供する必要がある場合。一般に、これは、リクエストでRangeおよびヘッダーを処理し、 、およびまたはヘッダーを使用して適切な206 部分コンテンツレスポンスを提供することを意味します。If-RangeContent-RangeDateETagContent-Location

記事ASP.NET MVC の Range Requests – RangeFileResult では、 Range RequestActionResultをサポートする ASP.NET MVCを作成する方法について詳しく説明しています。すべてのロジックをメソッドからメソッドに問題なく移動できるはずです。ExecuteResultProcessRequestHttpHandler

于 2012-10-08T14:16:23.417 に答える
1

<video>コード ブロックを静的なビデオ ソースでテストします。マークアップが適切であることがわかったら、ハンドラーをテストし、ビデオが正しくエンコードされ、正しい受け入れが配信されていることを確認します。メディアプレイヤー等でお試しください。

<video id='my_video_1' controls width="640" height="264"
  data-setup='{"controls":true, "preload":none}' >
  <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' 
     type='video/mp4 codecs="avc1.42E01E, mp4a.40.2"'>  
</video>


public void ProcessRequest (HttpContext context) 
{
    ....
    context.Response.AppendHeader("Content-Type", "video/mp4");`
    context.Response.AppendHeader("Accept-Ranges", "bytes");

    byte[] fileContents = GetYourBytesFromWhereEver();
    context.Response.OutputStream.Write(fileContents, 0, fileContents.Length);
    context.Response.Flush();
    .....
}
于 2012-10-08T13:53:06.720 に答える