我想通过asp.net web api控制器从数据库中流式传输视频.我已经从我的服务器中的静态文件(代码下面)完成了,但我无法完成数据库模式.
这是我的代码(我通过网络搜索获得)
这是我的代码(我通过网络搜索获得)
public class VideosController : ApiController { // GET api/values public HttpResponseMessage Get(string filename) { var filePath = HttpContext.Current.Server.MapPath("~") + filename; if (!File.Exists(filePath)) return new HttpResponseMessage(HttpStatusCode.NotFound); var response = Request.CreateResponse(); response.Headers.AcceptRanges.Add("bytes"); var streamer = new FileStreamer(); streamer.FileInfo = new FileInfo(filePath); response.Content = new PushStreamContent(streamer.WritetoStream,"video/mp4"); RangeHeaderValue rangeHeader = Request.Headers.Range; if (rangeHeader != null) { long totalLength = streamer.FileInfo.Length; var range = rangeHeader.Ranges.First(); streamer.Start = range.From ?? 0; streamer.End = range.To ?? totalLength - 1; response.Content.Headers.ContentLength = streamer.End - streamer.Start + 1; response.Content.Headers.ContentRange = new ContentRangeHeaderValue(streamer.Start,streamer.End,totalLength); response.StatusCode = HttpStatusCode.PartialContent; } else { response.StatusCode = HttpStatusCode.OK; } return response; } class FileStreamer { public FileInfo FileInfo { get; set; } public long Start { get; set; } public long End { get; set; } public async Task WritetoStream(Stream outputStream,HttpContent content,TransportContext context) { try { var buffer = new byte[65536]; using (var video = FileInfo.OpenRead()) { if (End == -1) { End = video.Length; } var position = Start; var bytesLeft = End - Start + 1; video.Position = Start; while (position <= End) { // what should i do here? var bytesRead = video.Read(buffer,(int)Math.Min(bytesLeft,buffer.Length)); await outputStream.WriteAsync(buffer,bytesRead); position += bytesRead; bytesLeft = End - position + 1; } } } catch (Exception ex) { // fail silently } finally { outputStream.Close(); } } } }
这是我的HTML代码:
<video width="640" height="480" controls="controls"> <source src="/api/Videos/?filename=sample.mp4" type="video/mp4"> </video>
有一种方法可供我(由其他人编写)从引擎(数据库)获取一系列文件,其代码如下:
public byte[] Engine.DownloadStreamFile(Guid fileId,long from,long length)
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。