因为后端返回的是视频的文件流,并不是视频文件地址。后端返回流的时候要为header设置一些参数,否则部分浏览器会出现问题(如Google Chrome...)。

django中常用返回文件流写法:

class VideoAPIView(APIView):"""视频视图  - 参数位置:查询参数- 请求参数:- 路径参数:- `id`: 文件id 必传- 成功返回参数:```文件下载到本地```- 失败返回参数:```{"rtCode": 0,"rtMsg": "异常信息","rtData": ""}```"""def get(self, request, file_info_id):try:contents_post = {"query": {"match": {"_id": file_info_id}},"script": {"source": "ctx._source['visits_nums'] = ctx._source['visits_nums']+1"}}elasticsearch.update_by_query(index=constants.ELASTICSEARCH_INDEX, body=contents_post)fileinfo_obj = models.FileInfo.objects.filter(file_info_id=file_info_id, delete_flag=FileInfo.DeleteFlagEnum.NOT_DELETE.value, file_type=FileInfo.FileTypeEnum.VIDEO.value)video_name = fileinfo_obj.first().file_urlexcept models.FileInfo.DoesNotExist:raise exceptions.ValidationError("数据不存在")photo_path = constants.VIDEO_PATHfile_url_path = os.path.join(photo_path, video_name)file_size = os.path.getsize(file_url_path)response = FileResponse(open(file_url_path, 'rb'))response['Content-Length'] = str(file_size)response['Content-Type'] = 'application/octet-stream'response['Content-Disposition'] = "attachment; filename={}".format(urlquote(video_name))return response

这么写对于返回视频文件流,前端使用video标签展示时,就会出现部分浏览器无法拖动进度条快进问题。

解决:在返回的header中添加Content-Range和Accept-Ranges参数

class VideoAPIView(APIView):"""视频视图- 参数位置:查询参数- 请求参数:- 路径参数:- `id`: 文件id 必传- 成功返回参数:```文件下载到本地```- 失败返回参数:```{"rtCode": 0,"rtMsg": "异常信息","rtData": ""}```"""def get(self, request, file_info_id):try:contents_post = {"query": {"match": {"_id": file_info_id}},"script": {"source": "ctx._source['visits_nums'] = ctx._source['visits_nums']+1"}}elasticsearch.update_by_query(index=constants.ELASTICSEARCH_INDEX, body=contents_post)fileinfo_obj = models.FileInfo.objects.filter(file_info_id=file_info_id, delete_flag=FileInfo.DeleteFlagEnum.NOT_DELETE.value, file_type=FileInfo.FileTypeEnum.VIDEO.value)video_name = fileinfo_obj.first().file_urlexcept models.FileInfo.DoesNotExist:raise exceptions.ValidationError("数据不存在")photo_path = constants.VIDEO_PATHfile_url_path = os.path.join(photo_path, video_name)file_size = os.path.getsize(file_url_path)response = FileResponse(open(file_url_path, 'rb'))response['Content-Length'] = str(file_size)response['Content-Type'] = 'application/octet-stream'response['Content-Range'] = f'bytes 0-{str(file_size)}/{str(file_size)}'response['Accept-Ranges'] = 'bytes'response['Content-Disposition'] = "attachment; filename={}".format(urlquote(video_name))return response

关于Content-Range参数

用于响应头中,在发出带 Range 的请求后,服务器会在 Content-Range 头部返回当前接受的范围和文件总大小。一般格式:

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

例如:

Content-Range: bytes 0-499/22400

0-499 是指当前发送的数据的范围,而 22400 则是文件的总大小。

而在响应完成后,返回的响应头内容也不同:

HTTP/1.1 200 Ok(不使用断点续传方式) 
HTTP/1.1 206 Partial Content(使用断点续传方式)

