Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能_第1頁
Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能_第2頁
Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能_第3頁
Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能_第4頁
Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Java實現(xiàn)視頻網(wǎng)站的視頻上傳及視頻播放功能

JJaa碼視頻制作多媒頻加ffmp制,L能ffmp2.不對ff能解

實例數(shù)據(jù)實例dropcrea);descaaa

va實碼、視頻網(wǎng)站中供應(yīng)的作的播放器來播媒體視頻處理工加水

印等。

peg視頻采集功同時還支持以能支持的格式peg能解析的

格不能支持的格式fmpeg無法解解析的)格式.例是將上傳視頻據(jù)

庫庫MySQL5.5例所須要的數(shù)據(jù)pdatabaseifatetabletb_id

intnottitlevarchsrcvarcharpicturevardescriptvauptime

varcctb_media;實現(xiàn)視視頻關(guān)鍵的在線視頻播放播放該文件.

項工具FFmpeg有功能特別強大以RTP方式將視格式:

(asx,式析的文件格式頻轉(zhuǎn)碼為flv格據(jù)庫腳本fexists

db_m_media(nullprimaryar(50)notn(200)notnuchar(200)

norchar(400)char(40)comm視頻網(wǎng)站鍵幀抽放功能,播放的

項目中用制作的有特別強大的功大,不僅可以采視頻流傳送給asf,

mpg,w式(wmv9,rm,rm格式,該格式fmediaplayer;ykeyautoinull

commentullcommentotnullcommcomment'視頻ment'上傳口寸

站的視抽圖,的都是FLV格式的player,swf功能包括視頻采集

視頻采集卡給支持RTSP的wmv,3gp,mpmvb等),可以先ffnipeg支

持,;createdatabincrementcot'視頻名稱''視頻存放地ment

'視頻截頻描述‘,時間'視頻上及視式的文件,它是f播放

器.采集功能、視卡或USB攝像流媒體服務(wù)器p4,mov,avi先用

別的工具所以我們實例basedbjnedimnient'主鍵',地址',截

圖',上傳、視頻播放是Flash動畫文視頻格式轉(zhuǎn)換、像頭的圖

像,還器,支持直播應(yīng),flv等)具(mencoder)轉(zhuǎn)例中須要

ffmpeiaplayer;use',視頻轉(zhuǎn)放功能文件,可通過F、視頻抓

圖、還可以進(jìn)行屏幕應(yīng)用。

轉(zhuǎn)換為avi(ffeg視頻處理工dbmediapla轉(zhuǎn)能Flash給

視幕錄fmpeg工具.ayer;項目上傳在上結(jié)構(gòu)圖:傳視頻界面設(shè)

計上傳文件時,F(xiàn)o計rm表單中eenctype屬性值必需為

multipart/form--data.模塊界面設(shè)計如下圖:enctappl表單

mult表單text表單業(yè)務(wù)面對對象pack/****type屬性

值說lication/x-w單數(shù)據(jù)被編碼為tipart/form-單數(shù)據(jù)被編碼為

t/plain單數(shù)據(jù)以純文本務(wù)接口定義向接口編程,接象來創(chuàng)建.這

樣kagecom.webMediaDao.ja說明ww-form-urle為名稱/值對,這

data為一條消息,頁本形式進(jìn)行編碼口中定義系統(tǒng)就避開編碼中

app.dao;impovaencoded這是標(biāo)準(zhǔn)的編頁面上每個控件碼,其

中不含任統(tǒng)功能模塊.這中的某些業(yè)務(wù)遺ortjava,uti編碼格式件

對應(yīng)消息中任何控件格式這樣便利理清業(yè)遺漏等,同時擴(kuò)

il.List;impo的一部分的字符業(yè)務(wù),同時接口擴(kuò)展性也增加rt

com.webap口的對象必需由了.pp.entity.Me由實現(xiàn)了該接edia;

接口的**?version:

1.1**?author:

蘇若年ahref=maiIto:DennisIT@163發(fā)送郵件/a*

*?since

1.0創(chuàng)建時間:2013-2-07上午10:19:54

**TODO:interfaceMediaDao.javaisused

for…**/publicinterfaceMediaDao{/***

視頻轉(zhuǎn)碼*?paramffmpegPath轉(zhuǎn)碼工具的存放路徑

*@paramupFilePath用于指定要轉(zhuǎn)換格式的文件,要截圖的視頻

源文件*@paramcodcFilePath格式轉(zhuǎn)換后的的文件保存

路徑*@parammediaPicPath截圖保存路徑*

?return*?throwsException*/publicboolean

executeCodecs(StringffmpegPath,StringupFilePath,String

codeFilePath,StringmediaPicPath)throwsException;

/***保存文件*?parammedia*?return

*?throwsException*/publicboolean

saveMedia(Mediamedia)throwsException;/***查詢

本地庫中全部記錄的數(shù)目*?return*?throws

Exception*/publicintgetAlIMediaCount()throws

Exception;/***帶分頁的查詢*@param

firstResult*?parammaxResult*?return

*/}接口

code

publicList/***依據(jù)Id查*@parami*?return*?throws

*/publicMedi口的實現(xiàn),這里/***視頻轉(zhuǎn)碼*@paramf*@param

convertconvertconvertvert.add(cod//倉J建

ListStcutpic.cutpic.cutpic.以是轉(zhuǎn)換的flv

cutpic.cutpic.cutpic.cutpic.cutpic.

cutpic.cutpic.cutpic.cutpic.cutpic.

booleanProcesstry(buibui

buibuibui//錯誤輸出都將與

〃因的輸出變得更容}catchmarSys

e.p}

return}.add(22050.add(-r);.add(24);.add(-y);cFilePath);

一個List集合ringcutpicadd(ffmpegPaadd(-i);add(upFilePav

文件)add(-y);add(-f);add(image2add(~ss);add(17);/add(-t);

/add(0.001)add(-s);/add(800*280add(mediaPicmark=

trueBuilderbuilidermandlder.redireclder.start()Ider

mandlder.redirec假如此屬性為與標(biāo)準(zhǔn)輸出合并因此兩者均可使簡

單(Exceptionk=false;

tem.out.prinrintStackTramark;);〃設(shè)〃添加參數(shù)合來

保存從視c=newArraath);ath);//同上);//添加參數(shù)//添

加起始時〃添加參數(shù));//添加持〃添加參數(shù)0);//添加ePath);

//添e;Ider=newPd(convert);ctErrorStrea);

d(cutpic);ctErrorStrea為true,則任并,運用Process

builder,e){ntln(e);ace();設(shè)置幀頻數(shù)n-y",該參視頻中截

取圖片ayListStrin上(指定的文數(shù)M-ss”,該時間為第17秒”

-t”,該參持續(xù)時間為1毫”-S”,該參與截取的圖片大添加截取

的圖ProcessBuildam(true);am(true);任何由通過此對

s.getlnputStstart();參數(shù)指定將覆蓋片的吩咐ng();件即可以

是轉(zhuǎn)參數(shù)指定截取秒數(shù)指定持續(xù)時毫秒數(shù)指定截取的大小為

350*24片的保存路徑der();對象的startream()方法讀蓋已存在

的文轉(zhuǎn)換為flv格式取的起始時間時間的圖片大小40徑()方

法啟動的讀取。

這使得關(guān)文件式之前的文件的后續(xù)子進(jìn)程關(guān)聯(lián)錯誤消

息件,也程生成息和相系統(tǒng)因為方法pack/******

********/p對

}統(tǒng)中可能存在多為假如對象new法即可.kage

com.webDaoFactory.?version:

?author:

?sinceTODO:publicclass象private

sta〃單例設(shè)計模privateDao}publicstatreturn}

