2017-02-08 3 views
0

В настоящее время ситуация с iOS (10.2.1) не требует запроса видео с байтом в элементе HTML-видео: он хочет загрузить все видео прежде чем он начнет играть. Естественно, это смешно для большого видеофайла, а на 4G-подключении - у кого-нибудь была эта проблема?iOS и потоковая передача видеопотока не работает

Использование Web API 2 для потоковой передачи контента -

  string mapped = HostingEnvironment.MapPath(vmApplication.Instance.VideoPath); 
      string filename = Path.Combine(mapped, name); 
      string ext = System.IO.Path.GetExtension(filename)?.ToLower().Trim('.'); 
      string contentType = MimeMapping.GetMimeMapping(filename); 
      switch (ext) 
      { 
       case "webm": contentType = "video/webm"; break; 
       case "mp4": contentType = "video/mp4"; break; 
       case "ogg": contentType = "video/ogg"; break; 
      } 
      MediaTypeHeaderValue _mediaType = MediaTypeHeaderValue.Parse(contentType); 


      FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); 
      if (Request.Headers.Range == null) 
      { 
       Request.Headers.Range = new RangeHeaderValue(0, null); 
      } 
      try 
      { 

       HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent); 
       ByteRangeStreamContent content = new ByteRangeStreamContent(fs, Request.Headers.Range, _mediaType, VIDEOBUFFER); 
       partialResponse.Content = content; 
       return partialResponse; 
      } 
      catch (InvalidByteRangeException invalidByteRangeException) 
      { 
       return Request.CreateErrorResponse(invalidByteRangeException); 
      } 

HTML-элемент довольно основной, используя videojs

<video id="video-1" controls preload="none" data-setup='{ "fluid": true }' poster="@Url.Content("~/Content/images/poster/video-1.jpeg")" class="video-js vjs-default-skin vjs-big-play-centered"> 
     <source src="@Url.RouteUrl("DefaultApi",new {httproute = "", id = "File", controller = "Video", name = "video-1.webm" })" type='video/webm' /> 
     <source src="@Url.RouteUrl("DefaultApi",new {httproute = "", id = "File", controller = "Video", name = "video-1.mp4" })" type='video/mp4' /> 
     <source src="@Url.RouteUrl("DefaultApi",new {httproute = "", id = "File", controller = "Video", name = "video-1.ogg" })" type='video/ogg' /> 
     <p class="vjs-no-js"> 
      To view this video please enable JavaScript, and consider upgrading to a web browser that 
      <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> 
     </p> 
    </video> 

не повезло вообще с этим, любая помощь будет высоко оценена

ответ

1

У FFmpeg есть опция (-movflags + faststart) для предварительного рендеринга видеофайла и воспроизведения его при загрузке. Проверьте, имеет ли ваш конвертер аналогичный вариант.

Вы можете попробовать преднагрузки = «авто» или поджать = «метаданные»

Кроме того, проверьте, если запрос HTTP и заголовки ответов содержит параметр Range. Если запрос и ответ не совпадают, это означает неправильную настройку IIS в байтовом диапазоне.

Надеюсь, это поможет.