一、前言
隨著越來越多的朋友開始選擇ADSL、CableModem或FTTB+LAN作為首要的上網(wǎng)方式,寬頻時代即將到來,這使我們“寬頻KTV、影音聊天室、線上電影院、遠(yuǎn)程教育”的夢想即將成為現(xiàn)實(shí),而與其密切相關(guān)的“流媒體(StreamingMedia)”也成了許多人談?wù)摰臒衢T話題,因?yàn)?#8220;流媒體”正是實(shí)現(xiàn)這些寬頻應(yīng)用的技術(shù)動力。
寬頻時代的到來還使得網(wǎng)民們不再滿足于僅僅作為一項(xiàng)服務(wù)的受眾,他們需要更大規(guī)模的交流,從中體現(xiàn)個體的價(jià)值,因此,許多朋友開始用自己的計(jì)算機(jī),搭建網(wǎng)絡(luò)廣播和點(diǎn)播站點(diǎn)。他們充滿著滿腔的熱情,但不可否認(rèn)的是,中國網(wǎng)民先天技術(shù)上的不足,讓他們在建設(shè)這樣的站點(diǎn)時遇到重重險(xiǎn)阻,以至于放棄。如何將這種熱情在技術(shù)的引導(dǎo)下成為動力,這正是我們家用電腦所要做的,所以,在今天,在這里,我就將給大家介紹如何打造屬于自己的流媒體服務(wù)器。
不過,在開始正式的流媒體服務(wù)器架設(shè)之前,請讓我們先了解一下流媒體服務(wù)器的基礎(chǔ)知識。
二、流媒體基礎(chǔ)知識
什么是流媒體?
目前,在網(wǎng)絡(luò)上傳輸音/視頻等多媒體信息有兩種解決方案,即http或ftp下載以及流式傳輸。
http或ftp下載使用標(biāo)準(zhǔn)的http和ftp協(xié)議,但由于多媒體信息個頭巨大,下載一個多媒體文件一般需要幾分鐘或幾小時的時間,這就造成為了看一個并不知道內(nèi)容的視頻,首先需要耗費(fèi)可能比整個視頻都要長的時間來完成下載。這些被下載的文件還必須在下載前制作完成,放在網(wǎng)絡(luò)服務(wù)器上,這樣造成的直接后果就是:網(wǎng)絡(luò)帶寬不斷提高,人們下載的等待時間越來越少,但最終還是不能觀看網(wǎng)上現(xiàn)場直播。
流式傳輸時,聲音、影像或動畫等多媒體信息由流媒體服務(wù)器向用戶計(jì)算機(jī)連續(xù)、實(shí)時傳送,它首先在使用者端的電腦上創(chuàng)建一個緩沖區(qū),于播放前預(yù)先下載一段資料作為緩沖,用戶不必等到整個文件全部下載完畢,而只需經(jīng)過幾秒或十?dāng)?shù)秒的啟動延時即可進(jìn)行觀看。當(dāng)多媒體信息在客戶機(jī)上播放時,文件的剩余部分將在后臺從服務(wù)器內(nèi)繼續(xù)下載。如果網(wǎng)絡(luò)連接速度小于播放的多媒體信息需要的速度時,播放程序就會取用先前建立的一小段緩沖區(qū)內(nèi)的資料,避免播放的中斷,使得播放品質(zhì)得以維持。
流式傳輸除了能夠發(fā)送已經(jīng)制作完成的文件外,還可以通過采集服務(wù)器實(shí)時采集現(xiàn)場音視頻,推送到流媒體服務(wù)器端,實(shí)時提供給用戶。因此,流媒體除了能夠更好的承擔(dān)如下載一樣的多媒體點(diǎn)播服務(wù)外,更能夠應(yīng)用在現(xiàn)場直播、電視轉(zhuǎn)播、突發(fā)事件報(bào)道等多種對實(shí)時性傳輸要求較高的領(lǐng)域。
有關(guān)流媒體的廠商
流媒體的市場巨大,世界上許多優(yōu)秀的廠商都加入此行列,現(xiàn)階段更是系統(tǒng)集成商競爭的風(fēng)水寶地。而在通用市場上,競爭的公司主要有三個:Microsoft、RealNetworks、Apple,而相應(yīng)的產(chǎn)品就是:WindowsMedia、RealMedia、QuickTime。而近來,以開發(fā)Winamp著名的Nullsoft公司也在自己的MP3服務(wù)器中加入了視頻支持,欲在流媒體市場分一杯羹。
由于Apple的服務(wù)器和編輯軟件一般都以Mac為操作平臺,Nullsoft的流媒體服務(wù)器屬于新生不成熟事務(wù),所以今天在這里我主要給大家介紹一下Microsoft和RealNetworks的產(chǎn)品。
流媒體的傳輸協(xié)議
大家在觀看網(wǎng)上電影或者電視時,一般都會注意到這些文件的連接都不是用http或者ftp開頭,而是一些rtsp或者mms開頭的東西,為什么是這樣呢?實(shí)際上,這些和http和ftp一樣,都是數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)膮f(xié)議,只是它們是專門用來傳輸流式媒體的協(xié)議而已。下面,讓我們來看一下現(xiàn)在使用的主要的流媒體協(xié)議:
1.RTSP(RealTimeStreamingProtocol),實(shí)時流媒體協(xié)議,它是由RealNetworks和Netscape共同提出的,現(xiàn)在用于RealNetworks的RealMedia產(chǎn)品中;
2.PNM(ProgressiveNetworksAudio),這也是Real專用的實(shí)時傳輸協(xié)議,它一般采用UDP協(xié)議,并占用7070端口,但當(dāng)你的服務(wù)器在防火墻內(nèi)且7070端口被擋,且你的服務(wù)器把SmartingNetwork設(shè)為真時,則采用http協(xié)議,并占用默認(rèn)的80端口;
3.MMS(MicrosoftMediaServerprotocol),這是微軟的流媒體服務(wù)器協(xié)議,MMS是連接WindowsMedia單播服務(wù)的默認(rèn)方法。
介紹了主要的三個,可能您還會問,Apple的QuickTime使用哪種協(xié)議呢?在多數(shù)情況下,QuickTime使用http協(xié)議,但實(shí)際上它也由標(biāo)準(zhǔn)的流媒體傳輸協(xié)議,這就是標(biāo)準(zhǔn)RTSP協(xié)議,而Real公司使用的RTSP是自己經(jīng)過開發(fā)的。
在流媒體傳輸中,標(biāo)準(zhǔn)的協(xié)議就是RTP(RealtimeTransportProtocol,實(shí)時傳輸協(xié)議)、RTCP(Real-timeTransportControlProtocol,實(shí)時傳輸控制協(xié)議)、RTSP(RealTimeStreamingProtocol,實(shí)時流媒體協(xié)議)和RSVP(ResourceReserveProtocol,資源預(yù)訂協(xié)議),廠商們的產(chǎn)品都是在這些協(xié)議的基礎(chǔ)上進(jìn)行研究與開發(fā),限于篇幅,在這里我們就不再深入討論了。
流媒體文件和發(fā)布格式
有了實(shí)時的傳輸協(xié)議,我們應(yīng)該還能夠想到,只有較小的文件才適合網(wǎng)絡(luò)實(shí)時傳輸,那么,流媒體文件采用了什么樣的壓縮算法呢?
而使用Windows操作系統(tǒng)的朋友可以看到,我們觀看網(wǎng)上流節(jié)目時,它們的后綴名一般是rm、asf、wmv等,這些就是流媒體的格式。流媒體文件格式經(jīng)過特殊編碼,不僅采用較高的壓縮比,還加入了許多控制信息,使其適合在網(wǎng)絡(luò)上邊下載邊播放,而不是等到下載完整個文件才能播放。
常見的流媒體格式大致有以下幾種:
流媒體文件格式擴(kuò)展(Video/Audio)媒體類型與名稱
asfAdvancedStreamingformat.(Microsoft).
rmRealVideo/Audio文件(ProgressiveNetworks).
raRealAudio文件(ProgressiveNetworks).
rpRealPix文件(ProgressiveNetworks).
rtRealText文件(ProgressiveNetworks).
swfShockWaveFlash(Macromedia).
movQuickTime(Apple公司格式)
vivVivoMovie文件(VivoSoftware).
另外還有一個wmv格式,是WindowsMediaVideo的簡稱,它與asf文件有稍許區(qū)別,wmv一般采用windowmediavideo/audio格式,asf視頻部分一般采用MicrosoftMPG4V(3/2/1?),音頻部分是windowsmediaaudiov2/1,不過現(xiàn)在很多制作軟件都沒有把它們分開,所以直接更改后綴名就能夠互相轉(zhuǎn)換為對方格式。
制作完成的流媒體文件需要發(fā)布到網(wǎng)絡(luò)上才能夠被別人使用,這就需要以特定方式安排壓縮好的流媒體文件,而安排流媒體文件的格式就被成為流媒體發(fā)布格式。常見的發(fā)布格式主要有以下幾種:
流媒體發(fā)布格式擴(kuò)展媒體類型和名稱
asfAdvancedStreamingformat.
smilSynchronisedMultimediaIntegrationLanguage.
ramRAMFile.
rpmEmbeddedRAMFile.
asxASFStreamRedirector/ASF流轉(zhuǎn)向器文件
xmleXtensibleMarkupLanguage
MPEG-4與流媒體
說到流媒體就不能不提及MPEG-4。MPEG-4是當(dāng)前討論的焦點(diǎn)之一,只因?yàn)樗軌蛟诖蟮膲嚎s比下實(shí)現(xiàn)近似DVD品質(zhì)的視頻和音頻效果,這也是許多朋友認(rèn)為MPEG-4格式肯定比rm清晰的原因。但事實(shí)上并不是如此,MPEG-4只是一種視頻編碼技術(shù),它的清晰度也根據(jù)壓縮時所選擇的碼率的不同有較大的改變(我們見到的MPEG-4格式文件通常為500Kbps壓縮生成,質(zhì)量當(dāng)然高了),并且,MPEG-4還有多種壓縮標(biāo)準(zhǔn),如Microsoft的asf視頻部分就是基于MPEG-4的DiscreteCosineTransform(DCT),另外還有DivX的免費(fèi)MPEG-4版本(開始是破解微軟的格式而來)。至于音頻部分,更是混亂,Microsoft采用windowsmediaaudiov2/1,DivX采用MP3或者更高質(zhì)量的AC3等。相比而言,Real或者Apple的格式使用的是自己開發(fā)的編碼,在相同碼率,特別是低碼率下,不見得就比MPEG-4差,采取高碼率的rm格式照樣清晰可人,所以大家以后說rm格式清晰度差的觀念要改變一下:),至少也要加上條件。而且,最新的HelixProducer中的RealVideo9采用VP5壓縮格式進(jìn)行編碼,這可比DivX優(yōu)秀多了!
不過,流媒體服務(wù)器開始向MPEG-4格式靠攏是不爭的事實(shí),Real最新的Helix就開始支持mp4格式文件的服務(wù),而RealOnePlayer更是只需安裝一個插件便可實(shí)現(xiàn)MPEG-4格式的播放。
點(diǎn)播與廣播
在架設(shè)流媒體服務(wù)器之前,我們一定要了解一些點(diǎn)播與廣播的知識。
點(diǎn)播是客戶端與服務(wù)器之間的主動的連接,在點(diǎn)播連接中,用戶通過選擇內(nèi)容項(xiàng)目來初始化客戶端連接,一個客戶端從服務(wù)器接收一個媒體流(這個連接是唯一的,其它用戶不能占用),并且能夠?qū)γ襟w進(jìn)行開始、停止、后退、快進(jìn)或暫停等操作,客戶端擁有流的控制權(quán),就像在看影碟一樣。這種方式由于每個客戶端各自連接服務(wù)器,服務(wù)器需要給每個用戶建立連接,對服務(wù)器資源和網(wǎng)絡(luò)帶寬的需求都比較大。
廣播指的是用戶被動接收流。在廣播過程中,客戶端接收流,但不能控制流,用戶不能暫停、快進(jìn)或后退該流,廣播使用的數(shù)據(jù)發(fā)送手段有單播與廣播。使用單播發(fā)送時,服務(wù)器需要將數(shù)據(jù)包復(fù)制多個拷貝,以多個點(diǎn)對點(diǎn)的方式分別發(fā)送到需要它的那些用戶,而使用廣播方式發(fā)送,數(shù)據(jù)包的單獨(dú)一個拷貝將發(fā)送給網(wǎng)絡(luò)上的所有用戶,而不管用戶是否需要,上述兩種傳輸方式會非常浪費(fèi)網(wǎng)絡(luò)帶寬和服務(wù)器資源,因此產(chǎn)生了組播(多播)技術(shù)。
組播(多播)吸收了上述兩種發(fā)送方式的長處,克服了上述兩種發(fā)送方式的弱點(diǎn),將數(shù)據(jù)包的單獨(dú)一個拷貝發(fā)送給需要的那些客戶,組播不會復(fù)制數(shù)據(jù)包的多個拷貝傳輸?shù)骄W(wǎng)絡(luò)上,也不會將數(shù)據(jù)包發(fā)送給不需要它的那些客戶,保證了網(wǎng)絡(luò)上多媒體應(yīng)用占用網(wǎng)絡(luò)的最小帶寬。但組播不僅需要服務(wù)器端支持,更需要有多播路由器乃至整個網(wǎng)絡(luò)結(jié)構(gòu)的支持。
單播與組播(多播)
在上面我們已經(jīng)了解了一些單播和組播的概念,這也是現(xiàn)在流媒體方面討論的焦點(diǎn)之一。以我的認(rèn)識,點(diǎn)播與廣播是一組概念,它們和客戶端媒體交互的手段;單播和組播又是另外一組概念,它們是流媒體數(shù)據(jù)在服務(wù)器端和網(wǎng)絡(luò)上的傳輸方式。
單播發(fā)送時,需要在客戶端與媒體服務(wù)器之間需要建立一個單獨(dú)的數(shù)據(jù)通道,從一臺服務(wù)器送出的每個數(shù)據(jù)包只能傳送給一個客戶機(jī),每個用戶必須分別對媒體服務(wù)器發(fā)送單獨(dú)的查詢,而服務(wù)器必須向每個用戶發(fā)送所申請的數(shù)據(jù)包拷貝。這種巨大冗余會造成服務(wù)器沉重和網(wǎng)絡(luò)帶寬的沉重負(fù)擔(dān),響應(yīng)需要很長時間,甚至出現(xiàn)不能服務(wù)的情況。單播可以用在點(diǎn)播和廣播上。
組播發(fā)送時,服務(wù)器將一組客戶請求的流媒體數(shù)據(jù)發(fā)送到支持組播技術(shù)的路由器上,然后由路由器一次將數(shù)據(jù)包根據(jù)路由表復(fù)制到多個通道上,再向用戶發(fā)送。這時候,媒體服務(wù)器只需要發(fā)送一個信息包,所有發(fā)出請求的客戶端都共享同一信息包,并且信息可以發(fā)送到任意地址的客戶機(jī),沒有請求的客戶機(jī)不會收到信息包,網(wǎng)絡(luò)上傳輸?shù)男畔目偭繘]有廣播那么多,大大提高了服務(wù)器和網(wǎng)絡(luò)線路的利用率。不過組播也有自己的特點(diǎn),首先是必須要開始支持組播技術(shù)的路由器,另外就是一般只能用作廣播,因?yàn)橛米鼽c(diǎn)播會存在用戶控制問題。
好了,說了這么多,您可能都嫌我煩了,那么,就讓我們開始架設(shè)流媒體服務(wù)器之旅吧。