Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC视频流到移动web浏览器_C#_Asp.net_Asp.net Web Api_Model View Controller_Video Streaming - Fatal编程技术网

C# MVC视频流到移动web浏览器

C# MVC视频流到移动web浏览器,c#,asp.net,asp.net-web-api,model-view-controller,video-streaming,C#,Asp.net,Asp.net Web Api,Model View Controller,Video Streaming,我想通过ASP.NET MVC web应用程序将Azure blob中的视频流传输给桌面浏览器和移动浏览器上的用户 到目前为止,我已经构建了一个ASP.NETMVC应用程序,为网站提供服务,并构建了一个WebApi服务,可以推送StreamContent。这在Chrome和桌面的Edge上都非常有效。但当我试图在移动设备上打开它时,Chrome、Safari和Firefox都无法播放 到目前为止,我的代码是: MVC项目之我见 <video id="vPlayer" c

我想通过ASP.NET MVC web应用程序将Azure blob中的视频流传输给桌面浏览器和移动浏览器上的用户

到目前为止,我已经构建了一个ASP.NETMVC应用程序,为网站提供服务,并构建了一个WebApi服务,可以推送StreamContent。这在Chrome和桌面的Edge上都非常有效。但当我试图在移动设备上打开它时,Chrome、Safari和Firefox都无法播放

到目前为止,我的代码是:

MVC项目之我见

<video id="vPlayer" class="video-js" autoplay controls playsinline preload="auto" data-setup='{"fluid": true}'poster="@ImgManager.GetVideoImgUrl(Model.ThumbnailUrl)">
<source src="//xyz.nl/api/Videos/Get?filename=340a85a3-ccea-4a2a-bab6-74def07e416c.webm&type=video%2Fwebm" type="video/webm">
<source src="//xyz.nl/api/Videos/Get?filename=340a85a3-ccea-4a2a-bab6-74def07e416c.mp4&type=video%2Fmp4" type="video/mp4">
webAPI上的Helper

public class VideoStream
    {
        private readonly string _filename;

        public VideoStream(string fileName)
        {
            _filename = fileName;
        }



        public async Task WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
        {
            try
            {
                var storage = new AzureMainStorage("avideo");
                byte[] file = await storage.GetFileAsync(_filename);

                var buffer = new byte[65536];

                using (var video = new MemoryStream(file))
                {
                    var length = (int)video.Length;
                    var bytesRead = 1;

                    while (length > 0 && bytesRead > 0)
                    {
                        bytesRead = video.Read(buffer, 0, Math.Min(length, buffer.Length));
                        await outputStream.WriteAsync(buffer, 0, bytesRead);

                        length -= bytesRead;
                    }
                }
            }
            catch (HttpException ex)
            {
                Utilities.LogErrorToDb(ex);
                return;
            }
            finally
            {
                outputStream.Close();
            }

        }

    }
}

因此,在尝试了一段时间后,我把自己的问题从微软witch的这篇文章中完全解决了

以下是对我有用的代码:

public HttpResponseMessage Get(string filename, string type)
{
     MemoryStream stream = new MemoryStream(new AzureMainStorage("avideo").GetFile(filename));

     HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
     partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, "video/mp4");
     return partialResponse;  
}
还请检查此有用的链接:
public HttpResponseMessage Get(string filename, string type)
{
     MemoryStream stream = new MemoryStream(new AzureMainStorage("avideo").GetFile(filename));

     HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
     partialResponse.Content = new ByteRangeStreamContent(stream, Request.Headers.Range, "video/mp4");
     return partialResponse;  
}