使用HTML5视频标记通过ashx处理程序从sql server blob播放视频文件

Lak*_*ddy 5 c# asp.net html5 sql-server-2008 html5-video

我正在使用此代码项目文章中的代码将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>
Run Code Online (Sandbox Code Playgroud)

如果我使用物理视频文件作为视频源,它可以工作.但是上面的代码不起作用.

在"Internet Explorer"中,标签呈现带有红叉的黑盒子

在"Chrome"中,播放器按钮可见但是当我点击播放按钮时,不会播放任何视频.当我们右键单击它时会显示"将视频保存为..."选项,并且下载的文件可以与桌面媒体播放器一起运行.

请帮我正确的代码.

tpe*_*zek 5

HTML5标准Video需要支持范围请求.

当您提供静态文件时,此支持由服务器在内部提供,但是如果HttpHandler您需要自己提供此支持.一般来说,这意味着处理RangeIf-Range在请求头和适当的服务206个部分内容与反应Content-Range,Date以及ETagContent-Location头.

文章在ASP.NET MVC范围请求- RangeFileResult详细描述了如何创建ASP.NET MVC ActionResult范围请求支持-你应该能够从移动所有的逻辑ExecuteResult方法ProcessRequest的方法HttpHandler没有问题.


ric*_*ott 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();
    .....
}
Run Code Online (Sandbox Code Playgroud)