Java实现视频网站的视频上传及视频播放功能Word格式.docx

上传人:b****6 文档编号:22458165 上传时间:2023-02-04 格式:DOCX 页数:25 大小:376.96KB
下载 相关 举报
Java实现视频网站的视频上传及视频播放功能Word格式.docx_第1页
第1页 / 共25页
Java实现视频网站的视频上传及视频播放功能Word格式.docx_第2页
第2页 / 共25页
Java实现视频网站的视频上传及视频播放功能Word格式.docx_第3页
第3页 / 共25页
Java实现视频网站的视频上传及视频播放功能Word格式.docx_第4页
第4页 / 共25页
Java实现视频网站的视频上传及视频播放功能Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Java实现视频网站的视频上传及视频播放功能Word格式.docx

《Java实现视频网站的视频上传及视频播放功能Word格式.docx》由会员分享,可在线阅读,更多相关《Java实现视频网站的视频上传及视频播放功能Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

Java实现视频网站的视频上传及视频播放功能Word格式.docx

项目结构图:

上传视频界面设计

在上传文件时,Form表单中 

enctype属性值必须为"

multipart/form-data"

.模块界面设计如下图:

enctype属性值说明

application/x-www-form-urlencoded

表单数据被编码为名称/值对,这是标准的编码格式

multipart/form-data

表单数据被编码为一条消息,页面上每个控件对应消息中的一部分

text/plain

表单数据以纯文本形式进行编码,其中不含任何控件格式的字符

业务接口定义

面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.

packagecom.webapp.dao;

importjava.util.List;

importcom.webapp.entity.Media;

/**

*

*MediaDao.java

*@version:

1.1

*

*@author:

苏若年<

ahref="

mailto:

****************"

>

发送邮件<

/a>

*@since:

1.0创建时间:

2013-2-07上午10:

19:

54

*TODO:

interfaceMediaDao.javaisusedfor...

*/publicinterfaceMediaDao{

/**

*视频转码

*@paramffmpegPath转码工具的存放路径

*@paramupFilePath用于指定要转换格式的文件,要截图的视频源文件

*@paramcodcFilePath格式转换后的的文件保存路径

*@parammediaPicPath截图保存路径

*@return

*@throwsException

*/

publicbooleanexecuteCodecs(StringffmpegPath,StringupFilePath,StringcodcFilePath,StringmediaPicPath)throwsException;

*保存文件

*@parammedia

publicbooleansaveMedia(Mediamedia)throwsException;

*查询本地库中所有记录的数目

publicintgetAllMediaCount()throwsException;

*带分页的查询

*@paramfirstResult

*@parammaxResult

publicList<

Media>

queryALlMedia(intfirstResult,intmaxResult)throwsException;

*根据Id查询视频

*@paramid

publicMediaqueryMediaById(intid)throwsException;

}

接口的实现,这里列出ffmpeg视频转码与截图模块

