標籤:style http ar 使用 sp 檔案 資料 div on
流媒體這個概念出現很久了,應該近10年了。直覺上,流媒體就是可以邊下載邊播放的媒體。現在,上網的人都有這種體驗了,例如看播客短片,看pplive等,都是邊下載邊播放的。其實,這些都不是真正的流媒體,看到這個結論,你可能會吃驚,但看完這篇文章後,你就會明白了。
首先,來看一下流媒體從製作到播放的整個過程吧。
流媒體需要什麼樣的來源資料?幾乎是任何資料,你手頭的avi,rm等檔案,甚至磁帶,或者剛從採集裝置得到的類比訊號。
有來源資料了,怎麼處理呢?首先,如果是類比訊號,就要先轉換成數字訊號(直播往往是把剛採集到的類比訊號轉換成數字訊號),然後就是按照需要的碼率進行編碼。編碼需要編碼器,即codec。需要什麼編碼器,就看你想要什麼格式的檔案。當前流行的流媒體格式有三種:quick time, windows media technology(簡稱wmt), real system。三種格式分屬不同的公司:quick time是蘋果公司的,尾碼名是什麼我也不清楚,因為不常接觸;wmt是微軟的,一般以asf為尾碼名;real system是real公司的,這種格式大家接觸得最多,rm、rmvb檔案很常見。編碼成某種格式,還要看伺服器上有沒有支援這種格式的服務端軟體,用戶端的播放器也要支援這種格式的播放,流媒體才能流起來。
編碼產生流媒體檔案後,需要流媒體伺服器進行媒體的傳輸,主要是用特定的流媒體協議封裝資料包。
在列舉流媒體協議前,先看一下兩種通用的傳輸協議:tcp和udp。要問流媒體的資料轉送和檔案下載的資料轉送有何不同,就是傳輸協議的不同。檔案下載用的是tcp協議,tcp是有串連的協議,資料轉送之前要建立串連,資料轉送完後,串連才會斷開。tcp支援確認重傳,能保證資料的完整性,因此只要下載完成,下載到用戶端的檔案和伺服器上的檔案是一樣的,不會丟失了其中的某些資料。流媒體不能使用tcp協議,因為tcp的重傳機制不能滿足流媒體對時間的要求,對流媒體來說,丟包也不會比視頻中斷的後果嚴重。流媒體使用udp協議。udp是不需連線的協議,而且不需要確認重傳,udp包發出之後,不需要等待接收方的確認,雖然可能丟失某些資料,但能保證即時性。有種情況下,用udp傳輸的流媒體不得不轉換成tcp傳輸,是什麼情況呢?如果你是內網使用者,或處在公司的防火牆之後,就只能通過tcp來接收資料,因為udp包會被防火牆拒收的。只不過這個tcp串連即使丟包也不重傳。
流媒體資料需要流媒體協議的封裝,根據格式不同,使用的協議也不同。有名的流媒體協議有四種:rtp, rtsp, rdp和mms。rtp以udp為基礎,擴充了sequence number和time stamp等域。rtsp是rtp協議的擴充,當傳輸資料時,使用rtp協議,當傳輸控制資料時,使用tcp串連。而rdp又是rtsp的擴充,只是加強了控制協議。quick time就是使用rtp/rtsp傳輸媒體檔案,而real system使用rtsp/rdp傳輸媒體檔案。mms是微軟專用的協議,一開始,使用mmsu建立串連(mms和udp的結合),如果建立串連不成功,則轉用mmst(mms和tcp的結合)建立串連。wmt使用mms傳輸媒體檔案。
如果沒有流媒體伺服器,能不能實現邊下載邊播放的效果呢?答案是可以,就使用tcp上的http串連就可以。先把一些資料下載到緩衝區中,然後邊下載新的資料到緩衝區,邊播放緩衝區已有的資料。這種流叫做http流,也叫假流。這就回到了我們開始提到的問題,我們看到的播客短片和pplive上的節目等其實都是http流,而不是真正的流媒體。
http流和真正的媒體流有什麼區別呢?區別在很多方面:(1)首先看伺服器,http流只需要web server就可以了,而真正的媒體流需要專用的媒體伺服器。(2)再看協議,http流需要的協議從下到上為ip, tcp, http,而真正的媒體流需要ip, udp和專用的流媒體協議。(3)還有,因為http流使用的是tcp串連,所以如果丟包會重傳,而真正的媒體流不會重傳。也正是這個原因,如果撇開中斷等影響,我們通過http流看到的視頻品質和伺服器上的視頻品質是一樣的,而通過真正的媒體流,其品質會隨網路狀況的不同而不同。(4)從啟動延遲上看,http流的啟動延遲要視網路連接狀況,媒體碼率而定;而真正的媒體流啟動延遲不會多於幾秒。(5)看http流的時候,你只能在已經下載的視頻範圍內拖動,而真正的流媒體可以在全片範圍內拖動。(6)最後,http流會把下載的媒體資料存入硬碟,而真正的媒體流不會,它播放過的資料馬上丟棄了,這樣剛好保護了媒體作品的著作權。
14:31 2007-5-30
流媒體概述