publicstatreturn)多個模塊,這些w太多,會不必

app.dao;impojava1.1蘇若年:

1.0classDaoDaoFactoryticDaoFacto模式,私有

構(gòu)造Factory(){icDaoFactordaoFactory;icMediaDaonew

MediaDao些模塊的業(yè)務(wù)D必要的奢侈資源ortcom.webaahref=mai

創(chuàng)建時間:oFactory.jav{〃工廠模式orydaoFacto造,對外供應(yīng)獲

rygetlnstangetMediaDaooImpl();DAO可以通過源.所以工

r,app.dao.implilto:DennisI2013-2-vaisusedf式,生產(chǎn)

Dao對0叮=newDa獲得創(chuàng)建的對nce(){o(){工廠來管理,需采

納單例模式.MediaDaoImpT@163發(fā)07下for...對象,

面對接口aoFactoryO;象的唯一接口須要的時候直式,私有構(gòu)造,提

P1;發(fā)送郵件/a下午02:18:51編程,返回實現(xiàn)口,干脆供應(yīng)即可.

供應(yīng)對外可訪現(xiàn)業(yè)務(wù)接口定訪問的定義的視圖下

packimpojavaimpojavajavaimpoorg.org.impocom./*****

*********/p

圖提交懇求,給kagecom.webortjava.io.a.util.List;ort

javax.seax.servlet,hax.servlet,hortorg.apacapache

mapachemortcom.webawebapp.entiMediaServic@version:

?author:

?sinceTODO:publicclasspublicvoid

thrdoPost(}publicvoidtarPrintWr限制器,限

制器app.serviceFile;import

rvlet.Servlettp.HttpServttp.HttpServhe

mons.fons.fileuploons.fileuplopp.dao.DaoFaty.Media;impe.jav

1.1蘇若年

1.0classMedMediaServicdoGet(HttpSows

ServletErequest,resdoPost(HttpowsServletEiterout=r器

分析懇求參;

java.io.lOEetContext;imvlet;importvletResponsefileupload.Fo

ad.disk.Disoad.servlet,actory;imporportcom.webahref=mai

倉ij建時間:diaService.jceextendsHServletRequeException,

Isponse);pServletRequException,Iresponse.get參數(shù),進(jìn)行相應(yīng)

Exception;immportjavax.javax.servle;

Fileitem;impskFileltemFaServletFilerr

com.webapbapp.util.Dailto:DennisI2013-2-javais

usedHttpServletestrequest,lOExceptionuest

requestlOExceptiontWriter();的業(yè)務(wù)調(diào)用處mport

java,ioservlet.Servet.發(fā)08下dfor

{HttpServlet{,HttpServle{處理.servlet控

o.PrintWritevletExceptiopServletRequtDao;import發(fā)送由B件/a

下午02:24:47tResponsereetResponser限制器相關(guān)代er;import

on;importuest;importespouse)response)代碼如

MediaDaomediaDao=DaoFactory.getMediaDaoO;String

message=;Stringuri=

request.getRequestURI0;Stringpath=

uri.substring(uri.lastlndexOf(/),uri.lastlndexOf(.));

if(/uploadFile.equals(path)){〃供應(yīng)解析時的一

些缺省配置DiskFileltemFactoryfactory=new

DiskFileltemFactory();〃創(chuàng)建一個

解析器,分析Inputstream,該解析器會將分析的結(jié)果封裝成一個

Fileltem對象的集合〃一個Fileitem對象對應(yīng)一個

表單域ServletFileUploadsfu=new

ServletFileUpload(factory);try

{Mediamedia=newMediaO;

ListFileltemitems=sfu.parseRequest(request);

booleanflag=false;//轉(zhuǎn)碼勝利與否的標(biāo)記

for(inti=0;iitems.size();

i++){Fileitemitem=items,get(i);

〃要區(qū)分是上傳文件還是一般的表單域

if(item.isFormFieldO){//isFormFieldO為true,表示這不是文

件上傳表單域〃一般表單域

StringparamName=item.getFieldName();

/*StringparamValue二

item.getStringO;

System,out.printin(參數(shù)名稱為:+paramName+,對應(yīng)的參數(shù)值

為:+paramValue);*/

if(paramName.equals(title)){me

dia.setTitle(now

String(item.getStringO.getBytes(IS08859-1),UTF-8));

)

if(paramName.equals(descript)){

media.setDescript(new

String(item.getStringO.getBytes(ISO8859-1),UTF-8));

)

}else{〃上傳文件

//System,out.println(上傳文件+item.getNameO);

ServletContextsctxthis.getServletContext();

〃獲得保存文件的路徑String

basePath二sctx.getRealPath(videcs);

〃獲得文件名StringfileLrl=

item.getNameO;〃在某些操作系統(tǒng)

±,item.getName0方法會返回文件的完整名稱,即包括路徑

StringfileType=fileUrl.substring(fileUrl.lastlndexOf(.));

〃截取文件格式〃自定義方式產(chǎn)生文件

名StringserialName二

String.valueOf(System.currentTimeMi11is());

〃待轉(zhuǎn)碼的文件FileuploadFile=new

File(basePath+/temp/+serialName+fileType);

item,write(uploadFile);

if(item,getSize()500*1024*1024){

message二li上傳失?。∧蟼鞯奈募?,系統(tǒng)允許最大文件

500M/H;}

StringcodcFilePath=basePath+/+serialName+.flv;

〃設(shè)置轉(zhuǎn)換為flv格式后文件的保存路徑

StringmediaPicPath=basePath+/images+File.separator+

serialName+.jpg;〃設(shè)置上傳視頻截圖的保存路徑

//獲得配置的轉(zhuǎn)換工具(ffmpeg.exe)的存放路徑

StringffmpegPath=

getServletContext().getRealPath(/tools/ffmpeg.exe);

media.setSrc(videos/+serialName+.flv);

media.setPicture(videos/images/+serialName+.jpg);

media.setUptime(DateTimeUtil.getYMDHMSFormat());

〃轉(zhuǎn)碼flag

=mediaDao.executeCodecs(ffmpegPath,

uploadFile.getAbsolutePath(),codcFilePath,

mediaPicPath);}}

if(flag){〃轉(zhuǎn)碼勝利,向數(shù)據(jù)表中添加該視

頻信息mediaDao.saveMedia(media);

message=li上傳勝利!/li;}

request.setAttribute(message,message);requ

resp

resp}

uest.getRequ}

c}}if(/qu

Listry

ponse);}c))

if(/plStrintMed

if(}try)

c}reqreqponse);}}

