5

Xin chào các bạn, tôi muốn truyền phát video từ Azure blob của mình qua ứng dụng web ASP.NET MVC tới người dùng trên trình duyệt trên máy tính để bàn và tất nhiên là trình duyệt trên thiết bị di động.MVC Phát trực tuyến video tới trình duyệt web di động

Những gì tôi có cho đến nay là một Ứng dụng ASP.NET MVC phục vụ trang web và dịch vụ WebApi sẽ PushStreamContent. Điều này hoạt động tuyệt vời trên Chrome và Edge trên máy tính để bàn. Nhưng wen tôi cố gắng để mở nó trên một thiết bị di động Chrome, Safari, Firefox nó sẽ không chơi.

My Mã cho đến nay:

Quan điểm về dự án 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"> 

Các WebAPI

public HttpResponseMessage Get(string filename, string type) 
     { 
      var video = new VideoStream(filename); 
      var response = Request.CreateResponse(); 

      response.Content = new PushStreamContent(video.WriteToStream, new MediaTypeHeaderValue(type)); 

      return response; 
     } 

Helper trên WebAPI

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(); 
      } 

     } 

    } 
} 

Trả lời

1

Vì vậy, sau một thời gian, hãy thử các công cụ khác nhau mà tôi dumpt vào bài viết này từ Microsoft phù thủy giải quyết vấn đề của tôi một cách hoàn hảo. Link to article

Đây là mã mà làm việc cho tôi:

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; 
} 
+0

Ngoài ra kiểm tra liên kết hữu ích này: http://stackoverflow.com/questions/39834714/video-not-playing-on-ios10-chrome? answerertab = cũ nhất # tab-top –

Các vấn đề liên quan