java实现视频上传和播放解读

上传人:小** 文档编号:50550450 上传时间:2022-01-20 格式:DOC 页数:17 大小:300.50KB
收藏 版权申诉 举报 下载
java实现视频上传和播放解读_第1页
第1页 / 共17页
java实现视频上传和播放解读_第2页
第2页 / 共17页
java实现视频上传和播放解读_第3页
第3页 / 共17页
资源描述:

《java实现视频上传和播放解读》由会员分享,可在线阅读,更多相关《java实现视频上传和播放解读(17页珍藏版)》请在装配图网上搜索。

1、Java 实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件项目中用制作的player.swf播放器.多媒体视频处理工具 FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓 图、给视频加水印等。ffmpeg 视频采集功能非常强大,不仅可以采集视频采集卡或 USB 摄像头的图像,还可以进 行屏幕录制,同时还支持以 RTP方式将视频流传送给支持 RTSP的流媒体服务器,支持直播 应用。1. 能支持的格式ffmpeg 能解析的格式: (asx,

2、 asf, mpg, wmv, 3gp, mp4, mov, avi, flv 等)2. 不能支持的格式对ffmpeg无法解析的文件格式(wmv9, rm, rmvb等),可以先用别的工具(mencoder)转换 为 avi(ffmpeg 能解析的 )格式 .实例是将上传视频转码为flv 格式 ,该格式 ffmpeg 支持 ,所以我们实例中需要 ffmpeg 视频处理工具 .数据库 MySQL5.5实例所需要的数据库脚本drop database if exists db_mediaplayer; create database db_mediaplayer;use db_mediaplaye

3、r;create table tb_media(id int not null primary key auto_increment comment 主键 title varchar(50) not null comment 视频名称 , src varchar(200) not null comment 视频存放地址 , picture varchar(200) not null comment 视频截图 , descript varchar(400) comment 视频描述 , uptime varchar(40) comment 上传时间 );desc tb_media;项目结构图J

4、箱 mediaplayer-占src也可墙加自口门层”方垂虏犷禹立口稣VtSS:Log雯柞 -o com.webapp.dao 面向接匚果程,接口dao单DADTJ 出 conn.webapp.dao.implcom.webapp.entity实 CtBeancom.webapp.E&rvicecom.webapp.test竝刮器com.webapp.util工貝獎数拯库连接輪码过滤器 m JRE System Library Qdkl,6.0_30Mava EE 5 Librariesj Sr, Referenced Librariesm rTiysql*connector-java-S.1

5、.13*binJar z* commcns-fileuploadjar.* . |呷commcns-io-1.4.jar文件上楂所離骂包J .3 Web Root手 META-INF* e tools! 1 Ffmpeg,exe 坯 player.swf J N videos LJ? images0 temp J的a凋用ffm p eg迸行 转否巔器转码后的视窮放目录 观裁截虱存放目录上传的詡帘歆且录d WEB-INF規須宾面,貝是筒单钓嘆块忧鑿感顷 网站苏億基桂临曲切烷育用唱衆上传视频界面设计模块界面设计如下在上传文件时,Form表单中enctype属性值必须为multipart/form-

6、data.图:enctype属性值说明applicatio n/x-www-form-urle ncoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/pla in表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了 .package com.webapp.dao;import java.util.List;import

7、 com.webapp.e ntity.Media;/* MediaDao.java* version :1.1* author :苏若年 发送邮件 * since :1.0创建时间:2013-2-07上午 10:19:54* TODO :in terface MediaDao.java is used for .*/public interface MediaDao / 根据 Id 查询视频* param id* return * throws Exception* 视频转码* param ffmpegPath* param upFilePath* param codcFilePath* p

8、aram mediaPicPath* return* throws Exception转码工具的存放路径用于指定要转换格式的文件 ,要截图的视频源文件 格式转换后的的文件保存路径截图保存路径*/public boolean executeCodecs(String ffmpegPath,String upFilePath, String codcFilePath, String mediaPicPath)throws Exception;* 保存文件* param media* return* throws Exception*/public boolean saveMedia(Media m

9、edia)throws Exception;* 查询本地库中所有记录的数目* return* throws Exception*/public int getAllMediaCount()throws Exception;* 带分页的查询* param firstResult* param maxResult* return*/public List queryALlMedia(int firstResult, int maxResult)throws Exception;*/public Media queryMediaByld(i nt id)throws Excepti on;接口的实现

10、,这里列岀ffmpeg视频转码与截图模块/*视频转码* param ffmpegPath* param upFilePath* param codcFilePath* param mediaPicPath* return转码工具的存放路径用于指定要转换格式的文件,要截图的视频源文件 格式转换后的的文件保存路径截图保存路径* throws Exceptio n*/public boolea n executeCodecs(Stri ng ffmpegPath, String upFilePath, String codcFilePath,Stri ng mediaPicPath) throws

