范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

从零开始打造云端AI管理调度平台(番外篇2)视频播放器

  本次更新主要更新一个HTML5视频播放器,用于在内容库当中的视频查看以及后续的智能处理结果查看。
  视频播放一定要采用流式传输
  为什么在文章刚开头我就要强调这一点。
  因为很多新手小白在创建video标签时,会直接填写文件的路径,如下: 
  这样可以播放视频吗?
  当然可以!
  但是这样会带来一个很严重的问题
  当你拖动进度条至未缓存部分时,你的视频会直接重新播放
  而我们想实现的效果是拖动到哪里,视频从哪里开始播放
  所以我们需要采用流式传输
  如何实现流式传输
  打开views.py,创建两个函数如下: from wsgiref.util import FileWrapper from django.http import StreamingHttpResponse import mimetypes import os import re   #以下两个方法实现视频流式传输 def file_iterator(file_name, chunk_size=8192, offset=0, length=None):     with open(file_name, "rb") as f:         f.seek(offset, os.SEEK_SET)         remaining = length         while True:             bytes_length = chunk_size if remaining is None else min(remaining, chunk_size)             data = f.read(bytes_length)             if not data:                 break             if remaining:                 remaining -= len(data)             yield data def stream_video(request):     path=request.GET["video_path"]     range_header = request.META.get("HTTP_RANGE", "").strip()     range_re = re.compile(r"bytess*=s*(d+)s*-s*(d*)", re.I)     range_match = range_re.match(range_header)     size = os.path.getsize(path)     content_type, encoding = mimetypes.guess_type(path)     content_type = content_type or "application/octet-stream"     if range_match:         first_byte, last_byte = range_match.groups()         if first_byte:             first_byte = int(first_byte)         else:              first_byte = 0         last_byte = first_byte + 1024 * 1024 * 8 # 8M per piece, the maximum volume of the response body         if last_byte > size:             last_byte = size - 1         length = last_byte - first_byte + 1         resp = StreamingHttpResponse(file_iterator(path, offset=first_byte, length=length), status=206, content_type=content_type)         resp["Content-Length"] = str(length)         resp["Content-Range"] = "bytes %s-%s/%s" % (first_byte, last_byte, size)     else:         resp = StreamingHttpResponse(FileWrapper(open(path, "rb")), content_type=content_type)         resp["Content-Length"] = str(size)     resp["Accept-Ranges"] = "bytes"     return resp
  然后打开urls.py,创建视频流的地址 from django.contrib import admin from django.urls import path from mainbody.views import *   urlpatterns = [     path("admin/", admin.site.urls),     path("", index),     path("content_storage/", content_storage),     path("get_content_media/", get_content_media),     path("ai_cut/", ai_cut),     path("ai_cut_taskCreate/",ai_cut_taskCreate),     path("stream_video/", stream_video), ]
  创建视频播放界面
  创建check_video.html文件:                                   AI调度管理平台                                                       
AI调度管理平台
  • 主页
  • 智能标签
  • 智能拆条
  • 智能唱词
  • 人脸检测
  • 内容库

  • 概况
  • 用户管理
  • 开发者支持
  • 帮助
"mdo"
  • 个人信息
  • 安全凭证
  • 钱包

  • 退出登录

视频信息

视频名称

{{ video_name }}

视频大小

{{ video_size}}

视频长度

{{ video_dur}}

创建时间

{{ video_ctime}}

视频描述

