《Java实现视频网站的视频上传及视频播放功能》由会员分享,可在线阅读,更多相关《Java实现视频网站的视频上传及视频播放功能(17页珍藏版)》请在金锄头文库上搜索。
1、Java实现视频网站的视频上传、视频转码、视频关键帧抽图,及视频播放功能视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器.多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。?ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。1. 能支持的格式ffmpeg能解析的格式:(asx,asf,mpgwmy3
2、gp,mp4movavi,flv等)2. 不能支持的格式对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.数据库MySQL5.5实例所需要的数据库脚本dropdatabaseifexistsdb_mediaplayer;createdatabasedb_mediaplayer;usedb_mediaplayer;createtabletb_media(idintnotnullprimarykeyauto
3、_incrementcomment主键,titlevarchar(50)notnullcomment视频名称,srcvarchar(200)notnullcomment视频存放地址,picturevarchar(200)notnullcomment视频截图,descriptvarchar(400)comment视频描述,uptimevarchar(40)comment上传时间);desctb_media;项目结构图上传视频界面设计在上传文件时,Form表单中?enctype属性值必须为multipart/form-data.模块界面设计如下图:enctype属性值说明application/x
4、-www-form-urlencoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/plain表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义.这面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建样就避免编码中的某些业务遗漏等,同时扩展性也增强了.packageimportimport/*MediaDao.java*version:1.1*author*since:1.0创建时间:2013-2-07上午10:19:54
5、*TODO:interfaceMediaDao.javaisusedfor.*/publicinterfaceMediaDao/*视频转码paramffmpegPath转码工具的存放路径paramupFilePathparamupFilePath用于指定要转换格式的文件,要截图的视频源文件paramcodcFilePath格式转换后的的文件保存路径parammediaPicPath截图保存路径*/*/returnthrowsExceptionpublicbooleanexecuteCodecs(StringffmpegPath,StringupFilePath,StringcodcFilePa
6、th,StringmediaPicPath)throwsException;/*保存文件parammediareturnthrowsException*/publicbooleansaveMedia(Mediamedia)throwsException;/*查询本地库中所有记录的数目returnthrowsException*/publicintgetAllMediaCount()throwsException;publicintgetAllMediaCount()throwsException;/*带分页的查询paramfirstResultparammaxResultreturn*/pub
7、licListqueryALlMedia(intfirstResult,intmaxResult)throwsException;/*根据Id查询视频paramidreturnthrowsException*/publicMediaqueryMediaById(intid)throwsException;接口的实现,这里列出ffmpeg视频转码与截图模块/*视频转码paramffmpegPath转码工具的存放路径paramupFilePath用于指定要转换格式的文件,要截图的视频源文件paramcodcFilePath格式转换后的的文件保存路径parammediaPicPath截图保存路径*/
8、publicbooleanexecuteCodecs(StringffmpegPath,StringupFilePath,StringcodcFilePath,StringmediaPicPath)throwsException/创建一个List集合来保存转换视频文件为flv格式的命令Listconvert=newArrayList();convert.add(ffmpegPath);/添加转换工具路径convert.add(-i);/添加参数-i,该参数指定要转换的文件convert.add(upFilePath);/添加要转换格式的视频文件的路径convert.add(-qscale);/
9、指定转换的质量convert.add(6);convert.add(-ab);/设置音频码率convert.add(64);convert.add(-ac);/设置声道数convert.add(2);convert.add(-ar);/设置声音的采样频率convert.add(22050);convert.add(-r);/设置帧频convert.add(24);convert.add(-y);convert.add(codcFilePath);/添加参数-y,该参数指定将覆盖已存在的文件/创建一个List集合来保存从视频中截取图片的命令Listcutpic=newArrayList();cu
10、tpic.add(ffmpegPath);cutpic.add(-i);cutpic.add(upFilePath);flv文件)/同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的cutpic.add(-y);cutpic.add(-f);cutpic.add(image2);cutpic.add(-ss);cutpic.add(-ss);/添加参数-ss,该参数指定截取的起始时间cutpic.add(17);/添加起始时间为第17秒cutpic.add(-t);/添加参数-t,该参数指定持续时间cutpic.add(0.001);/添加持续时间为1毫秒cutpic.add(
11、-s);/添加参数-s,该参数指定截取的图片大小cutpic.add(800*280);/添加截取的图片大小为350*240cutpic.add(mediaPicPath);/添加截取的图片的保存路径booleanmark=true;ProcessBuilderbuilder=ProcessBuilderbuilder=newProcessBuilder();mand(convert);builder.redirectErrorStream(true);builder.start();mand(cutpic);builder.redirectErrorStream(true);/如果此属性为t
12、rue,则任何由通过此对象的start()方法启动的后续子进程生成的错误输出都将与标准输出合并,/因此两者均可使用Process.getInputStream()方法读取。这使得关联错误消息和相应的输出变得更容易builder.start();catch(Exceptione)mark=false;e.printStackTrace();returnmark;系统中可能存在多个模块,这些模块的业务DAC可以通过工厂来管理,需要的时候直接提供即可.因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访问的方法即可packageimport*DaoFactory
13、.javaversion:1.1*author* since:1.0* since:1.0*创建时间:2013-2-07下午02:18:51TODO:classDaoFactory.javaisusedfor.*/publicclassDaoFactory/工厂模式,生产Dao对象,面向接口编程,返回实现业务接口定义的对象privatestaticDaoFactorydaoFactory=newDaoFactory();/单例设计模式,私有构造,对外提供获取创建的对象的唯一接口,privateDaoFactory()publicstaticDaoFactorygetInstance()retu
14、rndaoFactory;publicstaticMediaDaogetMediaDao()returnnewMediaDaoImpl();控制器相关代码如下视图提交请求,给控制器,控制器分析请求参数,进行相应的业务调用处理.servletpackageimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimport/TODO:classMediaService.javaisusedfor.*/TODO:classMediaService.javaisusedfor.*/publicclassMediaServiceextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException