谷歌浏览器中video播放视频进度条无法拖动,一点击进度条就回到0重新播放

本文主要是介绍谷歌浏览器中video播放视频进度条无法拖动,一点击进度条就回到0重新播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题:一个.mp4视频进度条无法拖动,只在谷歌浏览器中有问题,火狐中没有问题,console也不报错。

初步排查到的bug原因:与Video标签适配的请求响应有问题。

无法拖动的视频响应截图如下:

能正常拖动的视频响应截图如下:

如何去解决:

1.Chrome浏览器默认请求会在 Header 添加一个Range如下:服务器要做的就是响应这个Header

Range:             bytes=0-

 2.服务器接收到这个Header以后,响应的Header如下,同时需要设置状态码为206:

Accept-Ranges: bytesContent-Length: 2097152Content-Range: bytes 0-2097151/38696534

3.百度了个服务端设置响应的代码,如下(我不太懂后台代码,仅供参考,有更好的解决方案,欢迎大家留言哈~):

    public ActionResult Video(Guid id){//数据库存储的文件路径var archive = ManagerFactory.ArchiveManager.GetVideoArchive(id);//物理绝对路径var path = Server.MapPath("~/" + archive.Path);//设置响应头HttpContext.Response.Headers.Add("Accept-Ranges", "bytes");//判定是否响应Chrome中的Range请求var rangeQuery = HttpContext.Request.Headers["Range"];if (rangeQuery.IsNotNullAndNotEmpty()){//startIndex 与 endIndex 是索引值,是0开始的,注意在与 Length 比较的时候 Length 要 -1var startIndex= 0;//视频每节长度为2MBvar length = 2 * 1024 * 1024;var range = rangeQuery.Split('=')[1].Split('-');startIndex= range[0].ParseToInt();var endIndex = startIndex + length - 1;var fileLength = (int)archive.Length;//是否指定了索引终结点if (range[1].IsNotNullAndNotEmpty()){endIndex = range[1].ParseToInt();}if (endIndex <= startIndex ){endIndex = startIndex + length - 1;}if (endIndex > fileLength - 1){endIndex = fileLength - 1;}//关键设置HttpContext.Response.Headers.Add("Content-Range", $"bytes {startIndex}-{endIndex}/{archive.Length}");//关键设置HttpContext.Response.StatusCode = 206;//按照索引读取文件流using (var fs = System.IO.File.OpenRead(path)){var buffer = new byte[endIndex - startIndex + 1];fs.Position = startIndex ;fs.Read(buffer, 0, buffer.Length);return File(buffer, archive.ContentType);}}//如果未设置则返回整个文件return File(path, archive.ContentType);}

 

这篇关于谷歌浏览器中video播放视频进度条无法拖动,一点击进度条就回到0重新播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933133

相关文章

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin