轉貼:利用JAVA語言實現(xiàn)支持視頻點播的WEB服務器
一.項目簡介: JAVA語言是一種可移植的,簡單的,健壯的嵌入式語言。并且對網絡,數據庫有很好的支持,基于JAVA語言的這種特性可以十分容易地建立一個小型INTERNET服務器。 本項目中,作者用JAVA語言編寫了一個WEB微型服務器,對簡單的HTTP請求進行響應,并通過后端數據庫對用戶的查詢進行處理,從而動態(tài)地返回HTML頁面。 二.項目實現(xiàn): (一)項目具體功能分析與開發(fā)工具選擇 可以利用一臺較高配置的個人臺式機就可以實現(xiàn)社區(qū)內的小型服務器,包括網頁瀏覽,基于高速局域網的視頻下載和播放,定時新聞組發(fā)布程序,郵件服務器等服務。 本軟件實際上是一個HTTP協(xié)議的服務器。HTTP(Hyper Text Transfer Protocol),是一個專門為Web服務器和Web瀏覽器之間交換數據而設計的網絡協(xié)議。它通過規(guī)定通用資源定位符(URLs)使客戶端的瀏覽器與服務器的Web資源建立鏈接關系,從而奠定了用戶對Internet透明訪問的基礎。 在本軟件中通過傳輸HTML文件使客戶端可以實現(xiàn)網頁瀏覽。HTML是WWW的通用標記語言,它用來創(chuàng)建Web頁面和控制Web信息顯示格式。HTML不是編程語言,而是一種描述語言。HTML2.0得到了IETF(Internet Engineering Task Force)的支持而成為Internet國際標準。目前,HTML已經發(fā)展到3.0和4.0版,只是新版本的標準尚未完全統(tǒng)一,不同的商家對HTML2.0進行了一定的擴充,引入了更多新的功能。例如,Netscape公司在HTML3.0中增加了頁面底圖(Background Images)和表(Table)定義等標記,使得Web頁面更加引人入勝。 CGI是通用網關接口(Common Gateway Interface)的簡稱,它是Web服務器與外部程序之間的通信接口,服務器并不關心外部應用程序是什么語言(如C、C++、Pascal、Delphi或Perl)編寫的,它只是負責接收用戶輸入的信息,并把CGI程序所產生的結果--HTML文檔或其他符合HTTP規(guī)定的文件回傳給用戶。事實上,CGI是動態(tài)Web頁面制作的第一步,但由于CGI程序實現(xiàn)比較困難,而且效率不高,它已經逐漸被新的技術所取代。 網頁瀏覽支持的網頁包括HTML,JAVASCRIPT,APPLET,VBSCRIPT等編寫的網頁,但不支持PHP,ASP等服務器端動態(tài)程序的網頁。由于服務器的規(guī)模較小,所以服務器端動態(tài)程序被集成進服務器中。但可以通過編寫符合一定規(guī)則的JAVA的CGI程序實現(xiàn)服務器端的動態(tài)性,不過這種JAVA程序的安全性很難保證。 (二)服務器的實現(xiàn) 1. 處理連接策略: 對于每一個用戶的連接我們采取了每次請求滿足后,將用戶與服務器的連接斷開,這時用戶如果有其他的請求,則進入請求隊列重新進行資源競爭。 通常網頁中的每一個圖形都會被看成是一個單獨的連接,也就是說對于一個圖形很多的網頁基于本服務器的連接策略將會進行多次請求,這樣的好處是防止一個容量很大的網頁獨占網絡資源。 2. 與數據庫連接 在與數據庫的連接中我們選用的后端數據庫是微軟的ACCESS數據庫,由于本項目是面向小型社區(qū)的社區(qū)數據中心服務器,所以選用小型的數據庫。由于JAVA的可移植性可以將服務器用在LINUX平臺上,這時可以用本服務器提供的數據庫配置程序連接到MySql等基于LINUX的小型數據庫。 我們應用JDBC完成與數據庫的連接。Java的一項出色能力是構建與平臺無關的客戶機/服務器數據庫應用。在Java 1.1中,通過Java數據庫連接(JDBC)實現(xiàn)了與各家公司之間的數據庫的互連。數據庫最主要的一個問題就是各家公司之間的規(guī)格大戰(zhàn)。確實存在一種"標準"數據庫語言,即"結構查詢語言"(SQL-92),但各公司為了表示自己的與眾不同對標準都有一些微小的改動。所以通常必須確切知道自己要和哪家數據庫公司打交道,否則極易出問題,盡管存在所謂的"標準"。JDBC是面向"與平臺無關"設計的,所以在編程的時候不必關心自己要使用的是什么數據庫產品。和Java中的許多API一樣,JDBC也做到了盡量的簡化。我們發(fā)出的方法調用對應于從數據庫收集數據時想當然的做法:同數據庫連接,創(chuàng)建一個語句并執(zhí)行查詢,然后處理結果集,無論與我們打交道的是哪家數據庫廠商的產品。 JDBC的使用: 為實現(xiàn)這一"與平臺無關"的特點,JDBC為我們提供了一個"驅動程序管理器",它能動態(tài)維護數據庫查詢所需的所有驅動程序對象。所以假如要連接由數家公司開發(fā)的不同種類的數據庫,就需要每個數據庫的單獨的驅動程序對象。驅動程序對象會在裝載時由"驅動程序管理器"自動注冊 ,并可用Class.forName()強行裝載。 為打開一個數據庫,必須創(chuàng)建一個"數據庫URL",它要指定下述三方面的內容: (1) 用"jdbc"指出要使用JDBC。 (2) "子協(xié)議":驅動程序的名字或者一種數據庫連接機制的名稱。由于JDBC的設計從ODBC吸收了許多靈感,所以可以選用的第一種子協(xié)議就是"jdbc-odbc橋",它用"odbc"關鍵字即可指定。 (3) 數據庫標識符:隨使用的數據庫驅動程序的不同而變化,但一般都提供了一個比較符合邏輯的名稱,由數據庫管理軟件映射(對應)到保存了數據表的一個物理目錄。為使自己的數據庫標識符具有任何含義,必須用自己的數據庫管理軟件為自己喜歡的名字 注冊 ( 注冊 的具體過程又隨運行平臺的不同而變化)。 所有這些信息都統(tǒng)一編譯到一個字串里,即"數據庫URL"。本例中,我們想通過ODBC子協(xié)議同一個標識為"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代表了與特定的數據庫之間的連接?!?br> Mysta=Mycon.createStatement(); 生成可以執(zhí)行無參數SQL語句的Statement接口。 然后就可以在Mysta中用executeQuery()函數執(zhí)行SQL語句從返回的ResultSet獲取執(zhí)行結果。 3. 網絡連接: 網絡本身的概念并不難。我們想獲得位于其他地方某臺機器上的信息,并把它們移到這兒;或者相反。這與讀寫文件非常相似,只是文件存在于遠程機器上,而且遠程機器有權決定如何處理我們請求或者發(fā)送的數據。但大多數編程語言對網絡編程都較困難,而Java最出色的一個地方就是它的"無痛苦連網"概念。有關連網的基層細節(jié)已被盡可能地提取出去,并隱藏在JVM以及Java的本機安裝系統(tǒng)里進行控制。我們使用的編程模型是一個文件的模型;事實上,網絡連接(一個"套接字")已被封裝到系統(tǒng)對象里,所以可象對其他數據流那樣采用同樣的方法調用。除此以外,在我們處理另一個連網問題--同時控制多個網絡連接--的時候,Java內建的多線程機制也是十分方便的。 服務器的主要任務是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務器對象完成的。而客戶機的任務是試著與一臺服務器建立連接,這是由我們創(chuàng)建的特定客戶機對象完成的。一旦連接建好,那么無論在服務器端還是客戶機端,連接變成了一個IO數據流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。 首先,server=new ServerSocket(80,acceptamount); 生成一個服務器端的套接字。其中第一個參數是表示服務器的監(jiān)聽端口,端口是機器內獨一無二的場所。有些時候,一個IP地址并不足以完整標識一個服務器。這是由于在一臺物理性的機器中,往往運行著多個服務器(程序)。由IP表達的每臺機器也包含了"端口"(Port)。我們設置一個客戶機或者服務器的時候,必須選擇一個無論客戶機還是服務器都認可連接的端口。端口并不是機器上一個物理上存在的場所,而是一種軟件抽象(主要是為了表述的方便)??蛻舫绦蛑廊绾瓮ㄟ^機器的IP地址同它連接,但怎樣才能同自己真正需要的那種服務連接呢(一般每個端口都運行著一種服務,一臺機器可能提供了多種服務,比如HTTP和FTP等等)?端口編號在這里扮演了重要的角色,它是必需的一種二級定址措施。 在HTTP協(xié)議中的默認服務端口是80,當然在小型社區(qū)中也可以使用其它的端口。本例中使用了默認服務端口。 Socket s=server.accept(); 這一句的作用是使服務器監(jiān)聽本機上的80端口,等待客戶機的連接。在沒有新的連接的情況下,服務器阻塞自身。當客戶機連接到服務器后函數返回一個套接字。然后,通過套接字的輸入,輸出流即可用讀取本機文件的方法與客戶機進行通信。 (三)客戶端設計 在客戶端,理想的裝置是電視機,因為當前電視機普及率高,有線電視線路遍布各地,可重用資源廣泛。但目前的電視機絕大多數是模擬電視機,它們只能接收模擬電視信號,無法接收數字電視信號,因此這種電視機的彩色圖像和伴音質量并不是很高。而數字電視無論從價格,電臺改造,線路改裝等方面都存在很大的困難,短期內難以普及。那么能否有一種折衷方案,即使目前的模擬電視機也能接收數字電視信號呢?回答是肯定的。但它們必須附加一個被稱作機頂盒(STB)的裝置。 1.機頂盒概念介紹: 機頂盒(STB,Set Top Box)的概念比較廣泛。從廣義上說,凡是與電視機連接的網絡終端設備都可稱為機頂盒,主要有有線電視網絡的模擬頻道增補器、模擬頻道解擾器,上網機頂盒、數字衛(wèi)星的綜合接收解碼器(IRD,Integrated Receive Decoder)、數字地面機頂盒,以及有線電視數字機頂盒都可稱為機頂盒。從狹義上說,我們可以將模擬設備排除在外,按主要功能將機頂盒分為上網機頂盒、數字衛(wèi)星綜合接收解碼器、數字地面機頂盒,以及有線電視數字機頂盒,這些設備由于具有很好的網絡功能,因此也成為信息家電的代表。 機頂盒也是信號傳輸介質與電視機之間的一種接口,并提供附加服務,可見它是一種中間電子設備。機頂盒可以把衛(wèi)星直播數字電視信號、地面數字電視信號、有線電視網數字信號甚至因特網的數字信號轉換成模擬電視機可以接收的信號,使現(xiàn)有的模擬電視機用戶也能分享數字化傳媒帶來的清晰,高效的科技成果。同時,它也可以實現(xiàn)電視廣播從模擬信號向數字信號的平穩(wěn)過渡,以及由于種種原因暫時不想購買電腦的人們共享因特網的信息資源和現(xiàn)代化的通信手段。機頂盒有模擬和數字之分,但現(xiàn)在人們所說的機頂盒一般指的是數字機頂盒。 2.機頂盒設計: 本設計中推薦的是上網機頂盒,這種機頂盒實際上是將電視機作為顯示器構成了一個多媒體電腦,所以又稱為WEB TV。 這種機頂盒主要是通過某種傳輸介質實現(xiàn)internet接入技術,其傳輸介質可以是電話線(電話調制解調器),有線電視網絡(電纜調制解調器)等。在這種機頂盒中較著名的有微軟公司的維納斯計劃,另外我國有許多企業(yè)陸續(xù)推出了該類產品,如康佳的"光元"網絡機頂盒、海信的"家庭網絡快車"DB-200M互聯(lián)網機頂盒、海爾的"網神"網絡機頂盒等。但以上的機頂盒大都采用電話調制解調器,這樣做的后果是占用了用戶家中幾乎所有的網絡資源(電話線和電視機),卻只能實現(xiàn)上網功能隨著低價位PC機的普及其市場份額必將進一步下降。同時數字有線電視機頂盒技術卻表現(xiàn)出了很大的發(fā)展空間。由于有線電視網絡較好的傳輸質量以及電纜調制解調器技術的成熟,使得該類機頂盒可以實現(xiàn)各種交互式應用,從而滿足各種用戶的要求。事實上,該類機頂盒可以支持幾乎所有的廣播和交互式多媒體應用,如數字電視廣播接收、電子節(jié)目指南(EPG)、準視頻點播(NVOD)、按次付費觀看(PPV)、軟件在線升級、數據廣播、Internet接入、電子郵件、IP電話和視頻點播等。 3.機頂盒中的操作系統(tǒng): 應用于數字有線電視機頂盒中的操作系統(tǒng)與大家比較熟悉的PC的操作系統(tǒng),如DOS、Windows98、Windows NT、Unix、MacOS不同,機頂盒中的操作系統(tǒng)不是非常的龐大,但卻要求可以在實時的環(huán)境中工作,并能在較小的內存空間中運行。這種操作系統(tǒng)稱為實時操作系統(tǒng)。 目前流行的實時操作系統(tǒng)有Wind River System公司的VxWorks、Integrated Systems Incorporated公司的pSOS、Microware公司的DAVID OS-9、ST公司的OS20、Windows CE以及專為機頂盒開發(fā)的PowerTV等。這些操作系統(tǒng)各有所長,在機頂盒中都有應用。其中VxWorks、pSOS、OS-9、OS20等是通用的實時操作系統(tǒng),在其他的嵌入式系統(tǒng)中也有廣泛的應用。PowerTV是專為機頂盒開發(fā)的,并將中間件集成在一起的操作系統(tǒng),在美國應用較廣。隨著嵌入式Linux的逐漸成熟,不僅為機頂盒廠商提供了一種選擇,而且由于Linux的開放性和先進的結構,會對現(xiàn)有的實時操作系統(tǒng)構成巨大的威脅。 另外,作為UNIX系統(tǒng)的一種變種,LINUX系統(tǒng)在應用軟件,系統(tǒng)集成,以及用戶開發(fā),使用習慣上都有十分大的優(yōu)勢,所以我們建議使用LINUX系統(tǒng)作為系統(tǒng)平臺。 4.中間件 中間件是一種將應用程序與低層的操作系統(tǒng)、硬件細節(jié)隔離開來的軟件環(huán)境,這種分層的思想在現(xiàn)代系統(tǒng)設計中十分常見,如大名鼎鼎的TCP/IP協(xié)議。中間件通常由各種虛擬機來構成,如HTML虛擬機、JavaScript虛擬機、Java虛擬機等。 一個完整的數字機頂盒由硬件平臺和軟件系統(tǒng)組成,可以將其分為4層,從底向上分別為硬件、底層軟件、中間件、應用軟件。硬件提供機頂盒的硬件平臺;底層軟件提供操作系統(tǒng)內核以及各種硬件驅動程序;應用軟件包括本機存儲的應用和可下載的應用;中間件將應用軟件與依賴于硬件的底層軟件分隔開來,使應用不依賴于具體的硬件平臺。這樣用戶可以在任何廠家的硬件平臺上進行應用軟件開發(fā),和應用軟件下載。不必介意任何低層的有關信息。保證了機頂盒的開發(fā)專業(yè)化。目前成熟的用于機頂盒的商用中間件產品有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技術專家小組委員會,致力于機頂盒軟件環(huán)境的定義,該軟件環(huán)境稱為DTV應用軟件環(huán)境(DASE)。ATVEF(先進電視發(fā)展論壇)也創(chuàng)建了一種稱為Advanced Television Enhancement Forum Specification for Interactive Television 的規(guī)范。 其實,任何一種分層結構都不是要求完全一絲不差的按照其結構,在中間件中我們認為JAVA虛擬機較有發(fā)展前途。因為首先,JAVA的設計初衷就是為信息家電開發(fā)提供一種簡單,健壯的嵌入式語言。正是基于這樣一種設計目標,JAVA具有小型化的能力可以在簡單的環(huán)境下運行。而價格方面的原因使機頂盒不可能,也不必要擁有同一時代的標準配置的臺式機的功能,這種相對簡單的硬件環(huán)境是可以運行JAVA虛擬機的。應用JAVA虛擬機的另一個原因是,現(xiàn)在出現(xiàn)了專門運行JAVA語言的JAVA芯片如果應用這種芯片作為機頂盒的CPU,則可以使用專門的JAVAOS作為操作系統(tǒng),利用JAVA語言的可移植性在臺式機上進行應用層開發(fā),借鑒臺式機的調試開發(fā)經驗和工具。 (四)傳輸壓縮方式 在視頻點播,網上視頻觀看中不可避免的要與數據壓縮打交道,如何將視頻數據,音頻數據在一定的失真范圍內用最小的數據量傳輸是數據壓縮要研究的一個重要的課題。數字多媒體技術的發(fā)展,突破了傳統(tǒng)的模擬化圖象的應用,圖象的采集以及存儲、處理、顯示等數字化的發(fā)展,其使我們設計的可行性大大提高。數據壓縮及編碼技術是設計中向數字機頂盒傳輸數據時的關鍵技術。圖象壓縮編碼從開始系統(tǒng)研究至今已有近50年的歷史。1988年,CCITT(現(xiàn)ITU-T)制定了可視電話/會議電視的H.261建議是極具代表性的標準,后來的MPEG-1、MPEG-2、H.263等圖象壓縮標準都是以它為基礎的。聲音壓縮編碼的標準也很多,如ITU-T制定的G.711、G.722、G.728、G.723等。限于筆者的水平我們無法對各種壓縮技術進行評價,所以在這里只作簡單的介紹。 視頻壓縮技術中數字圖象的壓縮是多媒體通信的關鍵技術,"壓縮比"是評價圖象壓縮方法性能的重要參數之一(也可按每象素多少比特反映壓縮特性),圖象壓縮比反應了圖象壓縮的困難性和可能程度,ITU-T制訂的各種標準壓縮比都不同。一般來說,壓縮比越大,算法越復雜,實時壓縮解壓縮的困難程度越大,要求的硬件環(huán)境也越高。對于可視電話,若原圖象格式采用QCIF(176×144),則原始圖象有4.5Mb/s的數據量,若最后用28.8kb/S的MODEM在PSTN上傳輸,則要提供150多倍的壓縮,遵循ITU-T和H.263標準可實現(xiàn)此壓縮,另外,H.261和MPEG-1也具有較低的碼率,適合于在現(xiàn)有網絡上傳輸視頻。MPEG-1廣泛用于VIDEO-CD的播放,H.261可應用于N-ISDN可視電話、會議電視、遠程醫(yī)療、遠程教學等各個方面。MPEG-2具有可分級性、可擴展性和互操作性,且易于與ATM、 計算機 網絡聯(lián)結等一系列高性能,但其碼率仍高達4~20Mbps,其主要目標是針對廣播電視演播室圖象質量和HDTV,現(xiàn)也應用于VOD和DVD的制作。此外,具有高級交互功能、更高圖象聲音質量和更大靈活性的MPEG-4標準,國際上正在研究制訂之中。 三.進一步工作: 新一代數字機頂盒的主要配量CPU將進一步提高主頻,其中將具備硬盤和打印控制功能、實時視頻解碼功能(符合MPEG、Qutik Time標準)和實時音頻解碼功能(符合MPEG、AC-3和Real Audio標準);以及與電視機遙控器合成一體的遙控鍵盤,這種鍵盤可以與現(xiàn)在的鍵盤接口統(tǒng)一。它還具有硬盤存儲、在線打印、畫中畫、電視與WWW跨接以及電子電視節(jié)目指南,電子郵件等功能,除為了實現(xiàn)實時視頻解碼的硬件解碼器外,機頂盒將越來越接近個人桌面電子 計算機 。它的互聯(lián)網接入功能將近一步使傳統(tǒng)的媒體供應商向網絡靠攏。電視節(jié)目制作商將自己選定的節(jié)目放入WWW網點地址(URL),用戶可以通過點擊這個標記連接WWW網點,以獲取更多的信息,下載視頻節(jié)目和應用軟件。同時用戶可以在觀看電視節(jié)目時使用網上資源。例如,一個學生在觀看一段有關火星探險的電視片時,可以點擊屏幕上的NASA(美國宇航局)標記,進入NASA的WWW網點瀏覽最新的航天科技消息,由于傳統(tǒng)媒體供應商在媒體制作和銷售等方面的經驗,現(xiàn)階段的網絡供應商將面對更大的挑戰(zhàn)。這種功能對于電視廣告商具有極大的吸引力。畫中畫功能可以使用戶一邊看電視,一邊在因特網上"沖浪",或調閱電子郵件,或進行社區(qū)內具有針對性的小范圍產品推銷。由上可見,Web TV與其說是機頂盒,倒不如說它更像一臺具有高速率通信能力的多媒體電腦,只不過它利用現(xiàn)有電視機作顯示器,并可將電視機作為因特網終端,而且應用了當前的有線電視技術將電視與因特網融為一體。 參考書目: 1. 數字圖象壓縮編碼在多媒體通信中的應用 北京郵電大學 張家謀 尹昊暉 2. 多姿多彩的數字機頂盒 3. 廣播電視技術發(fā)展展望杜百川 4. 基于WEB的數據庫技術研究 鄭成增 陳志鋒 陶勇 李思忠 5. Thinking in Java Bruce Eckel
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請
點擊舉報 。