java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统
基于Java+Socket的視頻會議系統(tǒng)設(shè)計與實現(xiàn)(畢業(yè)論文+程序源碼)
大家好,今天給大家介紹基于Java+Socket的視頻會議系統(tǒng)設(shè)計與實現(xiàn),文章末尾附有本畢業(yè)設(shè)計的論文和源碼下載地址哦。需要下載開題報告PPT模板及論文答辯PPT模板等的小伙伴,可以進入我的博客主頁查看左側(cè)最下面欄目中的自助下載方法哦
文章目錄:
- 基于Java+Socket的視頻會議系統(tǒng)設(shè)計與實現(xiàn)(畢業(yè)論文+程序源碼)
- 1、項目簡介
- 2、資源詳情
- 3、關(guān)鍵詞
- 4、畢設(shè)簡介
- 5、資源下載
1、項目簡介
2、資源詳情
項目難度:中等難度
適用場景:相關(guān)題目的畢業(yè)設(shè)計
配套論文字?jǐn)?shù):10934個字23頁
包含內(nèi)容:整套源碼+完整畢業(yè)論文
3、關(guān)鍵詞
視頻會議系統(tǒng);JAVA;RTP協(xié)議4、畢設(shè)簡介
提示:以下為畢業(yè)論文的簡略介紹,項目源碼及完整畢業(yè)論文下載地址見文末。
第一章 概述
1.1 本課題的研究背景
省略
1.2 本課題的研究意義
從實用方面:
視頻會議系統(tǒng)是指通過現(xiàn)有的各種電氣通訊傳輸媒體,將人物的靜態(tài)/動態(tài)圖像、語音、文字、圖片等多種信息分送到各個用戶的計算機上,使得在地理上分散的用戶可以共聚一處,通過圖形、聲音等多種方式交流信息,增加雙方對內(nèi)容的理解能力。視頻會議系統(tǒng)對于減少差旅費用等機構(gòu)開支;提高機構(gòu)運作效率;提高機構(gòu)形象有利于加強對外交往;有利于政策方針的迅速準(zhǔn)確傳達(dá);有利于廣泛收集意見;有利于加強內(nèi)部交流;員工培訓(xùn)等方面帶來巨大的直接和間接效益。由于視頻會議系統(tǒng)的這些優(yōu)點,使得視頻會議系統(tǒng)備受關(guān)注。并且已經(jīng)有越來越多的人利用這種方式進行交流溝通,不僅方便而且拉近了人與人之間的距離。現(xiàn)在的一些軟件像QQ以及MSN等軟件為人們的視頻聊天提供了許多方便。
1.3 本報告的目的、內(nèi)容及作者的主要貢獻
1.3.1 本報告的目的
本報告對基于JAVA的點對點視頻會議系統(tǒng)做出詳細(xì)地需求分析,并對其設(shè)計與實現(xiàn)過程進行詳細(xì)的論述。目的在于闡明本視頻會議系統(tǒng)如何能夠?qū)崿F(xiàn)多人在線舉行會議。
1.3.2 本報告的內(nèi)容
本報告內(nèi)容上從視頻會議的開發(fā)背景開始論述,研究并確定了開發(fā)環(huán)境,并對該視頻會議系統(tǒng)的需求做出了詳細(xì)的分析,根據(jù)其需求及開發(fā)工具的功能特性確立課題的設(shè)計方案及開發(fā)策略。并對課題的概要設(shè)計、詳細(xì)設(shè)計以及代碼實現(xiàn)過程和后期的測試過程,須改進的部分都進行了詳細(xì)的說明。
1.3.3 作者主要貢獻
本報告中,作者的主要貢獻:對該視頻會議系統(tǒng)進行可行性分析、需求分析、功能模塊設(shè)計、各個功能的代碼實現(xiàn)、良好用戶操作界面的設(shè)計與實現(xiàn)、對各功能實現(xiàn)結(jié)果的測試等。
1.4 國內(nèi)外相近研究課題的特點及發(fā)展趨勢
視頻會議是近幾年才發(fā)展起來的多媒體通信技術(shù)。視頻會議可實時傳送聲音、圖象;使每位與會者都有身臨其境的感覺。此外,它還提供文件傳真、靜止圖文傳送、白板等一系列輔助服務(wù)項目。視頻會議最初是"點對點"的會議傳輸(point to point),現(xiàn)已發(fā)展到"一點對多點"(point to multi points)及"多點到多點"(multi points to multi points)階段。
視頻會議系統(tǒng)的關(guān)鍵技術(shù) :1)多媒體信息處理技術(shù)2)寬帶網(wǎng)絡(luò)技術(shù)3)分布式處理技術(shù)視頻會議實現(xiàn)點對點、一點對多點、多點之間的實時同步交互通信。
視頻會議的發(fā)展趨勢:
1.5 現(xiàn)行研究存在的問題及解決辦法
1.5.1 需求分析問題
開始對課題所研究的問題不是很明確,如其應(yīng)用范圍,具體功能等。通過老師的講解及指導(dǎo)和查相關(guān)資料得以解決。
由于幾乎沒有使用過視頻會議,對其的了解也不太深刻,老師給講解了一些內(nèi)容,在網(wǎng)上下載了一個視頻會議系統(tǒng)的軟件試用了一下,并查閱了許多相關(guān)資料,這才可以對該課題進行需求分析。
1.5.2 系統(tǒng)設(shè)計問題
在該視頻會議系統(tǒng)的設(shè)計上遇到了很多問題:如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺或多臺主機,如何找到主機后如何可靠高效的進行數(shù)據(jù)傳輸;建立網(wǎng)絡(luò)之間會話;圖像的采集、壓縮及編碼;網(wǎng)絡(luò)視頻的傳輸;系統(tǒng)的界面設(shè)計等問題。
1.5.4 代碼實現(xiàn)問題
在具體的功能實現(xiàn)上,編碼遇到了極大的困難。因為該課題需要用到很多以前從未接觸到的知識,如需要用JMF,RTP協(xié)議傳輸視頻,JAVA socket編程,如何采集圖像等知識。在用JAVA語言編碼過程中,因編程規(guī)范及其他各種語法問題出現(xiàn)了很多錯誤,通過老師指導(dǎo)和查閱資料得以解決。
1.5.5 界面設(shè)計問題
本課題采用eclipse開發(fā)平臺,裝載ve插件后,用其進行圖形界面的設(shè)計和實現(xiàn)。并且在試用所下載的視頻會議系統(tǒng)后,有很大心得,根據(jù)其界面的合理性,模仿設(shè)計本課題中界面。
1.6 本課題要達(dá)到的設(shè)計目標(biāo)
本課題致力于實現(xiàn)實現(xiàn)點對點的視頻傳輸并完成基本功能(如動態(tài)視頻傳輸、文本傳輸?shù)?#xff09;,提供多人同時在線舉行會議。包含以下內(nèi)容:
1.動態(tài)視頻傳輸:視頻雙方可以看到對方的動態(tài)圖像。
2.聲音傳輸:在視頻或非視頻狀態(tài)下可以聽到對方的聲音,進行語音交流。
3.文本傳輸:可以通過文本輸入進行交流。
第二章 系統(tǒng)分析
本課題為實現(xiàn)多人在線同時舉行會議的功能,對該視頻會議系統(tǒng)做了詳細(xì)的系統(tǒng)分析。包括系統(tǒng)的可行性分析、對開發(fā)用到的關(guān)鍵技術(shù)的介紹以及系統(tǒng)的需求分析。
2.1 可行性分析
2.1.1 技術(shù)可行性
網(wǎng)絡(luò)視頻會議是順應(yīng)市場的需求而設(shè)計的。采用JAVA 編程語言,用eclipse開發(fā)平臺實現(xiàn)。用到多媒體技術(shù)(JAVA 多媒體框架JMF),視頻和音頻用TRP協(xié)議傳輸,用到Socket編程技術(shù),多播技術(shù)。網(wǎng)絡(luò)視頻會議首先是基于網(wǎng)絡(luò)傳輸?shù)?#xff0c;那么就必然要依托于JAVA網(wǎng)絡(luò)編程的相關(guān)知識。在這基礎(chǔ)上,由于相關(guān)音頻、視頻,所以還要涉及到JAVA的多媒體技術(shù)的相關(guān)知識,即JMF (Java Media Framework)。利用JAVA的這個組件,我們可以方便的處理多媒體文件,并基于RTP協(xié)議進行實時傳輸。
2.1.2 操作可行性
系統(tǒng)運行于Windows環(huán)境,其用戶操作界面友好,便于操作,適合視頻會議流程。
系統(tǒng)的基本操作如下:
1.啟動服務(wù)器;
2.用戶連接到服務(wù)器;
3.進行視頻連接;
4.舉行會議;
5.會議完畢,退出系統(tǒng)。
2.2 采用的關(guān)鍵技術(shù)介紹
2.2.1 JAVA多媒體技術(shù)
JAVA多媒體技術(shù)的核心是Java媒體框架 JMF(Java Media Framework)。JMF中包含了許多用于處理多媒體的API,它是一個很好的多媒體編程工具,同時也是一個相當(dāng)復(fù)雜的系統(tǒng)。JMF的主要應(yīng)用功能之一是多媒體數(shù)據(jù)流在網(wǎng)絡(luò)中的實時傳輸,其RTP包中提供的RTP包中提供的RTPManager(RTP管理器)、TrackContol(軌道控制器)、SendStream(發(fā)送數(shù)據(jù)流)、ReceiveStream(接收數(shù)據(jù)流)、InetAddress(IP地址)和SessionAddress(會話地址)等類使得編寫網(wǎng)絡(luò)實時數(shù)據(jù)傳輸變得容易,基于RTP協(xié)議的RTP應(yīng)用程序框架為實現(xiàn)流媒體在網(wǎng)絡(luò)中實時傳輸提供了Java程序框架,應(yīng)用它可方便的實現(xiàn)多媒體數(shù)據(jù)流在網(wǎng)絡(luò)中的實時傳輸。實時傳輸協(xié)議RTP是在Internet網(wǎng)上針對多媒體數(shù)據(jù)流的一種傳輸協(xié)議,RTP被定義為在一對一獲一對多的傳輸情況下工作的,其目的是提供時間信息和實現(xiàn)多媒體數(shù)據(jù)流的同步。RTP由RTP和RTCP(實時控制協(xié)議)兩個部分組成。RTP本身并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機制,可不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù)。
2.2.2 JAVA 網(wǎng)絡(luò)編程技術(shù)
網(wǎng)絡(luò)編程的目的就是指直接或間接地通過網(wǎng)絡(luò)協(xié)議與其他計算機進行通訊。網(wǎng)絡(luò)編程中有兩個主要的問題,一個是如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數(shù)據(jù)傳輸。在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機的定位,數(shù)據(jù)傳輸?shù)穆酚?#xff0c;由IP地址可以唯一地確定Internet上的一臺主機。而TCP層則提供面向應(yīng)用的可靠的或非可靠的數(shù)據(jù)傳輸機制,這是網(wǎng)絡(luò)編程的主要對象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的。
目前較為流行的網(wǎng)絡(luò)編程模型是客戶機/服務(wù)器(C/S)結(jié)構(gòu)。即通信雙方一方作為服務(wù)器等待客戶提出請求并予以響應(yīng)。客戶則在需要服務(wù)時向服務(wù)器提出申請。服務(wù)器一般作為守護進程始終運行,監(jiān)聽網(wǎng)絡(luò)端口,一旦有客戶請求,就會啟動一個服務(wù)進程來響應(yīng)該客戶,同時自己繼續(xù)監(jiān)聽服務(wù)端口,使后來的客戶也能及時得到服務(wù)。
數(shù)據(jù)在Internet中是以有限大小的包形式傳輸?shù)?#xff0c;這些包稱為數(shù)據(jù)報(datagram).但是,由于數(shù)據(jù)報長度有限,通常必須將數(shù)據(jù)分解為多個包,在目的地再重新組合。有可能一包或多個包在傳輸中丟失或遭到破壞。由于網(wǎng)絡(luò)視頻會議的實時性要求,不可能讓視頻傳輸?shù)拿恳回懚紲?zhǔn)確無誤。而TCP協(xié)議正是為數(shù)據(jù)可靠傳輸而設(shè)計的。那么選擇UDP協(xié)議,即用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP),就成為一種必然。
Socket是網(wǎng)絡(luò)上運行的兩個程序間雙向通訊的一端,它既可以接受請求,也可以發(fā)送請求,利用它可以較為方便的編寫網(wǎng)絡(luò)上數(shù)據(jù)的傳遞。在Java中,有專門的Socket類來處理用戶的請求和響應(yīng)。利用Socket類的方法,就可以實現(xiàn)兩臺計算機之間的通訊。在Java中Socket可以理解為客戶端或者服務(wù)器端的一個特殊的對象,這個對象有兩個關(guān)鍵的方法,一個是getInputStream方法,另一個是getOutputStream方法。getInputStream方法可以得到一個輸入流,客戶端的Socket對象上的getInputStream方法得到的輸入流其實就是從服務(wù)器端發(fā)回的數(shù)據(jù)流。GetOutputStream方法得到一個輸出流,客戶端Socket對象上的getOutputStream方法返回的輸出流就是將要發(fā)送到服務(wù)器端的數(shù)據(jù)流,(其實是一個緩沖區(qū),暫時存儲將要發(fā)送過去的數(shù)據(jù))。
多播通信是一類特殊的IP地址(D類IP地址)這些IP地址并不和任何主機關(guān)聯(lián),而是專門為多播通信保留下來的,地址范圍224.0.0.1-239.255.255.255這間,其中224.0.0.1-224.0.0.255是留作為多播路由信息使用的。此外,所有其它D類IP地址都可以隨便進行通信。
2.3 系統(tǒng)需求分析
省略
第三章 系統(tǒng)概要設(shè)計
3.1 系統(tǒng)總體設(shè)計
3.1.1 運行環(huán)境
操作系統(tǒng):Windows 2000/XP/2003 等
安裝JDK
安裝JMF
安裝eclipse
安裝攝像頭
3.1.2 系統(tǒng)流程
服務(wù)器端流程如圖3.1所示:
圖3.1 服務(wù)器端流程圖
客戶端流程如圖3.2 所示:
圖3.2 客戶端流程圖
3.1.3 系統(tǒng)結(jié)構(gòu)
通過學(xué)習(xí)和研究,我們通過多播技術(shù)實現(xiàn)了多點對多點的視頻會議系統(tǒng)。整個系統(tǒng)包括這樣幾個模塊:
文本聊天模塊:該功能是網(wǎng)絡(luò)視頻會議的最基本的功能。通過該模塊實現(xiàn)了會議成員的聊天通信。首先,每個會議職員通過與服務(wù)器連接加入到會議組,同時通過給自己取昵稱將自己的昵稱發(fā)送給服務(wù)器,讓會議組的每個成員了解自己的身份。會議成員在聊天的時候不是將文本發(fā)送給某個人,而是發(fā)送給整個會議組。
視頻通信模塊:該功能利用JMF軟件開發(fā)包,基于RTP協(xié)議實時發(fā)送和接受視頻流。并且利用JMF多媒體組件構(gòu)造播放器,進行實時播放。在實現(xiàn)了點對點的基本視頻傳輸?shù)幕A(chǔ)上,我們應(yīng)用了多播技術(shù)。當(dāng)某個會議成員開始進行視頻連接以后,他能通過視頻會議系統(tǒng)看到所有其他已經(jīng)建立視頻連接會議成員。
3.2 系統(tǒng)接口的概要設(shè)計
3.2.1 服務(wù)器端設(shè)計
省略
3.2.2 客戶端設(shè)計
系統(tǒng)客戶端的設(shè)計如下:
簡單設(shè)計圖示如下:
圖3.4 系統(tǒng)客戶端設(shè)計
3.3 系統(tǒng)出錯處理設(shè)計
3.3.1 出錯信息及處理方法
系統(tǒng)輸出信息的形式、含意及處理方法。見表3.1。
表3.1 出錯信息及處理方法
3.3.2 系統(tǒng)維護設(shè)計
為了保證系統(tǒng)的穩(wěn)定運行,本系統(tǒng)在設(shè)計時考慮到了系統(tǒng)的安全性、可靠性、兼容性、可擴展性等因素。了很多驗證條件,盡量保證信息的合法性與正確性,是系統(tǒng)能夠穩(wěn)定運行。此外本系統(tǒng)的設(shè)計還保證了系統(tǒng)功能的可擴展性。
安全性:在視頻會議系統(tǒng)前端安置加密機或者直接使用加密網(wǎng)卡可以提高在傳輸過程中的安全性。加密設(shè)備可直接提供加密能力,從而實現(xiàn)用戶的身份驗證以及未經(jīng)授權(quán)的數(shù)據(jù)訪問和惡意侵犯。
可靠性:該系統(tǒng)設(shè)計的合理性保證了可靠穩(wěn)定的運行,支持當(dāng)前大多數(shù)硬件平臺,核心線程優(yōu)先保護、數(shù)據(jù)流容錯的設(shè)計思路使系統(tǒng)可更加穩(wěn)定的運轉(zhuǎn)。
兼容性:該系統(tǒng)擁有開放的集成接口,可以非常靈活的與用戶集成,并滿足用戶的需要,實現(xiàn)其功能。
可擴展性:該系統(tǒng)可進行再擴展,在此基礎(chǔ)上擴展為一點對多點,多點對多點的視頻會議系統(tǒng)。
第四章 系統(tǒng)詳細(xì)設(shè)計
本系統(tǒng)的詳細(xì)設(shè)計根據(jù)概要設(shè)計中所劃分的各個功能模塊進行詳細(xì)的闡述:
4.1 文本聊天模塊的詳細(xì)設(shè)計
本系統(tǒng)要運用Java網(wǎng)絡(luò)編程中Socket層次,即傳統(tǒng)網(wǎng)絡(luò)編程常采用的方式,通過Client/Server(客戶端/服務(wù)器端)機構(gòu)的應(yīng)用程序之間建立Socket套接字連接,然后在連接之上進行數(shù)據(jù)通信。
通過SocketChannel建立基于UDP的無阻塞連接。創(chuàng)建一個無阻塞服務(wù)器,讓每個客戶端與之相連。某個客戶端將文本消息發(fā)送給無阻塞的服務(wù)器,服務(wù)器在將這條文本消息組播給各個與之相連的客戶端。
數(shù)據(jù)在Internet中是以有限大小的包形式傳輸?shù)?#xff0c;這些包稱為數(shù)據(jù)報(datagram).但是,由于數(shù)據(jù)報長度有限,通常必須將數(shù)據(jù)分解為多個包,在目的地再重新組合。有可能一包或多個包在傳輸中丟失或遭到破壞。由于網(wǎng)絡(luò)視頻會議的實時性要求,不可能讓視頻傳輸?shù)拿恳回懚紲?zhǔn)確無誤。而TCP協(xié)議正是為數(shù)據(jù)可靠傳輸而設(shè)計的。那么選擇UDP協(xié)議,即用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP),就成為一種必然。
基于UDP的Socket編程流程圖如下:
圖4.1 數(shù)據(jù)報套接字流程圖
服務(wù)器:
serverSocketChannel = ServerSocketChannel.open();//打開連接通道
serverSocketChannel.socket().bind(new InetSocketAddress(12345));//綁定IP與端口號
getConnection();//接收連接請求
客戶端:
socketChannel = SocketChannel.open();打開連接通道
socketChannel.connect(new InetSocketAddress(InetAddress.getByName
(serverAddress),12345));//連接到服務(wù)器
receiveMessage = new ReceivingThread();//構(gòu)造接收信息線程
receiveMessage.start();//運行線程
socketChannel.write(writeBuffer);//往通道里寫入消息
socketChannel.read(readBuffer);//讀取通道中消息
4.2 視頻通信模塊的詳細(xì)設(shè)計
4.2.1 網(wǎng)絡(luò)視頻會議系統(tǒng)結(jié)構(gòu)的詳細(xì)設(shè)計
網(wǎng)絡(luò)視頻會議系統(tǒng)其根本目的是會議。會議的基本特征就是,參與會議的每個成員都可以了解到其他成員的狀況,每個成員必須到場,然后進行交流,并且每個成員都應(yīng)該看到所有的交流內(nèi)容。在這個根本目的完成的基礎(chǔ)上,才可以使網(wǎng)絡(luò)視頻會議的特點得以發(fā)揮。所以,我們的視頻會議系統(tǒng)采用了多播的方法,使得會議的每個成員都可以得到會議的所有信息。
通過對視頻會議基本特點的分析,系統(tǒng)結(jié)構(gòu)圖如下圖所示:
圖4.2 網(wǎng)絡(luò)視頻會議系統(tǒng)結(jié)構(gòu)圖
4.2.2 視音頻傳輸?shù)脑敿?xì)設(shè)計
使用JMF API的RTP協(xié)議實現(xiàn)網(wǎng)絡(luò)多媒體程序,可以分為兩個部分,一部分是通過網(wǎng)絡(luò)發(fā)送數(shù)據(jù)的主機端程序,另一部分是接收數(shù)據(jù)的客戶端程序。
在JMF API中定義了幾個與RTP有關(guān)的包,即javax.media.rtp、javax.media.rtp.enent、javax.media.rtp.rtcp登包,通過這些包提供的API,可以實現(xiàn)RTP數(shù)據(jù)流的傳輸、接受和回放。基于JMF多媒體數(shù)據(jù)流RTP傳輸、接受和回放過程圖如下:
圖4.3 基于JMF多媒體數(shù)據(jù)流RTP傳輸、接受和回放過程
數(shù)據(jù)可以來自于多媒體文件,如視頻文件,也可以來自于音/視頻采集設(shè)備,如聲卡、攝像頭等。這些數(shù)據(jù)源的位置不同,格式不同,JMF通過一個稱為媒體定位器(Media—Locator)的類對相應(yīng)的數(shù)據(jù)源進行定位,MediaLocator對象內(nèi)仔儲了數(shù)據(jù)源的位置信息。JMF管理器(Manager)根據(jù)媒體定位器提供的信息創(chuàng)建數(shù)據(jù)源。這個數(shù)據(jù)源和文件、攝像頭等物理數(shù)據(jù)源不同,是一個抽象的概念,是多種不同類型數(shù)據(jù)源的抽象。這樣,JMF可以隱藏底層細(xì)節(jié),使編程者在編程過程中不再考慮數(shù)據(jù)的具體來源和位置,只需考慮數(shù)據(jù)的格式、速率等信息就行了。
數(shù)據(jù)源生成后 ,可以直接交給播放器(Player),設(shè)定格式后就可以在本機播放了。但若要將數(shù)據(jù)流存儲成其他格式的文件或者通過 RTP協(xié)議在網(wǎng)絡(luò)上傳輸 ,則需要對其進行再處理。再處理工作由處理器(Processor)完成 ,處理后的數(shù)據(jù)源可以存儲,也可以在網(wǎng)絡(luò)上傳輸。通過 RTP進行傳輸前 ,需要建立會話管理器(SessionManager),建立 RTP會話后再開始發(fā)送流,發(fā)送時會打開兩個端口,一個用于傳輸 RTP數(shù)據(jù)流;另一個用來傳輸 RTCP包。
多媒體數(shù)據(jù)流的接收過程是發(fā)送的逆過程。由RTP信道獲得的數(shù)據(jù)流作為接收端的數(shù)據(jù)源,對數(shù)據(jù)源處理后便可以實現(xiàn)數(shù)據(jù)流的回放、存儲,甚至再發(fā)送。
詳細(xì)設(shè)計傳輸過程:
dsVideo = createDataSource(vf);//創(chuàng)建視頻數(shù)據(jù)源 dsAudio = createDataSource(af);//創(chuàng)建音頻數(shù)據(jù)源 devices = CaptureDeviceManager.getDeviceList(format);//得到類型為format的設(shè)備的清單,存放在表devices中 ds = Manager.createDataSource(ml);//通過媒體定位器創(chuàng)建數(shù)據(jù)源 RTPTransmit rtpTransmit = new RTPTransmit(processor,ipAddr,port);//構(gòu)造RTP會話 result = createProcessor();// 產(chǎn)生一個處理器 result = createTransmitter();產(chǎn)生RTP會話,將處理器輸出的數(shù)據(jù)傳給指定的IP地址的指定的端口號 processor.start();// 讓處理器開始傳輸4.2.2 多播的詳細(xì)設(shè)計
多播基本思想是一個源IP主機只進行一次發(fā)送,多個接收者(目標(biāo) IP主機)可以接收到相同數(shù)據(jù)的一個拷貝。但是多個接收者必須都注冊加入同一多播組。IP多播服務(wù)是一種開放的服務(wù)模型,任何主機可以隨時加入或退出某個多播組。
利用這種思想,可以實現(xiàn)會議中的多點對多點的視頻傳輸,已達(dá)到組織會議的目的。多播系統(tǒng)結(jié)構(gòu)圖:
圖4.4 多播系統(tǒng)結(jié)構(gòu)圖
多播實現(xiàn)過程:
group = InetAddress.getByName(MuiltAddr); //設(shè)置組播地址 socket = new MulticastSocket(port); //創(chuàng)建MulticastSocket類并將端口與之關(guān)聯(lián) socket.joinGroup(group); //加入此組播組4.3 系統(tǒng)界面的詳細(xì)設(shè)計
本系統(tǒng)在進行界面設(shè)計的時候考慮了系統(tǒng)的功能,對各功能模塊進行詳細(xì)合理的布局:
第五章 系統(tǒng)實現(xiàn)
5.1 系統(tǒng)開發(fā)環(huán)境
系統(tǒng):Microsoft Windows
開發(fā)語言:JAVA
編程環(huán)境:Eclipse
JMF版本:JMF
JDK版本:JDK
Eclipse版本:Eclipse
5.2 系統(tǒng)實現(xiàn)
5.2.1 服務(wù)器端套接字建立
數(shù)據(jù)通訊是雙向的,客戶端通過套接字請求數(shù)據(jù)通訊后,服務(wù)器端需要有一個響應(yīng)客戶端請求通訊的服務(wù)程序,該服務(wù)器程序應(yīng)用ServerSocket類完成與客戶端的通訊。
ServerSocket類用來監(jiān)聽和響應(yīng)客戶端的連接請求,并接受客戶端發(fā)送的數(shù)據(jù)信息。ServerSocket類在服務(wù)器端等待其他機器同它的連接,一旦客戶端程序建立一個套接字連接,ServerSocket類就會通過accept()方法返回一個對應(yīng)的服務(wù)器端套接字對象,以便進行直接通訊。從兩臺計算機連接成功起,服務(wù)器端與客戶端就得到了一個真正的“套接字-套接字”連接,此時利用Socket類中的getInputStream()及getOutputStream()方法從每端的套接字產(chǎn)生對應(yīng)的InputStream和OutputStream對象,并將套接字?jǐn)?shù)據(jù)流封裝到緩沖區(qū)內(nèi)以便進行兩臺機器之間的數(shù)據(jù)通訊。
serverSocketChannel = ServerSocketChannel.open();//打開連接通道 serverSocketChannel.socket().bind(new InetSocketAddress(12345)); //綁定IP與端口號 getConnection();//接收連接請求 charSet = Charset.forName("UTF-8");//開啟服務(wù)器套接字通道 serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(newInetSocketAddress(12345)); serverSocketChannel.configureBlocking(false); //設(shè)置阻塞模式為非阻塞模式等待一個連接5.2.2 客戶端套接字建立
客戶端使用Socket類的方法建立(類似于服務(wù)器端),客戶端向套接字對象中的數(shù)據(jù)流輸出和獲取數(shù)據(jù)。客戶端程序試圖與服務(wù)器之間在Socket層次上建立一個連接,通過套接字輸入流讀取方法從套接字?jǐn)?shù)據(jù)流中獲取服務(wù)器信息,以及寫入數(shù)據(jù)到套接字輸出流中向服務(wù)器發(fā)送信息,并且等待服務(wù)器的答復(fù)。如果連接成功,則該客戶端程序通過套接字與服務(wù)器可以進行正常的數(shù)據(jù)交換。
5.2.3 視音頻發(fā)送
視音頻數(shù)據(jù)以RTP實時流的形式發(fā)送出去,通過會話管理器(Session Manager)傳輸RTP數(shù)據(jù)的步驟為:
定義以下內(nèi)容:
// 媒體定位 IP 端口 處理器 會話管理器 輸出數(shù)據(jù)源 private MediaLocator Locator; private String IpAddress; private int portBase; private Processor processor=null; private RTPManger rtpMgrs[]; private DataSource dataOutput=null;具體實現(xiàn)函數(shù)如下:
//發(fā)送數(shù)據(jù)函數(shù) public RTPTransmit(Processor processor,String ipAddress, String pb){} //為媒體定位器產(chǎn)生一個處理器 private String createProcessor(){} // 為處理器的每一個媒體磁道產(chǎn)生一個RTP會話 private String createTransmitter() {} // 讓處理器開始傳輸 public synchronized String start(){} // 停止傳輸public void stop(){}//組播線程類 class CreateJoinMuiltcastThread extends Thread {} //處理器的狀態(tài)監(jiān)聽器類 class StateListener implements ControllerListener {}5.2.4 視音頻接收
接收網(wǎng)絡(luò)實時媒體數(shù)據(jù)流是通過java.media包中定義的各種RTP事件監(jiān)聽器和RTP事件處理類來處理和控制的,使用java.media包中的Player類可以實時播放網(wǎng)絡(luò)多媒體數(shù)據(jù)流,java.media包中的處理媒體流接收和播放完成了整個接收RTP數(shù)據(jù)的過程。接收部分程序為每一種新接收到的媒體數(shù)據(jù)流產(chǎn)生一個播放器,一邊接收媒體流數(shù)據(jù),一邊將媒體數(shù)據(jù)播放出來,其實現(xiàn)分為以下幾個步驟:
定義以下內(nèi)容:
String sessions[] = null; // RTP會話字符串?dāng)?shù)組 RTPManager mgrs[] = null; // RTP管理器數(shù)組 Vector playerPanels = null; // 管理播放器窗口的向量 boolean dataReceived = false; // 是否接收到數(shù)據(jù)的標(biāo)志 Object dataSync = new Object(); // 同步對象具體實現(xiàn)函數(shù)如下:
//接收數(shù)據(jù)實現(xiàn)函數(shù) public Receive(String sessions[]) {} //初始化RTP會話,準(zhǔn)備接收數(shù)據(jù) protected boolean initialize(){} //關(guān)閉播放窗口 protected void close(){} //判斷數(shù)據(jù)是否接收完成public boolean isDone() {} // 通過播放器查找播放窗口 PlayerPanel find(Player p) {} // 通過接收數(shù)據(jù)流查找播放窗口 PlayerPanel find(ReceiveStream strm) {} //實現(xiàn)ReceiveStreamListener監(jiān)聽接口 public synchronized void update( ReceiveStreamEvent evt) {}第六章 性能測試與分析
6.1 測試實例(測試集)的研究與選擇
測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程。好的測試方案是盡可能發(fā)現(xiàn)尚未發(fā)現(xiàn)的錯誤的測試方案。
本節(jié)分別介紹各個功能的測試用例及其預(yù)期結(jié)果。
在搭建好運行環(huán)境后,運行,服務(wù)器正常連接。(如有問題時,系統(tǒng)拋出異常,提示開啟失敗對話框)
在開啟服務(wù)器之后,用戶進行連接,由于開始是在寢室連接,速度比較慢,所以連接超時,拋出異常。后又在其他地方連接成功。
進行視頻連接,連接成功,在視頻會議過程中,視音頻的傳輸都成功。后又請同學(xué)用黑盒法進行了測試,曾出現(xiàn)問題,連接中拋出異常,不能正常連接,也有的是視音頻傳輸過程中出現(xiàn)了問題,但大多都是因為人為因素(攝像頭或耳機等出現(xiàn)問題)。
在連接到服務(wù)器后,列表中顯示所有上線的用戶,在文本框中發(fā)送數(shù)據(jù),發(fā)現(xiàn)所有的用戶都能收到,證明沒有問題。
6.2 性能分析
省略
第七章 課程設(shè)計總結(jié)
本系統(tǒng)已經(jīng)完成了預(yù)期目標(biāo),并且在預(yù)期目標(biāo)基礎(chǔ)上有了一定的突破。從系統(tǒng)最初的可行性分析、需求分析、設(shè)計,到最后實現(xiàn)的過程中,經(jīng)過多次反復(fù)的修改,功能逐漸完善,已經(jīng)基本達(dá)到了實用,方便,人性化等預(yù)期目標(biāo),且能實現(xiàn)多人在線同時舉行會議。
7.1 系統(tǒng)總結(jié)
7.1.1 系統(tǒng)特點介紹
本系統(tǒng)基于JAVA語言編寫,有強大的錯誤及異常處理功能。支持當(dāng)前大多數(shù)硬件平臺,核心線程優(yōu)先保護、數(shù)據(jù)流容錯的設(shè)計思路使系統(tǒng)可更加穩(wěn)定的運轉(zhuǎn)。在視頻會議系統(tǒng)前端安置加密機或者直接使用加密網(wǎng)卡可以提高在傳輸過程中的安全性。加密設(shè)備可直接提供加密能力,從而實現(xiàn)用戶的身份驗證以及未經(jīng)授權(quán)的數(shù)據(jù)訪問和惡意侵犯。
2.人性化設(shè)計
在考慮了多方面因素,查閱相關(guān)資料和試用其他視頻會議系統(tǒng)后,總結(jié)并設(shè)計了人性化的界面,方便的菜單選項和按鈕,便捷的視頻及聊天功能,且還可以看到在線參加會議的人員,易于用戶使用。
7.1.2 系統(tǒng)存在的問題
本系統(tǒng)是點對點的視頻會議系統(tǒng),目前可完全實現(xiàn)多人在線同時舉行會議的功能。測試中是在小范圍的局域網(wǎng)內(nèi)進行的,可能在實際廣域網(wǎng)中測試不會太順利。
7.2 系統(tǒng)改進建議或設(shè)想
在系統(tǒng)改進時,可向一點對多點和多點對多點方面改進。并參考現(xiàn)在流行的一些視頻會議系統(tǒng)進行改進,且做出文件傳輸部分。
7.3 課程設(shè)計心得體會
通過這次課程設(shè)計,不僅學(xué)到了很多專業(yè)知識,而且提高了動手能力和解決實際問題的能力,受益匪淺。
此系統(tǒng)已經(jīng)實現(xiàn)了點對點視頻連接,以及一些輔助功能,并且經(jīng)過對功能的測試,反映良好。由于使用JAVA作為開發(fā)工具,所以在跨平臺方面的優(yōu)點也非常突出。在本次課程設(shè)計中學(xué)習(xí)了多媒體技術(shù),鞏固了JAVA Socket編程,更有信心進行深層次的學(xué)習(xí),并且可以結(jié)合各方面的知識進行多方面的學(xué)習(xí),積累更多知識。
.
參考文獻
[1] H.M.Deitel P.J.Deitel,Java 《程序設(shè)計教程》 清華大學(xué)出版社,2004
[2] 彭波 孫一林 《Java多媒體技術(shù)》 清華大學(xué)出版社,2004
[3] 劉成德 李 祥 《基IPMulticast/JMF的多媒體網(wǎng)絡(luò)會議系統(tǒng)的設(shè)計與實現(xiàn)》
[4] Elliotte Rusty Harold 《Java網(wǎng)絡(luò)編程》 中國電力出版社,2005
[5] 毛黎莉 潘建國 《基于JMF的RTP應(yīng)用分析與研究》
[6] 周靜 鄒北驥 《利用JMF 實現(xiàn)RTP流的傳輸與播放》
5、資源下載
本項目源碼及完整論文如下,有需要的朋友可以點擊進行下載。如果鏈接失效可點擊下方卡片掃碼自助下載。
| 本項目源碼 | 基于Java+Socket的視頻會議系統(tǒng)設(shè)計與實現(xiàn)(源碼+文檔)_java_Socket_視頻會議系統(tǒng).zip |
總結(jié)
以上是生活随笔為你收集整理的java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6月26日日志-消费记录界面实现
- 下一篇: 还在用generator生成xxx管理系