在线视频点播系统分析与设计.docx
《在线视频点播系统分析与设计.docx》由会员分享,可在线阅读,更多相关《在线视频点播系统分析与设计.docx(29页珍藏版)》请在冰豆网上搜索。
![在线视频点播系统分析与设计.docx](https://file1.bdocx.com/fileroot1/2023-1/25/c14b23c7-6c75-4287-a48b-94dda6aa1763/c14b23c7-6c75-4287-a48b-94dda6aa17631.gif)
在线视频点播系统分析与设计
【摘要】随着经济和科技的高速发展,人们的生活水平也迅速的提高,伴随着是人们的生活方式也在潜移默化的改变着,人们的生活节奏在不断的加快,越来越多的时间花在工作和人际上,而相对的自己娱乐时间越来越少。
对于这种改变,在线视频点播系统悄然而生,并且迅速被人们所接受和喜爱。
本课题主要采用的设计语言是java,所设计的在线视频点播系统最终达成包括用户模块、视频文件上传、注册、登录等功能和管理员模块、视频审核,发布、用户管理等功能。
【关键词】视频点播;java;html;SQLserver2005;
1绪论
1.1背景及意义
伴随着中国经济的快速发展,人们的生活节奏加快,生活方式简单快速化,人们的娱乐休闲时间越来越少,在传统的电视节目中,人们完全是被动的,节目提供者在什么时间段播放什么样的节目,人们就得按照节目提供者给得时间段去看相应的节目。
这已经满足不了人们的需求,对于现在的生活节奏,人们已经不可能为了看一个节目而预先安排自己的时间。
人们都希望能够随时的看自己想要看的节目。
在线视频点播系统就是为了满足现在人们的需求。
这种信息服务方式符合现在人们对信息资源的更深层次的要求。
2相关技术和开发环境
2.1系统架构
本系统主要采用MVC架构的设计模式。
这种模式主要是把一个应用分成三部分设计的方式,使用这种模式会让程序设计更加的简单,也让耦合程度减至最小。
视图(v)在本系统中也就是页面,用于展示数据和传递数据,没有处理在这里发生作为视图来讲。
模型(M)表示企业提供的一些处理数据的逻辑。
模型主要用来处理用户从界面传来的数据,它能够处理多个视图提供过的数据,并且能够被重复使用,提高了性能,减少了代码的重复性,有利于后期的维护。
控制器(C)可看作第三方,主要是调用视图和模型的作用。
它在这个过程中担任的只是指路的作用,看是要选择哪个视图和模型。
2.2关键技术
2.2.1JDBC
JDBC是为访问数据库而出现的一种JAVA技术,不同的数据库都有其对应的JDBC,不过他们的原理大都是一致的。
它的作用就是为了让程序员更容易的去访问数据库和对数据进行增删改查的操作。
它包含两部分:
第一部分是提供给程序员使用的API,大部分API位于Java.sql包中,扩展的部分API位于Javax.sql包中。
程序员只要熟悉JDBCAPI,就可以编写程序访问数据库、操作数据库的记录,而且操作不同的数据库代码几乎相同。
当然对于不同的数据库我们需要用的不同数据库驱动包来完成对数据库的连接。
2.2.2Jquery
Jquery是对JavaScript的封装,它简化了JavaScript语法具有很好的平台兼容性,因此极大的方便了开发人员操作DOM、更多的制作网页动画的函数、使用Ajax无刷新技术使得网页制作更加的简单功能效果更加的强大。
Jquery具有的优势:
轻量级、强大的选择器、出色的DOM操作的封装、可靠的事件处理机制、完善的Ajax、出色的浏览器兼容性、开源等。
[1]
2.2.3HTML5video标签
在html5中,增加了〈video〉标签用于在网页中嵌入视频播放功能。
通过
video元素支持三种视频格式如图2.2.3:
图2.2.3视频格式[2]
(1)
图2.2.3
(1)标签属性[2]
2.3开发环境及平台
2.3.1Eclipse
Eclipse是一种免费的开发平台(IDE),现在主要用于开发JAVA程序的工具,当然它也可以用于开发其他语言程序如C/C++、COBOL等,Eclipse之所以可以做到这样归功于它是开源的并具有众多的插件。
Eclipse已经超越了开发环境的概念,它的目标是做成一个通用的平台,让尽量多的软件做为插件集成在上面,成为未来的集成的桌面环境。
[3]
Eclipse环境搭建:
JDK的安装
在系统变量中添加以下环境变量:
a.JAVA_HOME值为:
安装JDK的目录;
b.CLASSPATH值为:
.;%JAVA_HOME%lib;
c.PATH值为:
%JAVA_HOME%bin;%JAVA_HOME%jrebin
2.3.2MyEclipse
MyEclipse是EclipseIDE的扩展,利用它我们能极大的提高工作效率在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面。
它通常是用于开发JAVA的工作平台是一种企业级应用。
MyEclipse是功能丰富的JavaEE集成开发环境,包括了完备的编码,调试、测试和发布功能,完整支持HTML,Struts,jsp,css,JavaScript,Spring,SQL,Hibernate。
[4]
在本课题设计中,将使用MyEclipse进行开发。
2.3.3Tomcat服务器
Web服务器也有很多种,在本系统中只是简单的Web应用,所以选用Tomcat作为服务平台。
它占用资源少,稳定且免费并且是独立运行的,有很好的扩展性和安全性,但它对J2EE的EJB程序无法运行,如果你要运行J2EE的EJB程序可使用Weblogic,WebSphere服务器。
只要你把做好的项目布置到上面,就能够通过浏览器访问你想要访问的地址网页。
2.3.4SQLServer2005
SQLServer是一个数据库平台,它的为了解决大数据量时容易出现的数据混乱,容易丢失,不会管理,不好操作等开发的一种软件,它的出现极大的方便了那些需要对大数据量的进行操作的用户。
SQLServer2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
[5]
本系统采用SQLServer2005版本用于数据的存储、处理和保护数据。
3在线视频点播系统分析与设计
3.1需求分析
3.1.1系统目标
开发出一个功能实用,优秀的网站,为用户提供各种视频信息及交互平台,使用户能够在快节奏的生活环境中,在有条件的情况下能够随时的观看自己想要观看的视频,并且也能够成为视频的提供者,分享自己觉得好的视频。
3.1.2可行性分析
随着人们生活节奏的加快,快餐式的文化越来越突出,人们不能够随心的安排自己的时间观看自己想要的视频信息,在线视频点播系统,为人们提供了自主选择的功能,让用户能够随时的观看自己想要的视频,在线视频点播系统,也越来越受人们的喜爱。
它符合现在人们快餐式的生活方式。
随着视频网站的不断完善,功能的不断增加,用户数也不断的增加,所以在线视频点播系统将有很好的发展空间。
3.2在线视频点播系统概要设计
系统的概要设计主要对系统的总体功能设计,模块的划分,系统数据库如何设计进行研究。
3.2.1模块划分
本系统主要分为两部分:
1.视频点播前端(用户)
前端主要功能:
1.用户选择视频。
2.观看视频。
3.上传视频。
2.视频点播后端(管理员)
后端主要功能:
1.用户管理。
2.视频管理。
3.2.2功能模块的设计
用户权限和管理员权限,具体包括:
1.用户:
注册,登录,修改个人资料,上传视频,播放,评论,评分,搜索
2.管理员:
登录,用户管理,视频管理。
3.2.3系统功能层次模块图
图3.2.3系统功能层次模块图
3.3用户模块描述
3.3.1用户注册模块设计
校验功能有:
1.验证必填项是否有输入。
2.输入的格式是否正确。
3.两次密码是否一样,用户名是否可用。
注册成功的条件:
1.所有必填项都有填。
2.相应信息的输入格式符合条件。
3.两次密码一样。
3.3.2用户登录模块
校验功能有:
1.验证必填项是否有输入。
登录成功的条件:
1.用户名已经注册。
2.用户名和密码正确。
3.输入的验证码与随机产生的验证码一致。
图3.3.1用户注册模块流程图图3.3.2用户登录模块流程图
3.3.3个人中心
校验功能有:
1.验证必填项是否有输入。
信息修改成功的条件:
1.用户名无法修改。
2.相应信息的输入格式符合条件3.所有必填项都有填。
3.3.4视频上传
校验功能有:
1.验证必填项是否有输入。
2.输入的格式是否正确。
视频上传成功的条件:
1.视频的格式是.MP4。
2.图片格式是.Jpg。
3.视频的大小是否符合上传的大小。
图3.3.3个人中心流程图图3.3.4视频上传流程图
3.3.5视频点播
用户登录完后,跳转到首页,可进行视频的选择和点播。
用户选择视频后如果视频需要积分,则用户需扣掉相应的积分,方能观看,如果积分不够则不能观看,用户需要购买积分后再点播方能观看。
图3.3.5视频点播流程图
3.3.6评论模块
用户在观看视频的时候可以对该视频进行评论,发表对视频的看法,评论时用户必须是登录状态,评论字数不能大于500字符。
图3.3.6视频评论流程图
3.3.7视频评分模块
用户可对当前观看的视频进行评分,用户评分是需是登录状态,否则无法进行评分,最高分5分,最低分0分。
3.3.8搜索模块
该模块的功能:
1.快速搜索定位影片。
3.3.9找回密码模块
该模块的作用是:
帮助用户找回忘记的密码。
图3.3.7视频评分流程图图3.3.8搜索模块流程图
图3.3.9找回密码模块流程图
3.4管理员功能模块描述
3.4.1登录模块
校验功能有:
1.验证必填项是否有输入。
登录成功的条件:
1.用户名和密码正确。
2.输入的验证码与随机产生的验证码一致。
图3.4.1管理员登录模块流程图
3.4.2用户管理模块
用户管理模块作用:
1.对用户进行删除。
2.查看用户的评论。
3.查看用户上传的视频。
图3.4.2用户管理模块流程图
3.4.3视频管理模块
该模块管理员看查看审核通过的视频和未审核的视频并且管理员需对用户上传的视频进行审核,看是否有不良的信息,审核通过后方能发布视频,前端才能观看到该视频,否则管理员不给以发布且删除视频。
4数据库设计
4.1系统逻辑结构设计
用户表:
用户编号,用户名,密码,昵称,性别,手机号,用户积分,头像地址,真实姓名,身份证,邮箱,密保问题,密保答案,状态,权限,备注
视频表:
视频编号,用户编号,板块编号,视频标题,昵称,视频地址,视频封面,视频简介,视频积分,上传时间,播放次数,评分,视频状态,备注
评论表:
评论编号,视频编号,用户编号,评论内容,昵称,评论时间
播放列表:
播放编号,视频编号,用户编号,播放时间
板块表:
板块编号,板块名,所属主题,备注
4.2表设计
4.2.1表名的解释
Users用户表
Video视频表
Comment评论表
Playlist播放列表
Board板块表
4.2.2用户表解析
4.2.3视频表解析
4.2.4评论表解析
4.3.5播放列表解析
4.2.6板块表解析
5界面设计
5.1前台界面设计
5.1.1主界面设计
5.1.2前台登录界面设计
5.1.3个人中心界面设计
5.1.4用户注册界面设计
5.1.5视频上传界面设计
5.1.6视频播放界面设计
5.1.7视频评论界面设计
5.2后台界面设计
5.2.1登录界面设计
5.2.2管理员界面设计
6关键代码
6.1视频上传代码
publicclassVideoUploadingServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
privateServletConfigconfig;
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriterout=response.getWriter();
HttpSessionsession=request.getSession();
Useruser=(User)session.getAttribute("user");
intvScore=0;
java.util.Datedate=newjava.util.Date();
SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");
Stringpath=this.getServletContext().getRealPath("\\");//得到path=D:
\apache-tomcat-6.0.29\webapps\VideoOnline\
path=path+"upload/";//生成文件夹
Filef=new);
f.mkdirs();//生成文件夹\\upload\
StringrelativePath="upload/";//没有文件名的相对路径,上传时用
SmartUploadsu=newSmartUpload();
su.initialize(getServletConfig(),request,response);
try{
su.upload();//加载上传的文件
}catch(Exceptione1){
out.println("");
}
try{
StringvCover="",vURL="";
StringvTitle=su.getRequest().getParameter("vTitle");
StringvPresentation=su.getRequest().getParameter("vPresentation");
StringbTheme=su.getRequest().getParameter("bTheme");
StringbName=su.getRequest().getParameter("bName");
StringtxtvScore=su.getRequest().getParameter("vScore");
if(txtvScore!
=null&&!
txtvScore.equals("")){
try{
vScore=Integer.parseInt(txtvScore);
}catch(Exceptione){
out.println("");
try{
vScore=(int)Double.parseDouble(txtvScore);
}catch(Exceptione1){
out.println("");
return;
}
}
}
if(vScore<0){
out.println("");
return;
}
StringSQL="select*fromBoardwherebTheme='"+bTheme+"'andbName='"+bName+"'";
ListlistbID=BoardDao.selectBoardBySQL(SQL);
if(listbID.size()<=0){
out.println("");
return;
}
intbID=listbID.get(0).getbID();
for(inti=0;icom.jspsmart.upload.=su.getFiles().getFile(i);
if(().equals("vURL")){//判断文件是哪个文本框传过来的
if(!
().equals("mp4")){//判断文件格式
out.println("");
return;
}
Stringext=();//获取文件格式
StringsaveVurlUrl="";//保存地址
String(Calendar.getInstance().getTimeInMillis());//获取当前毫秒数
saveVurlUrl=relativePath++bID+"."+ext;//保存路径
Stringsql="select*fromVideowherevURL='upload/"+saveVurlUrl+"'";
//System.out.println("sql="+sql);
List
//System.out.println("list="+list.size());
if(list.size()>0){
out.println("");
return;
}
//System.out.println("saveVurlUrl="+saveVurlUrl);
(saveVurlUrl,su.SAVE_VIRTUAL);//文件另存为
vURL=saveVurlUrl;//有文件名的相对路径,播放时用,要保存到VIDEO表中的VURL字段
}elseif(().equals("vCover")){
if(!
().equals("jpg")){
out.println("");
return;
}
Stringext=();//获取文件格式
StringsavevCoverUrl="";//保存地址
String(Calendar.getInstance().getTimeInMillis());//获取当前毫秒数
savevCoverUrl=relativePath++bID+"."+ext;//保存路径
(savevCoverUrl,su.SAVE_VIRTUAL);//图片另存为
vCover=savevCoverUrl;//有文件名的相对路径,播放时用,要保存到VIDEO表中的VURL字段
}
}
System.out.println("vScore="+vScore);
Videovideo=newVideo(user.getuID(),bID,vTitle,user.getNickname(),vURL,vCover,vPresentation,vScore,Date.valueOf(dateFormat.format(date)),0,0,1,null);
if(VideoDao.addVideo(video)){
out.println("");
}else{
out.println("");
}
}catch(SmartUploadExceptione){
e.printStackTrace();
}
}
publicfinalServletConfiggetServletConfig(){
returnconfig;
}
publicfinalvoidinit(ServletConfigservletconfig){
config=servletconfig;
}
}
6.2视频点播代码
publicclassVideoVODServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriterout=response.getWriter();
StringuID=request.getParameter("uID").trim();
St