iOS直播技術學習筆記-流媒體協議(七)

weixin_34293059發表於2017-09-10

常見的流媒體協議

  • 常見的流媒體協議有很多比如:
    • RTP(Real-time Transport Protocol), 常用語電話會議, 網路電話等場景, 但是缺點是不提供網路保障
    • RTCP(Real-time Transport Control Protocol), 是實時傳輸協議(RTP)的一個姐妹協議, 也常用於語電話會議, 網路電話等場景.
    • RTMP(Real Time Streaming Protocol), RTMP是Adobe開發的協議
    • HLS(HTTP Live Streaming)是蘋果公司(Apple Inc.)實現的基於HTTP的流媒體傳輸協議,可實現流媒體的直播和點播

HLS(HTTP Live Streaming)

  • HTTP Live Streaming(HLS)是蘋果公司實現的基於HTTP的流媒體傳輸協議,可實現流媒體的直播和點播。原理上是將視訊流分片成一系列HTTP下載檔案。所以,HLS比RTMP有較高的延遲。HLS基於HTTP協議實現,傳輸內容包括兩部分,一是M3U8描述檔案,二是TS媒體檔案
    • 相對於常見的流媒體直播協議,例如RTMP協議、RTSP協議、MMS協議等,HLS直播最大的不同在於,直播客戶端獲取到的,並不是一個完整的資料流。HLS協議在伺服器端將直播資料流儲存為連續的、很短時長的媒體檔案(MPEG-TS格式),而客戶端則不斷的下載並播放這些小檔案,因為伺服器端總是會將最新的直播資料生成新的小檔案,這樣客戶端只要不停的按順序播放從伺服器獲取到的檔案,就實現了直播。
    • 由此可見,基本上可以認為,HLS是以點播的技術方式來實現直播。
  • 工作流程為:
    • 採集視訊源和音訊源的資料
    • 對原始資料進行H264編碼和AAC編碼
    • 視訊和音訊資料封裝為MPEG-TS包
    • HLS分段生成策略及m3u8索引檔案
    • HTTP傳輸協議傳輸資料
313852-48cb1b927d21d441.png
工作流程.png
  • 使用FFmpeg命令將mp4檔案切換成m3u8&ts切片
// 安裝Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
// 安裝FFmpeg
brew install ffmpeg
// 執行轉換命令
ffmpeg -i XXX.mp4 -c:v libx264 -c:a copy -f hls XXX.m3u8

  • m3u8索引頭解析
313852-a19bbf1f46a9db69.png
m3u8索引頭解析.png

RTMP

  • RTMP協議是 Adobe 公司開發的一個基於TCP的應用層協議,Adobe 公司也公佈了關於RTMP的規範
  • RTMP本質上是流協議,主要的優勢是:
    • 實時性高:RTMP的實時性在3秒之內,經過多層CDN節點分發後,實時性也在3秒左右,在一些實時性有要求的應用中以RTMP為主。
    • 支援加密:RTMPE和RTMPS為加密協議
    • 穩定性高:HTTP也很穩定,但HTTP是在協議上穩定穩定性不只是服務端的事情,在CDN分發,伺服器管理,客戶端的支援上
  • RTMP的使用
    • RTMP協議也要客戶端和伺服器通過“握手”來建立基於傳輸層連結之上的RTMP Connection連結,在Connection連結上會傳輸一些控制資訊
    • TMP協議傳輸時會對資料做自己的格式化,這種格式的訊息我們稱之為RTMP Message
    • 而實際傳輸的時候為了更好地實現多路複用、分包和資訊的公平性,傳送端會把Message劃分為帶有Message ID的Chunk,每個Chunk可能是一個單獨的Message,也可能是Message的一部分,在接受端會根據chunk中包含的data的長度,message id和message的長度把chunk還原成完整的Message,從而實現資訊的收發。

相關文章