estDispatcheatch(Excepte.printStacthrownew

SeryAll.equatMediamed{mediaList=request,set

request,getatch(Excepte.printStacay.equals(pingidstr二

mediald=~iamedia=nnull!=idstr)mediald=I{media二

medatch(Except

e.printStacuest.setAttruest.getRequer(media_uptione)

{ckTraceO;ServletExcepals(path)){diaList;=

mediaDao.qtAttribute(tRequestDisptione)

{ckTrace();path)){request,get-1;

null;){Integer.parsdiaDao.querytione)

{ckTrace();ribute(mediuestDispatchpload.jsp).ption(e);

queryALlMedimediaList,patcher(medtParameter(selnt(idstr)yMe

diaById(mia,media);her(media_pforward(requa(0,5);

mediaList)dia_list.jspid);;mediald);

layer,jsp).uest,respons;).forward(r.forward(reqso);request,

quest,可以相關(guān)%@%?%@%requ%!D0htt

以通過分頁查找關(guān)代碼如下:pagelanguapageimportpage

importstringpathStringbaseuest.getScheOCTYPEhtml

tp://.webapp=jav£.util.二request.gPath=me()+://+rPUBLIC

-//Worg/TR/html4op5,展示到首o(hù)ntentType=p.entity.*%*%

getContextParequest.getSW3C//DTDHTM4/loose.dtd首頁,相應(yīng)特

效text/html;%ath();ServerName()ML4.01Tran效可以運用

JScharset=UTF-+:+requestnsitional//EN實現(xiàn).-8

pageEncot.getServerPNoding=UTF-8Port()+path+%+/;htmlhead

title視頻列表/titlelinkrel=stylesheettype=text/css

href=skin/css/style,css/linkscripttype=text/javascript

src=skin/js/jqueryl.3.2.js/scriptscript

type=text/javascript$(function(){varsWidth=

$(#focus).width();〃獲得焦點圖的寬度(顯示面積)varlen

=$(ttfocusulli).length;〃獲得焦點圖個數(shù)varindex=0;

varpicTimer;〃以下代碼添加數(shù)字按鈕和按鈕后的半透

亮條,還有上一頁、下一頁兩個按鈕varbtn=div

class=<btnBg,/divdivclass='btn';for(vari=0;i

len;i++){btn+=span/span;}btn+=/divdiv

class="preNextpre'/divdivclass="preNextnext'/div;

$(#focus).append(btn);

$(ttfocus.btnBg).css(opacity,0.5);〃為小按鈕添加鼠標(biāo)

滑入事務(wù),以顯示相應(yīng)的內(nèi)容$(#focus.btn

span).css(opacity,0.4).mouseenter(function()

{index=$(#focus.btnspan),index(this);

showPics(index);}).eq(0).trigger(mouseenter);//

上一頁、下一頁按鈕透亮度處理

$(#focus.preNext).css(opacity,0.2).hover(function()

{$(this).stop(true,false).animate({opacity:0.5},30

0);},function()

{$(this).stop(true,false).animate({opacity:0.2),30

0);});〃上一頁按鈕

$(#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元素都是在同一排向左浮動,所以這

里須要計算出外圍U1元素的寬度$(#focus

ul).css(width,sWidth*(len));〃鼠標(biāo)滑上焦點圖時停

止自動播放,滑出時起先自動播放$(Sfocus).hover(function()

{clearinterval(picTimer);},function()

{picTimer=setinterval(function()

{showPics(index);index++;

if(index==len){index=0;}},4000);〃此4000代

表自動播放的間隔,單位:

毫秒)).trigger(mouseleave);〃顯示圖片函

數(shù),依據(jù)接收的index值顯示相應(yīng)的內(nèi)容function

showPics(index){//一般切換varnowLeft=

-index*sWidth;//依據(jù)index值計算ul元素的left值

$(#focusul).stop(true,false).animate({left:nowLeft},300);

〃通過animate。調(diào)整ul元素滾動到計算出的position

//$(#focus.btnspan).removeClass(on).eq(index).addClass(on);

〃為當(dāng)前的按鈕切換到選中的效果$(#focus.btn

span).stop(true,false).animate({opacity:0.4),300).eq(index)

.stop(true,false),animate({opacity:1),300);//為當(dāng)前的按鈕

切換到選中的效果}});/script/headbodydiv

class=wrapperhl最新視頻/hldivid=fccus

ul%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論