11、Exceptio n /创建一个List集合来保存转换视频文件为flv格式的命令List convert = new ArrayList();con vert.add(ffmpegPath); / 添加转换工具路径convert.add(-i); /添加参数-i,该参数指定要转换的文件con vert.add(upFilePath); /添加要转换格式的视频文件的路径con vert.add(-qscale);/ 指定转换的质量con vert.add(6);con vert.add(-ab);/ 设置音频码率co nvert.add(64);convert.add(-ac);/ 设置声道数c

12、on vert.add(2);co nvert.add(-ar);/设置声音的采样频率co nvert.add(22050);convert.add(-r);/ 设置帧频co nvert.add(24);convert.add(-y); /添加参数-y,该参数指定将覆盖已存在的文件con vert.add(codcFilePath);/创建一个List集合来保存从视频中截取图片的命令List cutpic = new ArrayList(); cutpic.add(ffmpegPath);cutpic.add(-i);flv格式之前的文件,cutpic.add(upFilePath); / 同

13、上(指定的文件即可以是转换为 也可以是转换的flv文件)cutpic.add(-y);cutpic.add(-f);cutpic.add(image2);cutpic.add(-ss); /添加参数-ss,该参数指定截取的起始时间 cutpic.add(17); / 添加起始时间为第 17秒cutpic.add(-t); / 添加参数-t ,该参数指定持续时间cutpic.add(0.001); / 添加持续时间为 1毫秒 cutpic.add(-s); /添加参数-s,该参数指定截取的图片大小 cutpic.add(800*280); / 添加截取的图片大小为 350*240 cutpic.

14、add(mediaPicPath); /添加截取的图片的保存路径boolea n mark = true;ProcessBuilder builder = new ProcessBuilder(); try ma nd(con vert); builder.redirectErrorStream(true); builder.start();ma nd(cutpic); builder.redirectErrorStream(true);/如果此属性为true ,则任何由通过此对象的start()方法启动的后续子进程生成的错误输出都将与标准输出合并,/因此两者均可使用Process.getIn

15、putStream()方法读取。这使得关联错误消息和相应的输出变得更容易builder.start(); catch (Excepti on e) mark = false;System.out.pri ntl n( e);e.pri ntStackTrace();return mark;系统中可能存在多个模块,这些模块的业务 DAO可以通过工厂来管理,需要的时候直接提供即可 因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访 问的方法即可.package com.webapp.dao;import com.webapp.dao.impl.MediaDa

16、oImpI;/* DaoFactory.java* version :1.1* author :苏若年 发送邮件 * since :1.0创建时间:2013-2-07下午 02:18:51* TODO :class DaoFactory.java is used for .*/public class DaoFactory /工厂模式住产Dao对象,面向接口编程,返回实现业务接口定义的对象private static DaoFactory daoFactory = new DaoFactory();/单例设计模式,私有构造,对外提供获取创建的对象的唯一接口private DaoFactory(

17、)public static DaoFactory getI nsta nce()retur n daoFactory;public static MediaDao getMediaDao() retur n new MediaDaoImpl();视图提交请求,给控制器,控制器分析请求参数,进行相应的业务调用处理.servlet控制器相关代码如下package com.webapp.service;import java.io.File;import java.i o.I OExcepti on;import java.io.Pri ntWriter;import java.util.List

18、;import javax.servlet.ServletC on text;import javax.servlet.ServletExceptio n;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResp on se;import mon s.fileupload.Fileltem;import mon s.fileupload.disk.DiskFileltemFactory;import mo

19、n s.fileupload.servlet.ServletFileUpload;import com.webapp.dao.DaoFactory;import com.webapp.dao.MediaDao;import com.webapp.e ntity.Media;import com.webapp.util.DateTimeUtil;/*MediaService.java*version :1.1*author:苏若年 发送邮件 *si nee1.0创建时间:2013-2-08下午02:24:47*/TODOclass MediaService.java is used for .p

20、ublic class MediaService exte nds HttpServlet public void doGet(HttpServletRequest request, HttpServletResp onse resp onse) throws ServletExcepti on, I OExcepti on doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOExcepti

