记大学计网课设——基于B/S架构的视频点播系统设计

时间:2022-04-23 15:55:26

中南大学

 

 

计算机网络课程设计报告

 

 

 

题    目      基于WEB的视频点播系统设计     

学生姓名                                 

指导教师                                   

学    院      信息科学与工程学院               

专业班级                          

 

 

二○一七 年 九 月

 

 

 

 

 

 

 

 

 

 

目录

一、需求分析...

1、题目要求...

2、开发背景...

3、可行性分析...

4、系统运行环境...

二、总体设计...

1、用户功能模块...

2、服务器部分...

3、系统功能结构...

4、数据库设计...

三、功能设计...

1、系统流程图...

2、主要功能的实现...10

(1)播放系统首页的设计...10

(2)实现视频在线播放...11

(3)用户身份验证...13

(4)管理员功能:实现节目的上传、删除...16

四、调试与测试...20

五、测试结果...24

六、课程设计过程的总结、心得体会...24

 

 

 

一、需求分析

1、题目要求

本设计要求完成一个视频点播系统。采用B/S架构。应该具有易用、美观的图形界面。

客户端功能要求:

(1)能够实现视频在线播放;

(2)实现节目查询,记录用户播放记录。

(3)能实现视频节目评价系统。

服务器端:

(1)对节目分类进行管理

(2) 能实现视频节目的上传,修改和删除。

(3) 能实现用户身份的验证。

(4)实现节目的评价计分系统。

2、开发背景

视频点播VOD(Video on Demand)出现的最初动力是人们对广播电视的更高需求。在传统的电视中,观众完全是被动的。节目提供者播放什么节目,观众就只能观看什么节目,节目的播放时间也是无法按照观众的意愿改变的。尽管电视台可以提供很多的节目,但要想完整地收看到一个自己满意的节目,对于许多人来讲也是不太容易做到的,因为在快节奏的现代生活中,许多人不可能为了看某一个电视节目而预先安排自己的时间,一些偶尔的突发事件还会打乱我们的预期计划。我设计的这款系统是为了满足人们的需求,随时可以观看自己想看的影视作品,抛却之前的繁琐。

 

3、可行性分析

①技术可行性分析:本系统采用AdobeDreamweaver CS6来进行系统构建,采用B/S架构,利用PHP+MySQL+Apache搭建服务器环境,可以很方便进行动态网站的开发。通过学习HTML5+CSS3进行网页设计和界面优化,然后使用PHP来制作这个网站的动态内容,利用MySQL数据库进行后台数据管理,可以使得用户和系统进行更好的交互,而且易于管理,具有良好的技术可行性。

②经济可行性分析:开发此软件是个人独立设计,不需要大量的经费,而且可以节省许多费用,同时也可提高个人的实际动手能力,具有经济可行性。

③法律可行性分析:本系统模块等都由自己独立开发,不会出现侵犯版权等问题。网站出于科研学习目的,运营合法,不存在不良资源,因此具有法律可行性。

④市场可行性分析:本网站全面免费,后期管理和维护方便,可以推广使用,具有市场可行性。

 

4、系统运行环境

系统开发环境:PHP+MYSQL+APACHE+Hbuilder

系统开发语言:HTML5+CSS3+PHP+PHPMYADMIN

数据库:MYSQL 5.5.20

WEB服务器:Apache2.2.21

二、总体设计

本次视频点播系统基于B/S架构,所以总体设计可以分为浏览器、客户端部分和服务器端部分。从功能上分类来说,用户功能模块和管理员功能模块。

1、用户功能模块

用户注册,用户登录,浏览视频,搜索视频,观看视频和视频评论,查看播放记录;

 

2、服务器部分

视频管理,视频分类管理,视频节目上传,修改,删除,用户身份验证,节目的评价计分。

3、系统功能结构

系统功能结构图

4、数据库设计

 本次数据库名为video,数据库下面创建了四个表,结构如下图:

四个表的结构如下:

 

用户信息表(Users)

字段名称

数据类型

说明

uid

自动编号

ID标识符,自动增加

UserName

文本

用户名

password

文本

密码

regtime

日期/时间

注册时间

sex

文本

性别

Type

数字

用户类型(0为管理员)

Tele

文本

电话

Email

文本

E-mail

 

电影信息表(videos)

字段名称

数据类型

说明

fid

自动编号

ID标识符,自动增加

filepath

文本

路径

filename

文本

影片名称

director

文本

导演

player

文本

主演

class

文本

类型

filecover

文本

电影封面

file-gut

文本

视频简介

join-time

日期/时间

加入日期

 

视频评论表(video_comment)

字段名称

数据类型

说明

uid

文本

用户id

fid

文本

视频id

username

文本

用户名称

filename

文本

电影名

comment_time

时间

评论时间

comment

文本

评论内容

观看电影记录表(video_history)

字段名称

数据类型

说明

hid

文本

 观看id(自动增长)

username

文本

用户名称

filename

文本

电影名

date

时间

评论时间

 

三、功能设计

1、系统流程图

