流媒體,又叫流式媒體,是邊傳邊播的媒體,是多媒體的一種。邊傳邊播是指媒體提供商在網絡上傳輸媒體的同時,用戶一邊不斷地接收並觀看或收聽被傳輸的媒體。「流」媒體的「流」指的是這種媒體的傳輸方式(流的方式),而並非指媒體自己。流媒體分爲直播和點播,被普遍運用於在線直播、視頻點播、遠程教育、實時視頻會議等領域。瀏覽器
流媒體協議包括RTP,RTCP,RTMP,MMS,HLS,HTTP-FLV等。一般來講點播使用的都是HTTP協議,直播主要用的是RTMP,HLS,HTTP-FLV等。緩存
RTMP:是Adobe公司爲Flash/AIR平臺和服務器之間音、視頻及數據傳輸開發的實時消息傳送協議,協議創建在TCP協議之上。RTMP協議中,視頻必須是H264編碼,音頻必須是AAC或MP3編碼,且多以flv格式封包。RTMP是目前最主流的流媒體傳輸協議,對CDN支持良好,實現難度較低,是大多數的直播平臺的選擇。RTMP基於flash沒法在iOS的瀏覽器裏播放,可是實時性比HLS要好。服務器
協議 | 優勢 | 缺點 | 播放延時 |
---|---|---|---|
RTMP | 1.速度快,誤碼率低,延遲低 2.協議在制定的時候就考慮到不少底層的優化 3.消息塊的傳輸可以提供更加穩定的直播環境 | 1.不支持HTML5直播、瀏覽器推送 2.開發難度大,門檻較高 3.硬件要求相較於HLS較高 | 1s-3s |
HLS | 1.手機瀏覽器支持度高 2.HLS協議客戶端支持簡單,只須要支持HTTP請求便可,HTTP協議無狀態,只須要按順序下載媒體片斷便可 3.網絡兼容性好,HTTP數據包也能夠方便地經過防火牆或者代理服務器 | 1.相比RTMP這類長鏈接協議,HLS延時較高,難以用到直播場景 2.對於點播服務來講,因爲海量小分片在文件分發,對一致性緩存,存儲等挑戰性較大 | 10s-30s |
流程以下:網絡
1.通過輸出設備(AVCaptureVideoDataOutput)獲得原始的採樣數據–視頻數據(YUV)和音頻數據(AAC)ide
2.使用硬編碼(對應系統的API)或軟編碼(FFMpeg)來編碼壓縮音視頻數據優化
3.分別獲得已編碼的H.264視頻數據和AAC音頻數據編碼
4.根據不一樣的封裝格式(如FLV、TS、MPEG-TS)代理
5.使用HLS協議的時候加上這一步(HLS分段生成策略及m3u8索引文件)視頻
6.經過流上傳到服務器索引
7.服務器進行相關協議的分發
根據協議類型與服務器創建鏈接並接收數據流程以下:
1.解析二進制數據,從中找到相關流信息
2.根據不一樣的封裝格式(如FLV、TS)解複用(demux)
3.分別獲得已編碼的H.264視頻數據和AAC音頻數據
4.使用硬解碼(對應系統的API)或軟解碼(FFMpeg)來解壓音視頻數據
5.通過解碼後獲得原始的視頻數據(YUV)和音頻數據(AAC)
6.由於音頻和視頻解碼是分開的,因此咱們得把它們同步起來,不然會出現音視頻不一樣步的現象,好比別人說話會跟口型對不上
7.最後把同步的音頻數據送到耳機或外放,視頻數據送到屏幕上顯示