暂无

  打开views.py,创建check_video函数,该函数用来渲染视频播放界面: #内容库查看视频详情页 def check_video(request): if(request.method=="GET"): video_id=int(request.GET["id"]) video_info=content_media.objects.filter(id__exact=video_id) video_name=video_info[0].name video_size=video_info[0].size video_dur=video_info[0].duration video_ctime=video_info[0].create_time video_path="/stream_video/?video_path=content_mediaoriginaizou0629_"+video_name data={ "video_name":video_name, "video_size":video_size, "video_dur":video_dur, "video_ctime":video_ctime, "video_path":video_path } return render(request, "check_video.html",data)   打开urls.py,创建视频播放界面的地址 "check_video/": from django.contrib import admin from django.urls import path from mainbody.views import * urlpatterns = [ path("admin/", admin.site.urls), path("", index), path("content_storage/", content_storage), path("get_content_media/", get_content_media), path("ai_cut/", ai_cut), path("ai_cut_taskCreate/",ai_cut_taskCreate), path("check_video/", check_video), path("stream_video/", stream_video), ]   修改内容库渲染函数   主要用于定义内容库每条视频最后面的查看详情的功能,代码如下: #返回内容库数据库 def get_content_media(request): myDict = {"data": []} conn=pymysql.connect(host="localhost", user="root", password="",#输入你的数据库密码 database="test") cursor=conn.cursor() sql="select * from mainbody_content_media order by create_time DESC" cursor.execute(sql) result=cursor.fetchall() html="" for each in result: html=html+"" "{}" "{}" "{}" "{}" "" "查看详情".format(each[0],each[1],each[2],each[3],each[0]) myDict["data"]=html return HttpResponse(json.dumps(myDict), content_type="application/json")   测试一下:   视频播放界面已成功创建!   如果文章帮助到了您,可否给一个点赞关注收藏呢~   如果遇到编程上的问题,欢迎留言哦~   关注作者回复:aiweb,获取源码下载地址哦~