系统功能实现部分主要是对整个系统的实现进行描述。其中包括系统运行环境,系统后台,前台的功能实现等。系统流程图如下:

 

 

 

2、主要功能的实现

(1)播放系统首页的设计

本功能主要是利用HTML5以及CSS5对网页进行设计及布局,这个过程较为简单,效果图如下:

显眼部分利用JavaScript技术对其实现图片轮播方法。

(2)实现视频在线播放

本功能实现较为就简单,通过HTML5+CSS5给播放网页做简单的布局之后,在网页中加入<video>标签,制定video所指向的视频路径,设置视频播放的长宽高以及是否自动播放等<video>标签的属性值,即可在网页上显示播放界面,播放网页效果显示如下:

但是做到这里还不是就可以实现点击首页的电影图片就可以跳转到播放界面然后播放相对应的视频。具体操作有:

①在首页(index.php)的图片添加目标地址:

<li>

   <divclass="am-gallery-item">

   <ahref="video_play.php?action=<?phpecho$data[4][2];?>">

           <imgsrc="Temp-images/picture2.jpg" alt="哈利波特"/>

            <h3class="am-gallery-title">哈利波特带你走进魔法世界!</h3>

     <divclass="am-gallery-desc">2375-09-26</div>

    </a>

   </div>

</li>

在<img>标签外利用<a>标签的href属性来实现点击图片,网页跳转到视频播放页面(video_play.php)同时利用action属性来进行两个php文件之间的数据传输。(可能阐述的较为混乱)video_play.php端获取首页传入的图片数据信息:

<divclass="contents">

     <videowidth="810"height="420"controls="controls">

        <sourcesrc="<?phpecho$_GET['action'];?>type="video/mp4"/>

      </video>   

</div>

这样就可以实现两个页面之间的连接了,但是两个php页面都还是连接至数据库获取数据的。连接至数据库的代码如下:

<?php

       header("Content-type:text/html; charset=utf-8");

       session_start();

       mysql_connect("localhost","root","") or

        die("Could notconnect: ". mysql_error());

    mysql_select_db("video");

       $string=$_GET['action'];

   $str ="SELECT fid,filename,filepath,director,player,class,filecover,file_gut,join_timeFROM videos WHERE filepath= '$string'";

    $result =mysql_query($str);//执行SQL语句

    while($row= mysql_fetch_array($result,MYSQL_NUM)) {

          $data[]=$row;

  } 

?>

(3)用户身份验证

通过点击主页的注册、登录或者管理员登录界面按钮,跳转到登录注册界面,由于上述三种情况差不多,这里以验证登录为例,登录注册页面(login.html)如下:

页面由HTML5+CSS5编写布局,核心部分是登录注册信息框中的内容,两个输入信息框和两个按钮,这都是在一个表单中,通过点击登录按钮,将表单数据提交至指定的php处理,代码如下:

<formid="login"action="login.php"name="forms"method="post">

       <h3>用户登录注册</h3>

              <divid="inputs">

<inputid="username"type="text"placeholder="Username"name="username"autofocus required= />

<inputid="password"type="password"placeholder="Password"name="password"required/>

       </div>

<divid="actions">

<inputtype="submit"id="submit1"value="登录"name="login"/>

<inputtype="submit"id="submit2"value="我要注册"name="register"/>

</div>

</form>

这里讲表单数据提交至login.php来处理,php实现的是连接至数据库,在数据库中的用户信息表(user表)进行匹配搜索,如果有匹配到的用户信息,则准许登录。如果没有则提示登录失败,重新尝试!

Login.php代码如下:

<?php

       header("Content-type:text/html; charset=utf-8");

       $username=$_POST['username'];

       $password=$_POST['password'];

       $login=$_POST['login'];

       //$register=$_POST['register'];

       session_start();

       $_SESSION['username']=$username;

       $_SESSION['password']=$password;

       //包含数据库连接文件 

       $connection=mysql_connect("localhost","root","");

       //echo "$connection";

       mysql_select_db("video",$connection);

       //检测用户名及密码是否正确 

       $check_query =mysql_query("selectuid from users where username='$username' and password='$password' limit 1"); 

       if($result=mysql_fetch_array($check_query)){ 

           $_SESSION['username'] =$username; 

           $_SESSION['uid'] =$result['uid']

   

                  echo "<script>alert('登录成功!')</script>";

                  echo"<script>

              window.location.href='../index_user.php';

       </script> ";

           exit

       } else

           exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试'); 

       } 

?>

(4)管理员功能:实现节目的上传、删除

通过主页管理员登录之后进入管理员页面(server.php),效果图如下:

这里主要介绍视频的上传,另外的视频删除和视频资源修改在原理上是相似的,这里就不赘述。资源上传的页面如下:

实现代码如下:

<divclass="upload-filecover"style="margin:100px00350px;">

          <h3>上传封面</h3>

          <formaction="upload_filecover.php"method="post"enctype="multipart/form-data">

                 <inputtype="file"name="file"value="选择封面"/>

                 <br/>

                 <inputtype="submit"value="上传封面"/>

          </form>

