【问题标题】:How to do async / await video streaming with ASP.NET MVC?如何使用 ASP.NET MVC 进行异步/等待视频流?
【发布时间】:2018-08-17 06:32:39
【问题描述】:

最近我读到了这篇关于视频流的文章 (https://blogs.ibs.com/2017/01/24/streaming-video-content-to-a-browser-using-web-api)。

文章中提供的解决方案效果很好,但我想知道是否有任何 async / await 替代方案,因为文章只显示了一个围绕 HttpResponseMessage 构建的解决方案,我担心性能问题?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-web-api video-streaming


    【解决方案1】:

    性能方面应该没有问题。

    使用异步等待不会带来太大的改进。 FileStreamer 已经在利用异步操作访问文件流。

    如果您坚持使用异步等待,您可以考虑将操作主体包装在 Task.Run 中并让操作返回 Task<HttpResponseMessage>

    这里确实不需要过早的优化。

    检查任何潜在的阻塞调用并进行相应的重构

    例如

    public async Task<IHttpActionResult> Get(string filename) {
    
        var filePath = await GetFilePathAsync(filename);
        if (!File.Exists(filePath))
            return NotFound();
    
        var response = getResponse(filePath);
    
        return ResponseMessage(response);
    }
    
    private HttpResponseMessage getResponse(string filePath) {
        var response = Request.CreateResponse();
        response.Headers.AcceptRanges.Add("bytes");
    
        var streamer = new FileStreamer();
        streamer.FileInfo = new FileInfo(filePath);
        response.Content = new PushStreamContent(streamer.WriteToStream, GetMimeType(filePath));
    
        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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2013-10-17
      • 2019-02-10
      • 2019-07-29
      • 2018-03-12
      • 2015-07-27
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多