5

Witajcie, chcę przesłać strumieniowo wideo z mojego blobu Azure za pośrednictwem aplikacji internetowej ASP.NET MVC do użytkowników w przeglądarkach komputerowych i oczywiście przeglądarkach mobilnych.Strumieniowe przesyłanie wideo MVC do przeglądarek mobilnych

Do tej pory zbudowałem aplikację ASP.NET MVC, która obsługuje stronę internetową i usługę WebApi, która ma wartość PushStreamContent. Działa to świetnie w Chrome i Edge na pulpicie. Ale wen próbuję otworzyć go na urządzeniu mobilnym Chrome, Safari, Firefox po prostu nie gra.

mój kod do tej pory:

Widok projektu 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

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

     } 

    } 
} 

Odpowiedz

1

Po pewnym czasie wypróbowania różnych rzeczy wpadłem do tego artykułu z Microsoftu, który doskonale rozwiązał mój problem. Link to article

Oto kod, który pracował dla mnie:

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

również sprawdzić ten przydatny link: http://stackoverflow.com/questions/39834714/video-not-playing-on-ios10-chrome? answerertab = najstarszy # tab-top –

Powiązane problemy