当前位置:文档之家› Java实现视频网站的视频上传及视频播放功能

Java实现视频网站的视频上传及视频播放功能

Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的播放器.多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

??ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

1.能支持的格式ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)2.不能支持的格式对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.数据库实例所需要的数据库脚本drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer;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;项目结构图:上传视频界面设计在上传文件时,Form表单中?enctype属性值必须为"multipart/form-data".模块界面设计如下图:enctype属性值说明application/x-www-form-urlencoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/plain表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.packageimportimport/****** @version:** @author** @since:创建时间: 2013-2-07 上午10:19:54** TODO : interface is used for ...**/public interface MediaDao {/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param 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 media)throws Exception;/*** 查询本地库中所有记录的数目* @return* @throws Exception*/public int getAllMediaCount()throws Exception;/*** 带分页的查询* @param firstResult* @param maxResult* @return*/public List<Media> queryALlMedia(int firstResult, int maxResult)throws Exception;/*** 根据Id查询视频* @param id* @return* @throws Exception*/public Media queryMediaById(int id)throws Exception;}接口的实现,这里列出ffmpeg视频转码与截图模块/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath,String mediaPicPath) throws Exception {因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访问的方法即可.packageimport/****** @version:** @author** @since:创建时间: 2013-2-07 下午02:18:51** TODO : class is used for ...**/public class DaoFactory { ervlet控制器相关代码如下packageimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimport/****** @version:** @author** @since:创建时间: 2013-2-08 下午02:24:47** TODO : class is used for ...**/public class MediaService extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = ();MediaDao mediaDao = ();String message = "";String uri = ();String path = ("/"), ("."));if("/uploadFile".equals(path)){etBytes("ISO8859-1"),"UTF-8"));}if("descript")){(new String().getBytes("ISO8859-1"),"UTF-8"));}}else{); lv"; pg"; etRealPath("/tools/"); ("videos/" + serialName + ".flv");("videos/images/" +serialName + ".jpg");());orward(request,response);} catch (Exception e) {();throw new ServletException(e);}}if("/queryAll".equals(path)){List<Media> mediaList;try {mediaList = (0,5);("mediaList", mediaList);("").forward(request, response);} catch (Exception e) {();}}if("/play".equals(path)){String idstr = ("id");int mediaId = -1;Media media = null;if(null!=idstr){mediaId = (idstr);}try {media = (mediaId);} catch (Exception e) {();}("media", media);("").forward(request, response);}}}可以通过分页查找,显示最新top5,展示到首页.相应特效可以使用JS实现.相关代码如下:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import<%@ page import=".*"%><%String path = ();String basePath = ()+":idth(); ength; ppend(btn);$("#focus .btnBg").css("opacity",;tn span").css("opacity",.mouseenter(function() {index = $("#focus .btn span").index(this);showPics(index);}).eq(0).trigger("mouseenter");reNext").css("opacity",.hover(function() {$(this).stop(true,false).animate({"opacity":""},300); },function() {$(this).stop(true,false).animate({"opacity":""},300); });re").click(function() {index -= 1;if(index == -1) {index = len - 1;}showPics(index);});ext").click(function() {index += 1;if(index == len) {index = 0;}showPics(index);});ss("width",sWidth * (len));over(function() {clearInterval(picTimer);},function() {picTimer = setInterval(function() {showPics(index);index++;if(index == len) {index = 0;}},4000); rigger("mouseleave");top(true,false).animate({"left":nowLeft},300); tnspan").removeClass("on").eq(index).addClass("on"); tnspan").stop(true,false).animate({"opacity":""},300).eq(index).stop(true,false).animate({"opacity ":"1"},300); 片为视频转码过程中拉取到的图片.点击图片即可发送播放视频请求,视频播放页面效果如下图所示.视频播放页面需要在页面中嵌入Flash播放器代码如下:<!-- 嵌入Flash播放器 --><td align="center" width="455"><param name="movie"value="<%=basePath%>tools/?fileName=<%=basePath%><%=()%>" /><embedsrc="<%=basePath%>tools/?fileName=<%=basePath%><%=()%>"width="98%" height="90%"></embed></object></td>相关说明:<param>元素,value属性指定被加载的视频文件.实例中用的是flash制作的视频播放器.在value属性值中向播放器传递了一个file参数.该参数指定了要播放的视频的路径.<embed>元素,src属性也是用来加载影片,与<param>标记的value属性值具体相同的功能.转载请注明出处:[]。

相关主题