程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> Java語言實現支持視頻點播的WEB服務器

Java語言實現支持視頻點播的WEB服務器

編輯:JAVA編程入門知識

  Java語言實現支持視頻點播的WEB服務器

  一.項目簡介:

  JAVA語言是一種可移植的,簡單的,健壯的嵌入式語言。並且對網絡,數據庫有很好的支持,基於JAVA語言的這種特性可以十分輕易地建立一個小型INTERNET服務器。

  本項目中,作者用JAVA語言編寫了一個WEB微型服務器,對簡單的HTTP請求進行響應,並通過後端數據庫對用戶的查詢進行處理,從而動態地返回Html頁面。

  二.項目實現:

  (一)項目具體功能分析與開發工具選擇

  可以利用一台較高配置的個人台式機就可以實現社區內的小型服務器,包括網頁浏覽,基於高速局域網的視頻下載和播放,定時新聞組發布程序,郵件服務器等服務。

  本軟件實際上是一個HTTP協議的服務器。HTTP(Hyper Text Transfer Protocol),是一個專門為Web服務器和Web浏覽器之間交換數據而設計的網絡協議。它通過規定通用資源定位符(URLs)使客戶端的浏覽器與服務器的Web資源建立鏈接關系,從而奠定了用戶對Internet透明訪問的基礎。

  在本軟件中通過傳輸HTML文件使客戶端可以實現網頁浏覽。HTML是WWW的通用標記語言,它用來創建Web頁面和控制Web信息顯示格式。HTML不是編程語言,而是一種描述語言。HTML2.0得到了IETF(Internet Engineering Task Force)的支持而成為Internet國際標准。目前,HTML已經發展到3.0和4.0版,只是新版本的標准尚未完全統一,不同的商家對HTML2.0進行了一定的擴充,引入了更多新的功能。例如,Netscape公司在HTML3.0中增加了頁面底圖(Background Images)和表(Table)定義等標記,使得Web頁面更加引人入勝。

  CGI是通用網關接口(Common Gateway Interface)的簡稱,它是Web服務器與外部程序之間的通信接口,服務器並不關心外部應用程序是什麼語言(如C、C++、Pascal、Delphi或Perl)編寫的,它只是負責接收用戶輸入的信息,並把CGI程序所產生的結果--HTML文檔或其他符合HTTP規定的文件回傳給用戶。事實上,CGI是動態Web頁面制作的第一步,但由於CGI程序實現比較困難,而且效率不高,它已經逐漸被新的技術所取代。

  網頁浏覽支持的網頁包括HTML,javascript,APPLET,VBSCRIPT等編寫的網頁,但不支持PHP,ASP等服務器端動態程序的網頁。由於服務器的規模較小,所以服務器端動態程序被集成進服務器中。但可以通過編寫符合一定規則的JAVA的CGI程序實現服務器端的動態性,不過這種JAVA程序的安全性很難保證。

  (二)服務器的實現

  1. 處理連接策略:

  對於每一個用戶的連接我們采取了每次請求滿足後,將用戶與服務器的連接斷開,這時用戶假如有其他的請求,則進入請求隊列重新進行資源競爭。

  通常網頁中的每一個圖形都會被看成是一個單獨的連接,也就是說對於一個圖形很多的網頁基於本服務器的連接策略將會進行多次請求,這樣的好處是防止一個容量很大的網頁獨占網絡資源。

  2. 與數據庫連接

  在與數據庫的連接中我們選用的後端數據庫是微軟的Access數據庫,由於本項目是面向小型社區的社區數據中心服務器,所以選用小型的數據庫。由於JAVA的可移植性可以將服務器用在Linux平台上,這時可以用本服務器提供的數據庫配置程序連接到mysql等基於LINUX的小型數據庫。

  
   我們應用JDBC完成與數據庫的連接。Java的一項出色能力是構建與平台無關的客戶機/服務器數據庫應用。在Java 1.1中,通過Java數據庫連接(JDBC)實現了與各家公司之間的數據庫的互連。數據庫最主要的一個問題就是各家公司之間的規格大戰。確實存在一種"標准"數據庫語言,即"結構查詢語言"(SQL-92),但各公司為了表示自己的與眾不同對標准都有一些微小的改動。所以通常必須確切知道自己要和哪家數據庫公司打交道,否則極易出問題,盡管存在所謂的"標准"。JDBC是面向"與平台無關"設計的,所以在編程的時候不必關心自己要使用的是什麼數據庫產品。和Java中的許多API一樣,JDBC也做到了盡量的簡化。我們發出的方法調用對應於從數據庫收集數據時想當然的做法:同數據庫連接,創建一個語句並執行查詢,然後處理結果集,無論與我們打交道的是哪家數據庫廠商的產品。

  JDBC的使用:

  為實現這一"與平台無關"的特點,JDBC為我們提供了一個"驅動程序治理器",它能動態維護數據庫查詢所需的所有驅動程序對象。所以假如要連接由數家公司開發的不同種類的數據庫,就需要每個數據庫的單獨的驅動程序對象。驅動程序對象會在裝載時由"驅動程序治理器"自動注冊,並可用Class.forName()強行裝載。

  為打開一個數據庫,必須創建一個"數據庫URL",它要指定下述三方面的內容:

  (1) 用"jdbc"指出要使用JDBC。

  (2) "子協議":驅動程序的名字或者一種數據庫連接機制的名稱。由於JDBC的設計從ODBC吸收了許多靈感,所以可以選用的第一種子協議就是"jdbc-odbc橋",它用"odbc"要害字即可指定。

  (3) 數據庫標識符:隨使用的數據庫驅動程序的不同而變化,但一般都提供了一個比較符合邏輯的名稱,由數據庫治理軟件映射(對應)到保存了數據表的一個物理目錄。為使自己的數據庫標識符具有任何含義,必須用自己的數據庫治理軟件為自己喜歡的名字注冊(注冊的具體過程又隨運行平台的不同而變化)。

  所有這些信息都統一編譯到一個字串裡,即"數據庫URL"。本例中,我們想通過ODBC子協議同一個標識為"vod"的數據庫連接,相應的數據庫URL設為:

  String dbUrl = "jdbc:odbc:vod"

  同樣假如通過一個網絡連接,數據庫URL也需要包含對遠程機器進行標識的信息。

  JDBC的連接方式:

  首先,JDBC中在DriverManager中對數據庫數據庫驅動程序進行登記。

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  裝載JDBC- ODBC橋驅動程序,這樣做是為了讓DriverManager可以找到數據庫驅動程序。然後利用DriverManager打開與數據庫的連接。

  Mycon=DriverManager.getConnection(dbUrl);

  本語句的作用是,確定與由dbUrl指定的數據庫的連接。DriverManager將從其中登記的驅動程序中尋找最適當的驅動程序。返回的Mycon代表了與特定的數據庫之間的連接。 

  Mysta=Mycon.createStatement();

  生成可以執行無參數SQL語句的Statement接口。 然後就可以在Mysta中用executeQuery()函數執行SQL語句從返回的ResultSet獲取執行結果。

  3. 網絡連接:

  網絡本身的概念並不難。我們想獲得位於其他地方某台機器上的信息,並把它們移到這兒;或者相反。這與讀寫文件非常相似,只是文件存在於遠程機器上,而且遠程機器有權決定如何處理我們請求或者發送的數據。但大多數編程語言對網絡編程都較困難,而Java最出色的一個地方就是它的"無痛苦連網"概念。有關連網的基層細節已被盡可能地提取出去,並隱藏在JVM以及Java的本機安裝系統裡進行控制。我們使用的編程模型是一個文件的模型;事實上,網絡連接(一個"套接字")已被封裝到系統對象裡,所以可象對其他數據流那樣采用同樣的方法調用。除此以外,在我們處理另一個連網問題--同時控制多個網絡連接--的時候,Java內建的多線程機制也是十分方便的。

  服務器的主要任務是偵聽建立連接的請求,這是由我們創建的特定服務器對象完成的。而客戶機的任務是試著與一台服務器建立連接,這是由我們創建的特定客戶機對象完成的。一旦連接建好,那麼無論在服務器端還是客戶機端,連接變成了一個IO數據流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。

  首先,server=new ServerSocket(80,acceptamount);

  生成一個服務器端的套接字。其中第一個參數是表示服務器的監聽端口,端口是機器內獨一無二的場所。有些時候,一個IP地址並不足以完整標識一個服務器。這是由於在一台物理性的機器中,往往運行著多個服務器(程序)。由IP表達的每台機器也包含了"端口"(Port)。我們設置一個客戶機或者服務器的時候,必須選擇一個無論客戶機還是服務器都認可連接的端口。端口並不是機器上一個物理上存在的場所,而是一種軟件抽象(主要是為了表述的方便)。客戶程序知道如何通過機器的IP地址同它連接,但怎樣才能同自己真正需要的那種服務連接呢(一般每個端口都運行著一種服務,一台機器可能提供了多種服務,比如HTTP和FTP等等)?端口編號在這裡扮演了重要的角色,它是必需的一種二級定址措施。

  在HTTP協議中的默認服務端口是80,當然在小型社區中也可以使用其它的端口。本例中使用了默認服務端口。

  Socket s=server.accept();

  這一句的作用是使服務器監聽本機上的80端口,等待客戶機的連接。在沒有新的連接的情況下,服務器阻塞自身。當客戶機連接到服務器後函數返回一個套接字。然後,通過套接字的輸入,輸出流即可用讀取本機文件的方法與客戶機進行通信。

  (三)客戶端設計

  在客戶端,理想的裝置是電視機,因為當前電視機普及率高,有線電視線路遍布各地,可重用資源廣泛。但目前的電視機絕大多數是模擬電視機,它們只能接收模擬電視信號,無法接收數字電視信號,因此這種電視機的彩色圖像和伴音質量並不是很高。而數字電視無論從價格,電台改造,線路改裝等方面都存在很大的困難,短期內難以普及。那麼能否有一種折衷方案,即使目前的模擬電視機也能接收數字電視信號呢?回答是肯定的。但它們必須附加一個被稱作機頂盒(STB)的裝置。

  
   1.機頂盒概念介紹:

  機頂盒(STB,Set Top Box)的概念比較廣泛。從廣義上說,凡是與電視機連接的網絡終端設備都可稱為機頂盒,主要有有線電視網絡的模擬頻道增補器、模擬頻道解擾器,上網機頂盒、數字衛星的綜合接收解碼器(IRD,Integrated Receive Decoder)、數字地面機頂盒,以及有線電視數字機頂盒都可稱為機頂盒。從狹義上說,我們可以將模擬設備排除在外,按主要功能將機頂盒分為上網機頂盒、 數字衛星綜合接收解碼器、數字地面機頂盒,以及有線電視數字機頂盒,這些設備由於具有很好的網絡功能,因此也成為信息家電的代表。 機頂盒也是信號傳輸介質與電視機之間的一種接口,並提供附加服務,可見它是一種中間電子設備。機頂盒可以把衛星直播數字電視信號、地面數字電視信號、有線電視網數字信號甚至因特網的數字信號轉換成模擬電視機可以接收的信號,使現有的模擬電視機用戶也能分享數字化傳媒帶來的清楚,高效的科技成果。同時,它也可以實現電視廣播從模擬信號向數字信號的平穩過渡,以及由於種種原因暫時不想購買電腦的人們共享因特網的信息資源和現代化的通信手段。機頂盒有模擬和數字之分,但現在人們所說的機頂盒一般指的是數字機頂盒。

  2.機頂盒設計:

  本設計中推薦的是上網機頂盒,這種機頂盒實際上是將電視機作為顯示器構成了一個多媒體電腦,所以又稱為WEB TV。

  這種機頂盒主要是通過某種傳輸介質實現internet接入技術,其傳輸介質可以是電話線(電話調制解調器),有線電視網絡(電纜調制解調器)等。在這種機頂盒中較聞名的有微軟公司的維納斯計劃,另外我國有許多企業陸續推出了該類產品,如康佳的"光元"網絡機頂盒、海信的"家庭網絡快車"DB-200M互聯網機頂盒、海爾的"網神"網絡機頂盒等。但以上的機頂盒大都采用電話調制解調器,這樣做的後果是占用了用戶家中幾乎所有的網絡資源(電話線和電視機),卻只能實現上網功能隨著低價位PC機的普及其市場份額必將進一步下降。同時數字有線電視機頂盒技術卻表現出了很大的發展空間。由於有線電視網絡較好的傳輸質量以及電纜調制解調器技術的成熟,使得該類機頂盒可以實現各種交互式應用,從而滿足各種用戶的要求。事實上,該類機頂盒可以支持幾乎所有的廣播和交互式多媒體應用,如數字電視廣播接收、電子節目指南(EPG)、准視頻點播(NVOD)、按次付費觀看(PPV)、軟件在線升級、數據廣播、Internet接入、電子郵件、IP電話和視頻點播等。

  3.機頂盒中的操作系統:

  應用於數字有線電視機頂盒中的操作系統與大家比較熟悉的PC的操作系統,如DOS、Windows98、Windows NT、Unix、MacOS不同,機頂盒中的操作系統不是非常的龐大,但卻要求可以在實時的環境中工作,並能在較小的內存空間中運行。這種操作系統稱為實時操作系統。

  目前流行的實時操作系統有Wind River System公司的VxWorks、Integrated Systems Incorporated公司的pSOS、Microware公司的DAVID OS-9、ST公司的OS20、Windows CE以及專為機頂盒開發的PowerTV等。這些操作系統各有所長,在機頂盒中都有應用。其中VxWorks、pSOS、OS-9、OS20等是通用的實時操作系統,在其他的嵌入式系統中也有廣泛的應用。PowerTV是專為機頂盒開發的,並將中間件集成在一起的操作系統,在美國應用較廣。隨著嵌入式Linux的逐漸成熟,不僅為機頂盒廠商提供了一種選擇,而且由於Linux的開放性和先進的結構,會對現有的實時操作系統構成巨大的威脅。

  另外,作為UNIX系統的一種變種,LINUX系統在應用軟件,系統集成,以及用戶開發,使用習慣上都有十分大的優勢,所以我們建議使用LINUX系統作為系統平台。

  4.中間件

  中間件是一種將應用程序與低層的操作系統、硬件細節隔離開來的軟件環境,這種分層的思想在現代系統設計中十分常見,如大名鼎鼎的TCP/IP協議。中間件通常由各種虛擬機來構成,如HTML虛擬機、JavaScript虛擬機、Java虛擬機等。

  一個完整的數字機頂盒由硬件平台和軟件系統組成,可以將其分為4層,從底向上分別為硬件、底層軟件、中間件、應用軟件。硬件提供機頂盒的硬件平台;底層軟件提供操作系統內核以及各種硬件驅動程序;應用軟件包括本機存儲的應用和可下載的應用;中間件將應用軟件與依靠於硬件的底層軟件分隔開來,使應用不依靠於具體的硬件平台。這樣用戶可以在任何廠家的硬件平台上進行應用軟件開發,和應用軟件下載。不必介意任何低層的有關信息。保證了機頂盒的開發專業化。目前成熟的用於機頂盒的商用中間件產品有Opentv的EN2、Liberate的TV Navigator for DTV、Enreach的EnreachTV for DTV、Canel+ 的Mediahighway和Intellibyte的IB EPG、IB SI Manager、IB Browser等,這些產品在市場上都占有一席之地,但彼此並不兼容。

  標准組織已經熟悉到已有中間件產品兼容性差這個事實,並且開始著手建立開放的中間件標准。DVB提出了基於Java虛擬機的中間件標准DVB-MHP(多媒體家庭平台);ATSC成立了T3/S17技術專家小組委員會,致力於機頂盒軟件環境的定義,該軟件環境稱為DTV應用軟件環境(DASE)。ATVEF(先進電視發展論壇)也創建了一種稱為Advanced Television Enhancement Forum Specification for Interactive Television 的規范。

  其實,任何一種分層結構都不是要求完全一絲不差的按照其結構,在中間件中我們認為JAVA虛擬機較有發展前途。因為首先,JAVA的設計初衷就是為信息家電開發提供一種簡單,健壯的嵌入式語言。正是基於這樣一種設計目標,JAVA具有小型化的能力可以在簡單的環境下運行。而價格方面的原因使機頂盒不可能,也不必要擁有同一時代的標准配置的台式機的功能,這種相對簡單的硬件環境是可以運行JAVA虛擬機的。應用JAVA虛擬機的另一個原因是,現在出現了專門運行JAVA語言的JAVA芯片假如應用這種芯片作為機頂盒的CPU,則可以使用專門的JAVAOS作為操作系統,利用JAVA語言的可移植性在台式機上進行應用層開發,借鑒台式機的調試開發經驗和工具。

  
   (四)傳輸壓縮方式

  在視頻點播,網上視頻觀看中不可避免的要與數據壓縮打交道,如何將視頻數據,音頻數據在一定的失真范圍內用最小的數據量傳輸是數據壓縮要研究的一個重要的課題。數字多媒體技術的發展,突破了傳統的模擬化圖象的應用,圖象的采集以及存儲、處理、顯示等數字化的發展,其使我們設計的可行性大大提高。數據壓縮及編碼技術是設計中向數字機頂盒傳輸數據時的要害技術。圖象壓縮編碼從開始系統研究至今已有近50年的歷史。1988年,CCITT(現ITU-T)制定了可視電話/會議電視的H.261建議是極具代表性的標准,後來的MPEG-1、MPEG-2、H.263等圖象壓縮標准都是以它為基礎的。聲音壓縮編碼的標准也很多,如ITU-T制定的G.711、G.722、G.728、G.723等。限於筆者的水平我們無法對各種壓縮技術進行評價,所以在這裡只作簡單的介紹。

  視頻壓縮技術中數字圖象的壓縮是多媒體通信的要害技術,"壓縮比"是評價圖象壓縮方法性能的重要參數之一(也可按每象素多少比特反映壓縮特性),圖象壓縮比反應了圖象壓縮的困難性和可能程度,ITU-T制訂的各種標准壓縮比都不同。一般來說,壓縮比越大,算法越復雜,實時壓縮解壓縮的困難程度越大,要求的硬件環境也越高。對於可視電話,若原圖象格式采用QCIF(176×144),則原始圖象有4.5Mb/s的數據量,若最後用28.8kb/S的MODEM在PSTN上傳輸,則要提供150多倍的壓縮,遵循ITU-T和H.263標准可實現此壓縮,另外,H.261和MPEG-1也具有較低的碼率,適合於在現有網絡上傳輸視頻。MPEG-1廣泛用於VIDEO-CD的播放,H.261可應用於N-ISDN可視電話、會議電視、遠程醫療、遠程教學等各個方面。MPEG-2具有可分級性、可擴展性和互操作性,且易於與ATM、計算機網絡聯結等一系列高性能,但其碼率仍高達4~20Mbps,其主要目標是針對廣播電視演播室圖象質量和HDTV,現也應用於VOD和DVD的制作。此外,具有高級交互功能、更高圖象聲音質量和更大靈活性的MPEG-4標准,國際上正在研究制訂之中。

  三.進一步工作:

  新一代數字機頂盒的主要配量CPU將進一步提高主頻,其中將具備硬盤和打印控制功能、實時視頻解碼功能(符合MPEG、Qutik Time標准)和實時音頻解碼功能(符合MPEG、AC-3和Real Audio標准);以及與電視機遙控器合成一體的遙控鍵盤,這種鍵盤可以與現在的鍵盤接口統一。它還具有硬盤存儲、在線打印、畫中畫、電視與WWW跨接以及電子電視節目指南,電子郵件等功能,除為了實現實時視頻解碼的硬件解碼器外,機頂盒將越來越接近個人桌面電子計算機。它的互聯網接入功能將近一步使傳統的媒體供給商向網絡靠攏。電視節目制作商將自己選定的節目放入WWW網點地址(URL),用戶可以通過點擊這個標記連接WWW網點,以獲取更多的信息,下載視頻節目和應用軟件。同時用戶可以在觀看電視節目時使用網上資源。例如,一個學生在觀看一段有關火星探險的電視片時,可以點擊屏幕上的NASA(美國宇航局)標記,進入NASA的WWW網點浏覽最新的航天科技消息,由於傳統媒體供給商在媒體制作和銷售等方面的經驗,現階段的網絡供給商將面對更大的挑戰。這種功能對於電視廣告商具有極大的吸引力。畫中畫功能可以使用戶一邊看電視,一邊在因特網上"沖浪",或調閱電子郵件,或進行社區內具有針對性的小范圍產品推銷。由上可見,Web TV與其說是機頂盒,倒不如說它更像一台具有高速率通信能力的多媒體電腦,只不過它利用現有電視機作顯示器,並可將電視機作為因特網終端,而且應用了當前的有線電視技術將電視與因特網融為一體。


 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved