欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
JAVA系統下的FLASH,FLV視頻應用解決方案
JAVA系統下的FLASH,FLV視頻應用解決方案 2006年11月20日15:59星期一  [資料]

最近網(wǎng)絡(luò )上FLV視頻應用越來(lái)越多了.使用這種方案的好處是:一定程度上可以保護作品版權,易于視頻作品在網(wǎng)絡(luò )上傳播,更高的商業(yè)運作價(jià)值.這一切特點(diǎn)都是因為FLV是基于FLASH播放器的一種流媒體格式.

我們知道,FLASH是一種易于開(kāi)發(fā)的網(wǎng)絡(luò )媒體.FLASH開(kāi)發(fā)人員可以不需要太復雜的工作便可以制作一個(gè)FLV視頻播放器.此篇文章重點(diǎn)不在于教你怎么制作FLV播發(fā)器,我們著(zhù)重講解下如何在服務(wù)器端將用戶(hù)上傳的視頻文件轉換為FLV格式,以及如何在我們制作的FLASH里使用這個(gè)FLV等關(guān)鍵環(huán)節.

軟件環(huán)境

WEB應用程序環(huán)境
JAVA
操作系統
WINDOWS
視頻編/解碼程序
FFMEPG
用戶(hù)接口設計

由于用戶(hù)所上傳的視頻文件一般都很大,所以使用簡(jiǎn)單的表單FILE控件來(lái)上傳顯然是不明智的.我們注重給用戶(hù)更佳的操作體驗.

通常開(kāi)發(fā)者會(huì )使用javascript來(lái)實(shí)現一些例如文件上傳進(jìn)度反饋等效果.這做法非常不錯,不過(guò)在這里我推薦的是使用FLASH8所支持的文件上傳功能.其好處是可以通過(guò)FLASH編程達到更加豐富的用戶(hù)交互體驗.

在附件中帶有該功能的FLASH源文件實(shí)例.
在"視頻處理過(guò)程"中講述了如何在JAVA程序下實(shí)現這一功能的服務(wù)器端操作.

客戶(hù)端交互效果:

顯示文件上傳信息
支持批量上傳
文件格式過(guò)濾
文件長(cháng)度限制
視頻處理過(guò)程

文件上傳處理
我想,一些常用的J2EE文件上傳組件會(huì )在你采用FLASH作為文件上傳控件的時(shí)候令你束手無(wú)策.這是作者本人經(jīng)歷過(guò)的.至少,你需要煩瑣的編碼,甚至采取重寫(xiě)這些開(kāi)源組件的手段以達到使其能夠處理FLASH控件所提交過(guò)來(lái)的文件的目的.現在,我向你介紹的這個(gè)組件可能會(huì )減少你在這塊的編程工作.
我采用的是oreilly提供的servlet輔助處理工具COS,并且使用其中的MultipartRequest來(lái)處理FLASH提交過(guò)來(lái)的文件流.

文件上傳處理示例代碼:
ControllerServlet.java
//...... ............
//你的Servlet中需要放置的代碼
if (request.getContentLength() == 0)return null;
String tempFilePath = "c:/" //文件存放目錄
videoBO.uploadVideoFile(request,tempFilePath);

//..................

在Servlet中我們需要關(guān)注的是FLASH在一次文件提交操作時(shí)會(huì )向服務(wù)器發(fā)送兩次請求.第一次附帶的信息為空,第二次提交的才是正式的文件上傳內容.如不在Servlet里判斷request里的內容長(cháng)度是否為0,則下面的程序執行時(shí)必定會(huì )拋出空指針的異常

負責文件上傳處理的方法
VideoBO.java
public String uploadVideoFile(HttpServletRequest request, String path){
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
MultipartRequest multi;
try {
multi = new MultipartRequest(request, path, 100 * 1024 * 1024,"UTF-8");
Enumeration files = multi.getFileNames();
if (files.hasMoreElements()) {
String name = (String) files.nextElement();
File f = multi.getFile(name);
return f.getName();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

看起來(lái)代碼似乎很簡(jiǎn)單^^
解決文件上傳處理后,我們接著(zhù)需要針對上傳過(guò)來(lái)的視頻文件做格式的轉換.

視頻格式轉換
我們采用FFMEPG作為視頻編/解碼工具.相關(guān)FFMEPG的介紹請搜索網(wǎng)絡(luò )
(FFMEPG二進(jìn)制版本已經(jīng)在附件中提供下載)
將得到的FFMEPG目錄下的所有dll文件和exe文件復制到windows/system32目錄下.我們將在java環(huán)境下調用系統命令的方式執行編碼工作.
FFMEPG是采用命令行的方式進(jìn)行編譯工作,所以,我們需要把這些命令寫(xiě)在一個(gè)批處理文件里.
在c盤(pán)根目錄下建立一個(gè)批處理文件
c:encode.bat
內容:
ffmpeg.exe -i %1 -y -s 400x300 -deinterlace -b 256 -ab 64 -ar 22050 -ac 2 %2 2>encode.txt

以上的命令表示:
%1 :接收參數一
%2 :接受參數二
-y :默認覆蓋已存在的輸出文件
>encode.txt :將打印信息暫存在encode.txt中,以避免打印信息出現在java控制臺中影響java程序執行.

另外我們還需要獲取視頻內容的縮略圖
c:makeimg.bat
ffmpeg.exe -i %1 -y -f image2 -ss 5 -t 0.001 -s 120x90 %2 2>encode.txt



更多的FFMEPGM命令解釋請參考網(wǎng)絡(luò )

在java程序中執行這個(gè)批處理文件
/*
*String fileIn,視頻原文件地址
*String fileOut,轉換后輸出到目標目錄
*String fileName ,轉換后的視頻文件名稱(chēng),例如:xxx.flv.注意文件名必須以.flv結束.
*/
public synchronized static boolean encode(String fileIn,String fileOut,String fileName){
String fullPath = fileOut+"\"+fileName; //完整文件路徑
String cmd = "c:\encoder.bat "+fileIn+" "+fullPath; //命令字串
try {
//如果目錄路徑不存在則創(chuàng )建
File file = new File(fileOut);
if(!file.exists()){
file.mkdirs();
}
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();//java程序等待執行過(guò)程完畢
File filePath = new File(fullPath);

//如果文件存在,并且長(cháng)度不為0,則表示轉換成功.
boolean success = filePath.exists()&&filePath.length()>0;
if(success){
//創(chuàng )建縮略圖
Runtime.getRuntime().exec("c:\makeimg.bat "+fullPath+" "+fileOut+"\"+new MD5Helper().getMD5ofStr(fileName)+".jpg");
//依據FLV的文件名,我們有必要將縮略圖名稱(chēng)用MD5加密,這樣可以保護我們的FLV源文件地址信息泄露.
}
return success;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

視頻轉換過(guò)程是一個(gè)及其消耗系統性能的過(guò)程.所以,我們必須限制其系統進(jìn)程數量.通過(guò)對JAVA方法的鎖定(synchronized),可保持每次操作系統僅執行一個(gè)進(jìn)程.

3.視頻調用/輸出
在FLASH中獲取外部信息的方式很多,在此不累述.例如loadvars,xml,socket,webservice等.另外,使用FLASH中的NetStream類(lèi)也可以直接播FLV放視頻流.
我們需要在FLASH中播放服務(wù)器轉換后的FLV文件.并且考慮采用哪一種數據交換方式最為恰當.
分析:
loadvars,xml等方式具有域的限制,也就是說(shuō)僅可以獲取與FLASH同一個(gè)域內的數據(即同一個(gè)站點(diǎn)域名下).顯然,此類(lèi)數據交換形式不適合我們將視頻內容在網(wǎng)站外部傳播的需求.
NetStream僅可以載入flv,mp3流媒體文件,而我們通常希望能夠將一些文本信息加入到FLASH中,例如我們的廣告,更新信息等.所以,這種方法也不是最好的.

最后,我們推薦webservice.
webservice具有分布式,支持對象傳遞等特性,可以不受域的限制.并且其對象傳輸模式極有利于復雜的數據結構編程.也就是說(shuō),JAVA對象可以直接在FLASH使用.

在JAVA中搭建webservice框架
我們采用apache提供的axis作為我們的webservice服務(wù)容器.
在javaweb應用中配置axis并不復雜.
axia程序包可以在http://ws.apache.org/獲宮....類(lèi)包添加至classpath中
在web.xml中配置axis
將所需要的類(lèi)包添加至classpath中,
在WEB-INF目錄下放置部署描述符號
一個(gè)axis配置大致是以下內容,(復制到web.xml中<web-app></web-app>節點(diǎn)中即可)
<!--WebService-->
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<display-name>SOAP Monitor Service</display-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<display-name>Axis Admin Servlet</display-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>



配置部署描述符
在WEB-INF目錄下建立server-config.wsdd
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="defaultClientConfig" xsi:type="deployment">
<globalConfiguration name="defaultClientConfig">
<parameter name="disablePrettyXML" value="true"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<transport name="http" type="">
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="URLMapper"/>
<handler name="Handler2" type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local" type="">
<responseFlow name="ResponseFlow1" type="">
<handler name="Handler1" type="LocalResponder"/>
</responseFlow>
</transport>
<!--
<service name="AdminService" type="" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService"/>
<parameter name="enableRemoteAdmin" value="false"/>
<parameter name="className" value="org.apache.axis.utils.Admin"/>
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" type="" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
-->
<!-- 自定義一個(gè)服務(wù),在以下節點(diǎn)中配置你的webservice -->
<service name="PlayerService" type="" provider="java:RPC"
style="rpc" use="encoded">
<parameter name="scope" value="Request"/>
<parameter name="className" value="com.hizon.web.service.PlayerService"/>
<parameter name="allowedMethods" value="*"/>
<namespace>http://service.web.hizon.com</namespace>
</service>
</deployment>


部署描述文件可以由axis提供的工具生成,直接修改這個(gè)文件內容也可.

PlayerService類(lèi)
package com.hizon.web.service;
import java.util.Map;
public class PlayerService {
public Map getVideo(String id) {
Map videoMap = new HashMap();
//code
return videoMap;
}
}

PlayerService是一個(gè)普通的javabean,或者你可以直接在部署描述符中將負責數據提供的類(lèi)指向你的POJO.
......
<parameter name="className" value="xxx.xxx.MyPOJO"/>
......
視頻表現方式

通過(guò)webservice,我們可以自由的獲取服務(wù)器端提供的數據信息.包括視頻作者資料,FLV文件地址等.接下來(lái)的工作便是如何在FLASH使用這些數據的問(wèn)題了.由于時(shí)間和篇幅有限,不再累述.

總結

通過(guò)這篇文章,我們知道了如何flash和 MultipartRequest類(lèi)的協(xié)助搭建我們的flash文件上傳系統.

如何使用在java程序中使用ffmepg轉換視頻格式.以及如何使用axis搭建webservice容器為FLASH客戶(hù)端提供數據.


文章所做的只是一個(gè)技術(shù)方案層面上的概述.并未涉及太多的編碼細節.如有興趣,請登錄http://5do.com.cn/bbs和殮....術(shù),或者訪(fǎng)問(wèn)我的blog: http://5do.com.cn/roller/bhlove

我將和你探討更多的相關(guān)知識,以及與你共同解決存在的問(wèn)題.
文章轉載請注明出處:http://5do.com.cn/roller/bhlove,并且保持全文完整性,^^

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何在FLASH中導入視頻?
flv轉換成swf
下載特殊格式的Flsh
利用Ffmpeg獲得flv視頻縮略圖和視頻長(cháng)度時(shí)間
java實(shí)現視頻文件轉換為flv(帶文件縮略圖)
JAVA+ffmpeg+mencoder轉換視頻
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久