关于前端video标签视频无法拖动进度条快进问题(Django)相关推荐

  1. uniapp实现video视频禁止拖拽快进功能,禁止拖动进度条快进

    之前写了一篇文章 , 禁止快进的 , 但刚刚发现在uni-app中实现不了 , 所以又上网找别的方法,话不多说, 上代码 一 , template中 <video id="myVide ...

  2. video视频标签怎么禁止用户拖动进度条快进

    昨天经理给我一个需求 , 让我查一下h5播放视频怎么禁止用户快进, 然后刚刚搜了下, 实现了出来,代码如下 , 效果就是我点进度条想快进的话 , 会强制退回去, 这样用户就不能快进了 <body ...

  3. 异常:谷歌浏览器video标签播放视频不能拖动进度条

    谷歌浏览器video标签播放视频不能拖动进度条 当前端video的src不是直接使用视频文件的地址,而是通过后台下载接口返回文件流时,后台返回流因为没为response的header设置一些参数,会在 ...

  4. 直接修改html代码视频进度,HTML5实现video标签的自定义播放进度条

    现在随着html5的渐热,越来越多的web开发者都开始选择使用html5写出一些比较好的web应用. html代码: HTML5-Video-Player .videoPlayer{ border: ...

  5. html如何设置视频不能拖动,video标签播放视频不能拖动进度条(示例代码)

    因为你的video的src不是直接使用视频文件的地址,而是通过后台接口返回文件流,后台返回流的时候没为response的header设置一些参数,否则会在部分浏览器有问题 String rangeSt ...

  6. 【网页上视频无法拖动进度条,如何进行加速播放操作以及网页失焦后如何可继续播放】

    面对网页视频无法加速时如何进行加速播放 遇到一 zhengzhi 刷题任务时 ,发现无法拖动进度条,也没有加速播放并且鼠标一失焦就会自动暂停时,让我乖乖看完是不可能,因此找了一个解决方案快速完成该任务 ...

  7. JS video 禁止拖动进度条

    需要实现一个效果,视频加载的过程中禁止拖动进度条快进. 开始呢我想着把控件禁掉,自动播放解决. <video id="video" src="http://kuan ...

  8. video播放器禁用or启用拖动进度条

    做视频教育网站 客户提出一个需求: 视频学习完毕时,在观看视频能够拖动进度条.未观看完毕时,禁止拖动视频进度条,只能倍速播放; 用的插件的 videojs一开始用的是 disableProcess.j ...

  9. 【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )

    文章目录 I . FFMPEG 播放进度控制 II . FFMPEG 播放视频 ( 效果展示 ) III . FFMPEG 获取视频时长 IV . FFMPEG 视频播放进度获取 V . FFMPEG ...

最新文章

  1. Hardware Error 内存报错
  2. Struts2漏洞导致的反弹shell——青藤云安全使用的是agent进程采集器进行检测
  3. 获得主机域名及其IP和Port端口
  4. 网易云信欢乐颂(送),领取“五美”送麻麻
  5. 使用Redis set 解决数据的唯一性问题
  6. 关于导入c3p0-0.9.5.5.jar包引发NoClassDefFoundError、ClassNotFoundException
  7. 图论 —— 弦图 —— LexBFS 算法
  8. 利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件
  9. java interface 默认_Java8 接口interface默认方法
  10. vue el-tree 同时向后台传递选中和半选节点数据 (回显数据勾选问题已解决)
  11. 华为鸿蒙系统即将面世,华为鸿蒙系统即将面世,鸿蒙在这些方面比安卓更优秀,你期待吗?...
  12. Java并发容器--ConcurrentLinkedQueue
  13. php给img标签加alt属性
  14. GNU 软件文档下载
  15. 前窗玻璃膜贴了一周还有气泡_新车前挡风玻璃贴膜后有气泡几天能下去
  16. 加油站踩踏式逃亡?电网成大赢家?时代抛弃你的时候,真的一声不吭
  17. win10升级后蓝牙不见了,设备管理器里没有,多了个串行控制器里的未知USB设备?...
  18. 2020-2021年度第2学期课程回顾总结
  19. 2022广州大学计算机网络实验--Windows网络测试工具
  20. udp2raw android,关于udpspeeder和udp2raw部署的一些补充,及使用体会

热门文章

  1. 用matlab做谱分析程序,经典功率谱分析Matlab程序
  2. 初识基于搜索的软件工程
  3. 数据库系统概论:判别一个分解的无损连接性
  4. Hbase学习中遇到的问题
  5. 侍魂胧月传说显示服务器满了,侍魂胧月传说:满物防攻略,仅供参考
  6. 4年!我对OpenStack运维架构的总结
  7. 日常生活中常用的五星级句子
  8. LaTeX中文生僻字显示
  9. 解:一阶齐次或非齐次线性微分方程-详细推导
  10. 手把手带你打造自己的UI样式库(第三章)之常用样式组件的设计与开发