外媒评选的2021年十项最佳手机,结果很意外,国产手机仅一款入选今天的智能手机都具有令人难以置信的移动体验,可帮助您在远离办公室现场以及任何地方完成工作或者休闲娱乐。当然,人们对手机也有了更高的要求。有些智能手机在摄影方面表现出色,有些手机可以金蝶用友,舞剑SaaS配图来自Canva可画在百花齐放的ERP(企业资源管理)市场,一直有这样一个说法叫南金蝶,北用友。金蝶指的就是总部定在深圳的金蝶国际,用友指的是地处北京的用友网络,从这句略带江湖气终于有人把Docker讲清楚了,Docker入门教程,原来这么简单Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的机器上。Docker的迅猛发展和全新理念,席卷了新骁龙8发布后饱受关注,全新5G基带和GPU,各方面体验升级不久前,高通正式宣布骁龙品牌正式独立,吸引了许多人的目光。高通骁龙是大家非常熟悉的叫法,为何高通要把骁龙独立出来呢?这也引起了大众的许多讨论。实际上,高通如今的骁龙芯片已经不局限于国芯科技IPO注册成功助力高端芯片国产化替代2021年12月7日,证监会发布消息,其按法定程序同意苏州国芯科技股份有限公司(以下简称国芯科技)科创板首次公开发行股票注册。根据招股书显示,国芯科技是一家聚焦于国产自主可控嵌入式2021年12月29日雷军回应小米对标苹果遭冷嘲热讽信号自拍等遥遥领先12月28日,小米正式发布小米12系列手机。其中,小米12为小屏旗舰,6。28英寸,售价3699元起小米12Pro为6。73英寸大屏支付宝相互宝关停,监管不背这个锅作为最早加入相互宝的一批用户,相互宝如今这个结局,只能用一句话,一切都是最好的安排,但监管肯定不能背这个锅!当初加入相互宝,最主要的原因就是想看看,这场伟大的社会实践会是怎样的发展苹果将在2023年为iPhone取消SIM卡槽最近,据外媒的爆料消息,苹果将在2023年推出的iPhone上取消实体SIM卡槽设计,成为首款完全采用eSIM的无实体SIM卡机型。苹果在iPhoneXS系列中采用了双卡双待设计,机构预测未来三年增速最高的数字经济核心龙头股十四五国家信息化规划发布本次国家信息规划数字经济被重点提及,今后三年将进入快速增长期。数字经济包括了四个角度,分别是数字产业化产业数字化数字化治理和数据价值化。从根本的业绩来看机构一部手机最多能用几年?现代人对手机的依赖程度也越来越高,已经是我们必不可少的物品。现在手机更新换代的频率也越开越快了,正常使用手机的话,多久更换一款手机才算耐用呢?其实一部手机最多能用几年?这是没有一个韬光养晦!大陆资本豪掷93亿拿下半导体巨头,下个会是台积电吗?张汝京半导体领域某些方面我们中国是很强的,就好比测试封装这一块。此前被人们冠以中国半导体之父的张汝京在一次采访中谈起了国产芯片的发展现状,结合了当下的国内半导体行业的各个生产环节给
OPPOK9值得买的六个原因,对比红米K40谁更值?什么是对K套装?什么是对K套装?如果你想知道,什么是对K套装的话,我现在就带你研究。骁龙768G的手机,竟然可以卖到1999,还有那么多小伙伴对它感兴趣。所以今天这期视频,我就随便华为鸿蒙OS又出事儿了!鸿蒙商标注册被驳回,或将被迫改名2019年至今,因为一些特殊的原因,华为一直在美国实体清单的困境之中挣扎,在层层禁令的限制之下,华为无奈只能推出自己准备了10年的备胎计划鸿蒙OS操作系统。这个操作系统发布以来一直外国人明明按照中国菜谱一步步来的,为什么会做成这德行?本文章已经通过区块链技术进行版权认证,禁止任何形式的改编转载抄袭,违者追究法律责任中国的美食文化在世界上一直都占有一席之地,这几年更是由于我们国家与国际间的联系进一步加强,许多国家赔偿2。1亿!苹果遭遇三连败!高通和苹果旷日持久蔓延全球的专利大战的天平开始逐渐向高通一方倾斜。过去几个月,中国和德国的专利法院都裁定苹果侵犯高通的非标准必要专利,并针对侵权的iPhone设备颁发了禁令。现在,中国联通2019年将全网开通VoLTE,确保5G时代提供高质量语音通话201903180854稿源站长之家0条评论站长之家(ChinaZ。com)3月18日消息日前,中国联通公布了2019年资本开支预算约为580亿元人民币(含5G试验资本开支6080Redis实现分布式锁的正确方式原理分析最近看到好多博主都在推分布式锁,实现方式很多,基于dbrediszookeeper。zookeeper方式实现起来比较繁琐,这里我们就谈谈基于redis实现分布式锁的正确实红米明天见!自称无敌的存在!荣耀魅族是不是慌了?红米明天见!自称无敌的存在!另有跨领域新品发布!众所周知,在明天,也就是3月18日,下午2点,红米Redmi将要举行2019年的春季新品发布会。目前,官方也公布了相关发布会的众多看枪击案凶手为何能直播杀戮?新西兰总理要求脸谱回答新西兰克莱斯特彻奇发生枪击事件已造成50人死亡50人受伤。(图源路透社)海外网3月17日电当地时间3月15日下午,新西兰克莱斯特彻奇发生枪击事件,已造成50人死亡50人受伤。事发同折叠屏手机为什么不便宜?开拓一个新技术并不便宜。目前,三星GalaxyFold,华为MateX,甚至柔宇的RoyoleFlexPai可折叠式手机都已经正式发布,虽然大部分可折叠屏式手机暂未大规模发售,但是天猫官宣向全行业开放信用购!网友这个厉害了!说起淘宝,大家想到的就是网购剁手,而网购对于大多数的人也都是再熟悉不过了,网购最大的好处就是便捷,但有利也有弊,利的是手机在手天下我有,弊的就是购买到的商品与想象中的不一样,很多人小米PocophoneF2曝光,可能是最便宜的骁龙855手机点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事!去年小米在印度发布了一款超级廉价的骁龙845手机PocophoneF1,在印度的手机折合人民币仅为