21、on PrintWriter out = response.getWriter();MediaDao mediaDao = DaoFactory.getMediaDao();String message = ;String uri = request.getRequestURI();String path = uri.substring(uri.lastIndexOf(/), uri.lastIndexOf(.);if(/uploadFile.equals(path)/ 提供解析时的一些缺省配置DiskFileItemFactory factory = new DiskFileItemFact

22、ory();/ 创建一个解析器 ,分析 InputStream, 该解析器会将分析的结果封装成一个FileItem 对象的集合/ 一个 FileItem 对象对应一个表单域ServletFileUpload sfu = new ServletFileUpload(factory);try Media media = new Media();List items = sfu.parseRequest(request);boolean flag = false;/ 转码成功与否的标记for(int i=0; i500*1024*1024)message = 上传失败!您上传的文件太大,系统允许最大

23、文件 500M;String codcFilePath = basePath + / + serialName + .flv;/ 设置转换为 flv 格式后文件的保存路径String mediaPicPath = basePath + /images +File.separator+serialName + .jpg;/ 设置上传视频截图的保存路径II获取配置的转换工具(ffmpeg.exe)的存放路径StringffmpegPath=getServletContext().getRealPath(ItoolsIffmpeg.exe);media.setSrc(videosI + serial

24、Name + .flv); media.setPicture(videosIimagesI +serialName + .jpg); media.setUptime(DateTimeUtil.getYMDHMSFormat();II 转码flag=mediaDao.executeCodecs(ffmpegPath,uploadFile.getAbsolutePath(), codcFilePath, mediaPicPath);if(flag)/ 转码成功 ,向数据表中添加该视频信息 mediaDao.saveMedia(media);message = 上传成功!;request.setAt

25、tribute(message, message);request.getRequestDispatcher(media_upload.jsp).forward(request,response); catch (Exception e) e.printStackTrace();throw new ServletException(e);if(/queryAll.equals(path)List mediaList;try mediaList = mediaDao.queryALlMedia(0,5);request.setAttribute(mediaList, mediaList);req

26、uest.getRequestDispatcher(media_list.jsp).forward(request, response); catch (Exception e) e.printStackTrace();if(/play.equals(path)String idstr = request.getParameter(id);int mediaId = -1;Media media = null;if(null!=idstr)mediaId = Integer.parseInt(idstr);try media = mediaDao.queryMediaById(mediaId)

27、; catch (Exception e) e.printStackTrace();request.setAttribute(media, media);request.getRequestDispatcher(media_player.jsp).forward(request, response);可以通过分页查找,显示最新top5,展示到首页.相应特效可以使用JS实现.最新视频相关代码如下:VDOCTYPE html PUBLIC -/W3C/DTD HTML 4.01Tran sitio nal/ENhttp:/www.w3.org/TR/html4 /loose.dtd 视频列表 $(

28、fun ctio n() var sWidth = $(#focus).width(); / 获取焦点图的宽度(显示面积)var len = $(#focus ul li).length; / 获取焦点图个数var index = 0; var picTimer;/ 以下代码添加数字按钮和按钮后的半透明条,还有上一页、下一页两个按钮 var btn = ;for(var i=0; i len; i+) btn += ;btn += ; $(#focus).append(btn);$(#focus .btnBg).css(opacity,0.5);/ 为小按钮添加鼠标滑入事件,以显示相应的内容$

29、(#focus .btn span).css(opacity,0.4).mouseenter(function() index = $(#focus .btn span).index(this);showPics(index); ).eq(0).trigger(mouseenter);/ 上一页、下一页按钮透明度处理$(#focus .preNext).css(opacity,0.2).hover(function() $(this).stop(true,false).animate(opacity:0.5,300);,function() $(this).stop(true,false).a

30、nimate(opacity:0.2,300););/ 上一页按钮$(#focus .pre).click(function() index -= 1;if(index = -1) index = len - 1; showPics(index););/ 下一页按钮$(#focus .next).click(function() index += 1;if(index = len) index = 0; showPics(index););/本例为左右滚动,即所有 li 元素都是在同一排向左浮动,所以这里需要计算出外围 ul 元素的宽度$(#focus ul).css(width,sWidth

31、 * (len);/ 鼠标滑上焦点图时停止自动播放,滑出时开始自动播放$(#focus).hover(function() clearInterval(picTimer);,function() picTimer = setInterval(function() showPics(index);index+;if(index = len) index = 0;,4000); / 此 4000代表自动播放的间隔,单位:毫秒).trigger(mouseleave);/ 显示图片函数,根据接收的 index 值显示相应的内容function showPics(index) / 普通切换var no

32、wLeft = -index*sWidth; / 根据 index 值计算 ul 元素的 left 值$(#focus ul).stop(true,false).animate(left:nowLeft,300); / 通过 animate() 调整 ul 元素滚动到计算出的 position/$(#focus .btn span).removeClass(on).eq(index).addClass(on); / 为当前的按钮 切换到选中的效果$(#focus .btn span).stop(true,false).animate(opacity:0.4,300).eq(index).sto

33、p(true,false).animate(opacit y:1,300); / 为当前的按钮切换到选中的效果);最新视频%List mediaList =(List)request.getAttribute(mediaList);if(mediaList.size()0&mediaList!=null)for(int i=0; ia href=play.action?id=imgsrc= alt= /没有记录 视频播放页面需要在页面中嵌入Flash播放器代码如下:vobjectwidth=452height=339classid=clsid:D27CDB6E-AE6D-11cf-96B8-4

34、44553540000vparam n ame=movievalue=tools/player.swf?fileName= / vembedsrc=tools/player.swf?fileName= width=98% height=90%相关说明:元素,加载ActiveX控件,classid属性则指定了浏览器使用的ActiveX空间.因为使用Flash制作的播放器来播放视频文件,所以classid的值必须为”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000”vparam元素,value属性指定被加载的视频文件.实例中用的是flash制作的视频播放器.在 value属性值中向player.swf 播放器传递了一个 file 参数.该参数指定了要播放的视频的路径vembed:元素,src属性也是用来加载影片,与param标记的value属性值具体相同的功能.转载请注明岀处:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!