繁体   English   中英

iOS和字节范围的视频流不起作用

[英]iOS and byte range video streaming not working

当前,iOS(10.2.1)不想在HTML video元素中请求字节范围内的视频,它希望在开始播放之前先下载整个视频。 对于大型视频文件,在4G连接上,这自然是荒谬的-有谁遇到过这个问题?

使用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>

一点都不运气,任何帮助将不胜感激

FFmpeg提供了一个选项(-movflags + faststart)以预渲染视频文件并在加载时播放。 检查您的转换器是否具有类似的选项。

您可以尝试preload =“ auto”或preload =“ metadata”

另外,检查http请求和响应标头是否包含Range参数。 如果请求没有响应,则表示Byte-Range上的IIS设置错误。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM