下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、利用JAVA實現(xiàn)局域網(wǎng)的跨平臺實時視頻傳輸吳良斌(福建信息職業(yè)技術(shù)學(xué)院 福州,350003)摘 要:本文首先分析了在局域網(wǎng)中視頻傳輸?shù)奶攸c和模型及存在的問題,并針對不同的平臺,提出一種通用的實時視頻傳輸?shù)慕鉀Q方案。那就是在SUN 公司提出的JMF 多媒體框架基礎(chǔ)上進(jìn)行擴展,實現(xiàn)一個與平臺無關(guān)的基于RTP/RTCP 協(xié)議的流式媒體傳輸模型的系統(tǒng)設(shè)計,由于流媒體傳輸系統(tǒng)本身是一個復(fù)雜和廣泛的研究領(lǐng)域,它本身處于不斷改進(jìn)的過程中。基于此在本文的最后闡述了今后流媒體可能的研究方向。關(guān)鍵詞: JAVA; 客戶/服務(wù)器;RTP/RTCP;實時視頻傳輸;JMF緒論目前在局域網(wǎng)內(nèi)部實時傳輸視頻已經(jīng)得到廣泛應(yīng)用
2、。且以傳輸視頻的局域網(wǎng)大多數(shù)是有線局域網(wǎng),主要因為有線局域網(wǎng)技術(shù)成熟,傳輸速度快,穩(wěn)定性好。但在視頻數(shù)據(jù)量大時,也會出現(xiàn)工作不穩(wěn)定、數(shù)據(jù)堵塞、甚至于嚴(yán)重的延遲現(xiàn)象。要能實現(xiàn)視頻傳輸與平臺的無關(guān)性,我們首先要知道在局域網(wǎng)中視頻傳輸?shù)牡湫湍J?。在局域網(wǎng)中視頻傳輸采用的是服務(wù)器/客戶機模式,一個視頻系統(tǒng)的功能模塊如下圖所示,它包括5 個功能模塊:l 視頻采集和視頻顯示:視頻采集設(shè)備負(fù)責(zé)將視頻信息輸入計算機,如數(shù)碼攝像頭等。而視頻顯示負(fù)責(zé)播放視頻信息,如一般的顯示終端。l 編碼和解碼工具:編碼軟件負(fù)責(zé)將視頻采集設(shè)備傳送過來的視頻信號編碼成流媒體格式,而解碼軟件與之相反負(fù)責(zé)將媒體數(shù)字信號轉(zhuǎn)化成終端可識別
3、的信息。l 視頻壓縮和視頻解壓:視頻媒體數(shù)據(jù)量巨大必須將編碼后的視頻媒體數(shù)據(jù)進(jìn)行高效的壓縮,然后將壓縮后的數(shù)據(jù)在網(wǎng)絡(luò)上傳輸。其相應(yīng)的解壓模塊負(fù)責(zé)將數(shù)據(jù)還原成為原來的流媒體格式。l 傳輸協(xié)議:流媒體數(shù)據(jù)由于自身的特點,在網(wǎng)絡(luò)上傳輸時將采用和過去諸如文字,靜態(tài)圖像等不同的網(wǎng)絡(luò)協(xié)議來進(jìn)行傳輸。l 傳輸網(wǎng)絡(luò):一般來說視頻傳輸可以在現(xiàn)有任何網(wǎng)絡(luò)上進(jìn)行傳輸,更高的帶寬將有利于視頻傳輸效率的提高,也能夠保證其播放質(zhì)量。實時視頻傳輸工作流程在上圖中,可以看到作為整個傳輸模式的底層,傳輸協(xié)議有著至關(guān)重要的作用。在本文實現(xiàn)的方案中主要采用的是RTP/RTCP協(xié)議,該協(xié)議是由IETF 為視音頻的實時傳輸而設(shè)計的傳輸
4、協(xié)議。當(dāng)前的視頻傳輸系統(tǒng)存在的問題主要有:可擴展性差、格式不統(tǒng)一等。我們都知道JAVA 具有平臺無關(guān)性的特點,對此本文利用JMF(Java Media Framework)的多功能并對其原有接口加以擴展,就可以實現(xiàn)基于RTP/RTCP的流媒體傳輸模型。1 基于JMF架構(gòu)實現(xiàn)RTP/RTCP傳輸模型JMF(Java Media Framework)是Sun公司提出的Java 媒體架構(gòu),它是對應(yīng)Java2平臺標(biāo)準(zhǔn)版(J2SE)的一種可選用的應(yīng)用編程接口(API)。JMF的源代碼通過SCSL (Sun 社團源代碼許可模式)發(fā)布。下面給出本文實現(xiàn)視頻傳輸系統(tǒng)的結(jié)構(gòu)及其有關(guān)的代碼。1.1 結(jié)構(gòu)介紹 服務(wù)
5、器:接受多臺客戶端連接,傳送客戶端信息VideoServer.java:定義服務(wù)器Socket和輸入輸出流ServerFrame.java:定義服務(wù)器界面 客戶端:通過服務(wù)器,互相瀏覽視頻、收聽音頻和文字交流RTPTransmit.java:定義RTP視音頻數(shù)據(jù)傳送RTPReceive.java:定義RTP視音頻數(shù)據(jù)接收VFWAuto.java:調(diào)用JMF視音頻設(shè)備接口Client.java:定義客戶端Socket和控制RTP傳輸MainFrame.java:定義客戶端主界面和功能 其他類:服務(wù)器和客戶端共享包CustInfo.java:客戶端信息類Customer.java:客戶端請求包,序
6、列化Msg.java:客戶端文字聊天記錄1.2 關(guān)鍵組件的實現(xiàn) 視頻、音頻設(shè)備捕獲在“系統(tǒng)設(shè)置”窗口中調(diào)用JMF的設(shè)備搜索接口,調(diào)用代碼如下:VFWAuto.java部分代碼:public VFWAuto() Vector devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();Enumeration enum1 = devices.elements();while (enum1.hasMoreElements() CaptureDeviceInfo cdi = (CaptureDeviceInfo) enum1.
7、nextElement(); String name = cdi.getName(); if (name.startsWith("vfw:") CaptureDeviceManager.removeDevice(cdi);int nDevices = 0;for (int i = 0; i < 10; i+) String if (name != null && name.length() > 1) nDevices+; VFWAuto.java調(diào)用了JMF的視頻設(shè)備搜索接口,它返回一個Vector數(shù)組,里面存放包含設(shè)備信息的CaptureDev
8、iceInfo類對象。獲取本地視音頻數(shù)據(jù)public static MediaLocator audioml = null,videoml=null;DataSource dataSources = new DataSource2;/建立混合數(shù)據(jù)源dataSources0 = Manager.createDataSource(videoml);dataSources1 = Manager.createDataSource(audioml);DataSource ds = Manager.createMergingDataSource(dataSources);player = Manager.
9、createRealizedPlayer(ds);/建立媒體播放器player.start();Component comp;if (comp = player.getVisualComponent() != null) /comp.setSize(localVideoPanel.WIDTH, localVideoPanel.HEIGHT); localVideoPanel.removeAll(); localVideoPanel.add(comp);/放置視頻組件 localVideoActive=true; 視音頻數(shù)據(jù)實時傳輸步驟一:建立兩個數(shù)據(jù)源,分別存儲音頻數(shù)據(jù)和視頻數(shù)據(jù)。dataSo
10、urces0 = Manager.createDataSource(MainFrame.videoml);dataSources1 = Manager.createDataSource(MainFrame.audioml);/videoml和audioml是MediaLocator類實例,是主窗口的視頻、音頻數(shù)據(jù)地址DataSource ds = Manager.createMergingDataSource(dataSources);/組合視頻音頻數(shù)據(jù),建立新的數(shù)據(jù)源dsProcessor processor = Manager.createProcessor(ds);/利用參數(shù)ds,建立數(shù)
11、據(jù)處理器processor步驟二:檢查視頻數(shù)據(jù)格式是否合法Format checkForVideoSizes(Format original, Format supported)int width, height;Dimension size = (VideoFormat)original).getSize();Format jpegFmt = new Format(VideoFormat.JPEG_RTP);Format h263Fmt = new Format(VideoFormat.H263_RTP);if (supported.matches(jpegFmt) width = size
12、.width % 8 = 0 ? size.width : (int)(size.width / 8) * 8); height = size.height % 8 = 0 ? size.height : (int)(size.height / 8) * 8);else if (supported.matches(h263Fmt) if (size.width <= 128) width = 128;height = 96; else if (size.width <= 176) width = 176;height = 144; else width = 352;height =
13、 288; else return supported;return (new VideoFormat(null,new Dimension(width, height),Format.NOT_SPECIFIED,null,Format.NOT_SPECIFIED).intersects(supported);返回Format類型步驟三:傳輸視頻音頻數(shù)據(jù)private RTPManager rtpMgrs;private String createTransmitter()PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
14、PushBufferStream pbss = pbds.getStreams();rtpMgrs = new RTPManagerpbss.length;for (int i = 0; i < pbss.length; i+) try rtpMgrsi = RTPManager.newInstance(); int port = portBase + 2 * i; InetAddress ipAddr = InetAddress.getByName(ipAddress); SessionAddress localAddr =new SessionAddress( InetAddress
15、.getLocalHost(),port); SessionAddress destAddr = new SessionAddress( ipAddr, port); rtpMgrsi.initialize( localAddr); rtpMgrsi.addTarget( destAddr); SendStream sendStream = rtpMgrsi.createSendStream(dataOutput, i); sendStream.start(); catch (Exception e)return e.getMessage();return null;以上是程序設(shè)計中的一些結(jié)構(gòu)
16、和關(guān)鍵組件實現(xiàn)的簡要說明,下面是該項目測試運行的部份截面圖:圖1服務(wù)器運行界面 圖2客戶端網(wǎng)絡(luò)端口設(shè)置 圖3客戶端視音頻設(shè)備設(shè)置 圖4用戶列表及文字聊天界面 3 結(jié)論本項目基本上實現(xiàn)了局域網(wǎng)內(nèi)的跨平臺視音頻實時傳輸,但還存在幾個問題需要繼續(xù)研究:雖然JAVA保證了項目的跨平臺性,但由于硬件設(shè)備的差異JMF卻不完全是跨平臺的,致使本項目的跨平臺性并不純粹;基于JMF的視音頻錄像功能還未實現(xiàn);項目健壯性有待提高,特別是在反復(fù)開關(guān)視頻數(shù)據(jù)源時,由于流程復(fù)雜以及在多線程處理上的漏洞,使得程序運行的穩(wěn)定性有待提高。但總而言之本項目是具有較大的前景和意義的。今后電子辦公、視頻會議必將得到廣泛的應(yīng)用,但一個單位里的機器型號樣式會越來越多樣化,基于JMF的跨平臺視頻會議系統(tǒng)將會滿足這一需求;并且隨著軟硬件配置的提升,JAVA視頻會議系統(tǒng)的視頻采集、傳輸?shù)鹊男阅軐⒅鸩节s上基于C開發(fā)的視頻會議系統(tǒng)。在流媒體的領(lǐng)域里,重點不應(yīng)是只放在幾個孤立的關(guān)鍵技術(shù)上,而是應(yīng)該把流媒體當(dāng)作一個系統(tǒng)工程,編碼、傳輸、分享、網(wǎng)絡(luò)以及設(shè)備都是互相聯(lián)系的一個整體。怎么能在這樣一個系統(tǒng)里,最有效地將流媒體以一種最適合用戶終端設(shè)備的形式傳送
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024藝術(shù)品拍賣與宣傳推廣綜合服務(wù)合同3篇
- 2025年度環(huán)保設(shè)施PPP項目合作合同范本3篇
- 2025年度智能車庫產(chǎn)權(quán)交易合同范本4篇
- 2025年度文化產(chǎn)業(yè)園開發(fā)與租賃合同3篇
- 2025年企事業(yè)單位食堂承包與托管全面合作協(xié)議12篇
- 2025年度廠長任期項目投資與風(fēng)險管理合同3篇
- 2025年中投中財基金管理有限公司招聘筆試參考題庫含答案解析
- 2025年中化集團中化能源物流公司招聘筆試參考題庫含答案解析
- 二零二五版美容院專業(yè)護(hù)膚技術(shù)研發(fā)與轉(zhuǎn)讓合同4篇
- 二零二五版門窗安裝工程環(huán)保驗收合同2篇
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗第1部分:桌類強度和耐久性
- 第三方在線糾紛解決機制(ODR)述評,國際商法論文
- 第5章-群體-團隊溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團南部區(qū)域養(yǎng)護(hù)標(biāo)準(zhǔn)圖例
- 排水許可申請表
- 低血糖的觀察和護(hù)理課件
- 計量檢定校準(zhǔn)技術(shù)服務(wù)合同協(xié)議書
評論
0/150
提交評論