</div>

<divclass="upload-video"style="margin:100px00350px;;">

       <h3>上传视频</h3>

          <formaction="upload_video.php"method="post"enctype="multipart/form-data">

                 <inputname="myfile"value="选择视频"type="file"/>

                 <br/>

                 <inputtype="submit"value="上传视频"/>

          </form>

</div>

同样是通过表单传输数据,利用upload_filecover.phpupload_video.php来实现将选中的视频封面和视频资源移动到服务器指定的文件夹中,并且通过连接数据库执行insert SQL语句向数据库中插入视频资源的信息,从而可以在前台搜索到该视频的信息,数据库将该视频的相关信息(如视频封面路径和视频资源路径)传给播放页面,实现播放视频。具体实现代码如下:

<?php 

header("content-type:text/html;charset=utf-8"); 

//存储可以传递服务器的文件类型 

$allowExts=array("rmbv","mp4","xlv"); 

//取出文件名用explode()和 从.处 分断字符串

$filepath="video/".$_FILES["myfile"]["name"];

$temp=explode(".",$_FILES["myfile"]["name"]); 

print_r($temp); 

//取出后缀名用end()里面是你的数组 

$filename=reset($temp);

if($_FILES["myfile"]["type"]=="video/mp4")//判断文件类型是否符合$allowExts数组的格式 

          {//判断图片的大小不可以超过1M 

   if($_FILES["myfile"]["error"]){//error大于0时表示错误信息,=0表示没有任何的错误 

        echo"error:".$_FILES["myfile"]["error"]

    }else{ 

        //判断同级目录中(./的意思同级目录)是否存在upload的文件夹 

      if(!is_dir("./upload/")){ 

          mkdir("./upload/"); 

      } 

        //判断在我们upload文件夹中是否有文件,如果有,停止上传,没有继续上传 

        if(file_exists("./upload/".$_FILES["myfile"]["name"])){ 

           echo"<script>alert('文件已存在')</script>";

        }else

            move_uploaded_file($_FILES["myfile"]["tmp_name"],"./video/".$_FILES["myfile"]["name"]);//将上传的文件从临时文件路径移动到指定路径 

            echo"<script>alert('文件已上传')</script>";

        } 

    } 

              $connection=mysql_connect("localhost","root","");

               //ordie("Could not connect: " . mysql_error());

   mysql_select_db("video",$connection);

    $str ="UPDATE  videos SET filepath='$filepath' where filename='$filename'";

    $result =mysql_query($str);

    echo$result;        

    if($result){

       echo "<script>alert('上传成功!')</script>";

       }else{

              echo"<script>alert('上传失败!')</script>";

       }

    mysql_close($connection);

    echo"<script>

              window.location.href='../upload.html';

       </script> ";

?>

 

本次课程设计任务要求中还有很多的任务要求,归根结底,其他的功能要求和上述功能中的某一个是相似的,所以这里没有一一写下了。举个例子,实现节目查询,记录用户的播放视频记录,服务器端对视频进行分类管理,这些基本上都是通过PHP连接至数据库,执行查询SQL语句,然后将结果返回,功能相近,较为简单。

四、调试与测试

调试与测试部分,我将以截图的形式展示本次课程设计的大概过程:

首页:

登录:

登录成功后:

右上角显示你已登录。点击注销,退回到未登录的首页。

点击用户中心查看自己的观看视频记录:

点击视频封面到达视频观看界面,本页面可以观看视频,看到视频简介,看到别人的评论,并且可以自己发表评论,评论发表之后,自己的评论写入数据库:

评论成功:

数据库添加了一条新评论:

管理员功能:首先在浏览器端搜索bbb视频,发现没有搜索到。

这时通过管理员视频上传功能将bbb视频上传上去:

登录进入管理员中心:

将bbb视频对应的封面和视频资源都上传上去:

上传成功之后提示你:

查看数据库videos表中是否多了一条video记录:

回到浏览器端,搜索bbb,找到对应的视频:

点击图片跳转到播放界面并可以播放:

 

五、测试结果

经过上面一步的调试与测试,本次课程设计基本上实现了要求的所有功能,测试无误!

六、课程设计过程的总结、心得体会

本次课程设计大概有一个多月,经过一个多月的学习,我真的学会了很多很多,从最初大胆的选这个课设题目,一点都不懂的情况下,在同学的知道帮助下,慢慢的学习HTML,PHP,JavaScript,基本上搞懂了他们都是用来干嘛的,并且掌握了他们的基本应用,完成了本次课设。可以说真的来之不易,自我感觉还是较为满意的,虽然课程设计中存在很多的毛病,但是大体上是可以看得。从这次课程设计中,我体会到一点,没有什么问题是自己不能解决的,只要我们肯努力,肯钻研,肯定可以解决困扰我们的 ,而且,通过努力解决问题的那种感觉是特别爽的。总结一下,今后我将继续学习相关知识,并且运用本次收获的东西到其他的方面,感谢老师和同学的帮助!