1. 程式人生 > >流媒體封裝格式和流媒體傳輸協議介紹

流媒體封裝格式和流媒體傳輸協議介紹

1、流媒體封裝格式介紹

  一個流媒體檔案由音訊流和視訊流兩種資料組成。
  
  h264/mpeg4等就是視訊流編碼格式,視訊流一般以幀的單位存在,i幀、p幀、b幀,幀率(frame rate)是每秒顯示幀數(frames per second,簡稱:fps),如果幀率是25,那麼幀與幀的時間撮間隔應該是40ms。
  
  adpcm/g711a/g723 等就是音訊流編碼格式(pcm是原始音訊資料),音訊資料就沒有幀的概念了,就是一包一包的音訊資料。下面計算一下 pcm 音訊流的位元速率,取樣率值×取樣大小值×聲道數 bps。一個取樣率為 44.1khz,取樣大小為 16bit,雙聲道的pcm編碼的wav檔案,它的資料速率則為 44.1k×16×2 = 1411.2 kbps。我們常說 128k 的mp3,對應的 wav 的引數,就是這個 1411.2 kbps,這個引數也被稱為資料頻寬,它和 adsl 中的頻寬是一個概念。將位元速率除以 8,就可以得到這個 wav 的資料速率,即 176.4kb/s。這表示儲存一秒鐘取樣率為 44.1khz,取樣大小為 16bit,雙聲道的 pcm 編碼的音訊訊號,需要 176.4kb 的空間,1分鐘則約為 10.34m,這對大部分使用者是不可接受的,尤其是喜歡在電腦上聽音樂的朋友,要降低磁碟佔用,只有2種方法,降低取樣指標或者壓縮。降低指標是不可取的,因此就有了各種壓縮方案。
  
  流媒體檔案就是把音訊流和視訊流資料打包封裝成一定的檔案格式。mp4/ts/ps/avi/flv 等是一些常用的封裝格式。封裝格式(也叫容器):所謂封裝格式就是將已經編碼壓縮好的視訊流和音訊流按照一定的格式放到一個檔案中,就是說僅僅是一個外殼,或者把它當成一個放視訊流和音訊流的資料夾也可以。說通俗點,視訊流媒體相當於飯,而音訊流媒體相當於菜,封裝格式是選擇什麼樣的容器(碗或鍋),用來盛放某種視訊流和音訊流的組合。

2、流媒體傳輸協議介紹

  網路間的資料傳輸無外乎兩種方式 tcp 和 udp,應用場景不同,所選擇的傳輸方式不一樣。 而流媒體傳輸的協議一般有 rtp/rtsp/rtcp(可基於 tcp 或者 udp)、http(一般是 tcp 方式)。流媒體傳輸會存在兩種需求:順序流式傳輸(progressive streaming)和實時流式傳輸(real time streaming)。
  
  順序流式傳輸(progressive streaming)的特點:期望音視訊資料無錯誤無丟失順序的從一端傳輸到另一端,例如警方對視訊監控錄影回放取證、網路電影播放等都需要資料正常到達然後解碼播放,對於這種情況一般採用可靠的 tcp 方式傳輸。
  
  實時流式傳輸

(real time streaming)的特點:期望音視訊資料實時的的從一段傳輸到另一端,例如數字電視行業的電視直播,由於 tcp 的包確認機制的開銷大,基於視窗的擁塞控制技術不太適應穩定的流媒體傳輸,tcp 重傳機制對實時流沒有必要,對於這種情況一般採用 udp 方式傳輸。解決方案為:http(基於 tcp)做控制資訊的傳輸,rtp(基於udp)做實時資料流的傳輸;http live streaming (hls) 碼流自適應也可作為實時流傳輸的解決方案。