- 主页
- 智能标签
- 智能拆条
- 智能唱词
- 人脸检测
- 内容库
- 概况
- 用户管理
- 开发者支持
- 帮助
视频信息
视频名称
{{ video_name }}
视频大小
{{ video_size}}
视频长度
{{ video_dur}}
创建时间
{{ video_ctime}}
视频描述
暂无
本次更新主要更新一个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调度管理平台 打开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+"
- 主页
- 智能标签
- 智能拆条
- 智能唱词
- 人脸检测
- 内容库
- 概况
- 用户管理
- 开发者支持
- 帮助
视频信息
视频名称
{{ video_name }}
视频大小
{{ video_size}}
视频长度
{{ video_dur}}
创建时间
{{ video_ctime}}
视频描述
暂无
" " ".format(each[0],each[1],each[2],each[3],each[0]) myDict["data"]=html return HttpResponse(json.dumps(myDict), content_type="application/json") 测试一下: 视频播放界面已成功创建! 如果文章帮助到了您,可否给一个点赞关注收藏呢~ 如果遇到编程上的问题,欢迎留言哦~ 关注作者回复:aiweb,获取源码下载地址哦~{} " "{} " "{} " "{} " "" " 查看详情