publicbooleanexecuteCodecs(StringffmpegPath,StringupFilePath,StringcodcFilePath,

StringmediaPicPath)throwsException{

//创建一个List集合来保存转换视频文件为flv格式的命令

List<

String>

convert=newArrayList<

();

convert.add(ffmpegPath);

//添加转换工具路径

convert.add("

-i"

//添加参数"-i",该参数指定要转换的文件

convert.add(upFilePath);

//添加要转换格式的视频文件的路径

-qscale"

//指定转换的质量

6"

-ab"

//设置音频码率

64"

-ac"

//设置声道数

2"

-ar"

//设置声音的采样频率

22050"

-r"

//设置帧频

24"

-y"

//添加参数"-y",该参数指定将覆盖已存在的文件convert.add(codcFilePath);

//创建一个List集合来保存从视频中截取图片的命令

cutpic=newArrayList<

cutpic.add(ffmpegPath);

cutpic.add("

cutpic.add(upFilePath);

//同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)

-f"

image2"

-ss"

//添加参数"-ss",该参数指定截取的起始时间

17"

//添加起始时间为第17秒

-t"

//添加参数"-t",该参数指定持续时间

0.001"

//添加持续时间为1毫秒

-s"

//添加参数"-s",该参数指定截取的图片大小

800*280"

//添加截取的图片大小为350*240

cutpic.add(mediaPicPath);

//添加截取的图片的保存路径

booleanmark=true;

ProcessBuilderbuilder=newProcessBuilder();

try{

mand(convert);

builder.redirectErrorStream(true);

builder.start();

mand(cutpic);

//如果此属性为true,则任何由通过此对象的start()方法启动的后续子进程生成的错误输出都将与标准输出合并,

//因此两者均可使用Process.getInputStream()方法读取。

这使得关联错误消息和相应的输出变得更容易builder.start();

}catch(Exceptione){

mark=false;

System.out.println(e);

e.printStackTrace();

}

returnmark;

系统中可能存在多个模块,这些模块的业务DAO可以通过工厂来管理,需要的时候直接提供即可.

因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访问的方法即可.

importcom.webapp.dao.impl.MediaDaoImpl;

*DaoFactory.java

2013-2-07下午02:

18:

51

classDaoFactory.javaisusedfor...

*/publicclassDaoFactory{//工厂模式,生产Dao对象,面向接口编程,返回实现业务接口定义的对象

privatestaticDaoFactorydaoFactory=newDaoFactory();

//单例设计模式,私有构造,对外提供获取创建的对象的唯一接口,

privateDaoFactory(){

publicstaticDaoFactorygetInstance(){

returndaoFactory;

publicstaticMediaDaogetMediaDao(){

returnnewMediaDaoImpl();

视图提交请求,给控制器,控制器分析请求参数,进行相应的业务调用处理.servlet控制器相关代码如下

packagecom.webapp.service;

importjava.io.File;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importmons.fileupload.FileItem;

importmons.fileupload.disk.DiskFileItemFactory;

importmons.fileupload.servlet.ServletFileUpload;

importcom.webapp.dao.DaoFactory;

importcom.webapp.dao.MediaDao;

importcom.webapp.util.DateTimeUtil;

*MediaService.java

2013-2-08下午02:

24:

47

classMediaService.javaisusedfor...

*/publicclassMediaServiceextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doPost(request,response);

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

PrintWriterout=response.getWriter();

MediaDaomediaDao=DaoFactory.getMediaDao();

Stringmessage="

"

;

Stringuri=request.getRequestURI();

Stringpath=uri.substring(uri.lastIndexOf("

/"

),uri.lastIndexOf("

."

));

if("

/uploadFile"

.equals(path)){

//提供解析时的一些缺省配置

DiskFileItemFactoryfactory=newDiskFileItemFactory();

//创建一个解析器,分析InputStream,该解析器会将分析的结果封装成一个FileItem对象的集合

//一个FileItem对象对应一个表单域

ServletFileUploadsfu=newServletFileUpload(factory);

Mediamedia=newMedia();

FileItem>

items=sfu.parseRequest(request);

booleanflag=false;

//转码成功与否的标记

for(inti=0;

i<

items.size();

i++){

FileItemitem=items.get(i);

//要区分是上传文件还是普通的表单域

if(item.isFormField()){//isFormField()为true,表示这不是文件上传表单域

//普通表单域

StringparamName=item.getFieldName();

/*

StringparamValue=item.getString();

System.out.println("

参数名称为:

+paramName+"

对应的参数值为:

"

+paramValue);

if(paramName.equals("

title"

)){

media.setTitle(newString(item.getString().getBytes("

ISO8859-1"

),"

UTF-8"

descript"

media.setDescript(newString(item.getString().getBytes("

}else{

//上传文件

//System.out.println("

上传文件"

+item.getName());

ServletContextsctx=this.getServletContext();

//获得保存文件的路径

StringbasePath=sctx.getRealPath("

videos"

//获得文件名

StringfileUrl=item.getName();

//在某些操作系统上,item.getName()方法会返回文件的完整名称,即包括路径

StringfileType=fileUrl.substring(fileUrl.lastIndexOf("

//截取文件格式

//自定义方式产生文件名

StringserialName=String.valueOf(System.currentTimeMillis());

//待转码的文件

FileuploadFile=newFile(basePath+"

/temp/"

+serialName+fileType);

item.write(uploadFile);

if(item.getSize()>

500*1024*1024){

message="

<

li>

上传失败!

您上传的文件太大,系统允许最大文件500M<

/li>

StringcodcFilePath=basePath+"

+serialName+"

.flv"

//设置转换为flv格式后文件的保存路径

StringmediaPicPath=basePath+"

/images"

+File.separator+serialName+"

.jpg"

//设置上传视频截图的保存路径

//获取配置的转换工具(ffmpeg.exe)的存放路径

StringffmpegPath=getServletContext().getRealPath("

/tools/ffmpeg.exe"

media.setSrc("

videos/"

media.setPicture("

videos/images/"

+serialName+"

media.setUptime(DateTimeUtil.getYMDHMSFormat());

//转码

flag=mediaDao.executeCodecs(ffmpegPath,uploadFile.getAbsolutePath(),codcFilePath,mediaPicPath);

if(flag){

//转码成功,向数据表中添加该视频信息mediaDao.saveMedia(media);

上传成功!

request.setAttribute("

message"

message);

request.getRequestDispatcher("

media_upload.jsp"

).forward(request,response);

thrownewServletException(e);

/queryAll"

mediaList;

mediaList=mediaDao.queryALlMedia(0,5);

mediaList"

mediaList);

media_list.jsp"

).forward(request,response);

/play"

Stringidstr=request.getParameter("

id"

intmediaId=-1;

Mediamedia=null;

if(null!

=idstr){

mediaId=Integer.parseInt(idstr);

media=mediaDao.queryMediaById(mediaId);

media"

media);

media_player.jsp"

可以通过分页查找,显示最新top5,展示到首页.相应特效可以使用JS实现.

相关代码如下:

%@pagelanguage="

java"

cont

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1