【項目一 · 直播】 ☞ 2. 拉流直播,項目直播

來源:互聯網
上載者:User

【項目一 · 直播】 ☞ 2. 拉流直播,項目直播
一、視頻技術1. 簡介

  視頻是一種有結構的資料。直播的時候傳的是資料,是視頻的一個小單元。

  視頻 = 映像 + 音頻

  • 視頻裡邊的原始映像資料 通常會採用“H.264編碼格式” 進行壓縮。

  • 音頻採樣資料 通常會採用“AAC編碼格式” 進行壓縮。

 2. 視頻的即時傳輸
  • 視頻是一種“有結構的資料”,ApsaraVideo for Live就是即時傳輸這種“有結構的資料”。

  • 即時發生的事(直播)肯定是有延遲的。我們要提高直播的品質就需要減小延遲。

 3. 視頻編碼壓縮
  • 視頻內容的體積一般比較大,為了便於視頻內容的儲存和傳輸,通常需要將原始的內容元素(映像和音頻)進行壓縮。(壓縮演算法就是編碼/壓縮格式)

  • 在直播的時候傳輸的視頻資料通常都要壓縮(編碼),傳輸資料的量是越少越好,播放的時候需要解壓(解碼/還原)。

 4. 視頻解碼壓縮
  • 視頻內容經過編碼壓縮後,有利於儲存和傳輸。當要觀看播放視頻時,相應的需要解碼。

  • 編碼和解碼之前,需要約定一種編碼器和解碼器都可以理解的約定。

  • 例如,視頻映像編碼和解碼過程:

編碼器將多張映像進行編碼後產生一段一段的GOP(Group of Pictures),傳輸的是GOP(Group of Pictures),解碼器在播放時則是讀取一段一段的GOP進行解碼後讀取畫面再渲染顯示。

GOP:表示一組圖片(即一組連續的畫面),是視頻映像編碼器和解碼器存取的基本單位,由一張I幀和數張B/P幀組成(I幀又叫主要畫面格,B/P幀又叫參考幀過渡幀),它的排列順序將會一直重複到影像結束。

 5. 視頻怎麼傳輸?
  • 編碼器將視頻的多張映像進行編碼後產生一段一段的GOP進行傳輸,傳輸的是GOP。

  • 將視頻分成分子(GOP),再將分子分成原子(I幀、B幀、P幀)。

想想一下,如果我們把傳輸一個“物體”,改成傳輸一個一個的“原子”,將最小顆粒以光速傳送,那麼以人的生物肉眼來感知,將是一種怎樣的體驗?

——— 這種體驗就類似於直播。

  • ApsaraVideo for Live技術:就是將視頻內容的最小顆粒(I / P / B幀, …),基於時間序列,以光速進行傳送的一種技術。

 6. 用什麼協議進行傳輸?
  • 直播就是將每一幀資料(Video/Audio/Data Frame),打上時序標籤後進行串流的過程。發送端源源不斷的採集音視頻資料,經過編碼、封包、推流(主播端),再經過中繼分髮網絡進行擴散傳播(就是把主播端的視頻資料傳到伺服器,伺服器再把資料傳給粉絲),播放端再源源不斷下載資料並按時序進行解碼播放。如此就實現了“邊生產、邊傳輸、邊消費”的直播過程。

 7. 直播的商務邏輯

一對多模型:

  主播端 ——RTMP協議——》直播流媒體伺服器 ——RTMP/HLS協議——》觀眾(粉絲)

  • RTMP協議:延時比較小,傳輸速度比較快。(主播錄視頻用這個協議,把視頻資料即時傳到伺服器上)
  • HLS協議:把主播已經傳好的視頻流切片,切片之後再給粉絲傳輸。(根據時間點去播放,粉絲播放視頻用這個協議,回看也用這個協議)

協議差異:

  • RTMP(Real Time Messaging Protocol)協議:是一個TCP協議(長串連),每個時刻的資料,收到後立刻轉寄,延時 1~3秒。
  • HLS(HTTP Live Streaming)協議:是一個HTTP協議(短串連),集合一段時間資料,產生ts切片檔案,更新m3u8,延時大於10秒。
  • RTMP-FLV(RTMP over HTTP)協議:是一個HTTP協議(長串連),同RTMP,使用HTTP協議,延時1~3秒。
 8. 延遲(Delay)
  • 物理延遲
    • 延遲指穩定網路下,發送和接收時差。
    • 轉寄環節越多,延遲越大。
    • 可計算。
      • 主播端(上海)——轉寄——》伺服器1(北京)——轉寄——》 …... ——轉寄——》伺服器n(香港)——轉寄——》粉絲端
      • 延遲跟伺服器的轉寄數 / 主播與粉絲直接的距離有關。
  • 抖動(Jitter)延遲
    • 抖動,訊號會不好。
 9. 直播過程

  一個完整的直播過程,主要包括:採集、處理、編碼、封包、推流、傳輸、轉碼、分發、拉流、解碼、播放。

  從推流到播放,再經過中間轉寄環節,延遲越低,則使用者體驗越好。

 

10. 編碼器

  編碼器的編碼方式分兩種:軟編和硬編。

  軟編的意思是,資源消耗的是CPU,通過一些軟體代碼的模式去編碼。(一般用軟編)

  硬編的意思是,資源消耗的是GPU,GPU就相當於是顯卡/顯示的功能。(好手機不卡,壞手機很卡)

 

二、直播/視頻播放器1. ijkplayer 架構介紹

  視頻端的播放用 ijkplayerijkplayer 是b站(bilibili)開源的第三方架構。ijkplayer 已經幫我們整合好了 FFmpeg。

  • FFmpeg 是音視頻處理工具,既有音視頻編碼解碼功能,又可以作為播放器使用。
  • 任何播放器都是基於FFmpeg的。蘋果提供的AVPlayer,播放不了直播檔案/播放不了直播格式(如,RTMP的播放不了,可以用 ijkplayer 去播放)。所以真正的要基於 FFmpeg 去播放,b站幫我們封裝好了,所以我們使用 ijkplayer。
  • 鬥魚也用的這個,到公司如果不想花錢也可以用這個(ijkplayer)。 

  FQ工具:多態

  VLC:視頻播放器,編碼格式多(支援的格式多,可以播直播格式的 rtmp://,一般可以用來測試直播地址)。

  測試地址:rtmp://live.hkstv.hk.lxdns.com/live/hks (提示:用Safari開啟,會自動加入到VLC播放清單中去)

 2. ijkplayer 的使用
  • 使用前先要配置:

    1)配置好依賴環境:下載 FFmpeg,編譯FFmpeg。

    2)將 IJKMediaPlayer(播放器) 項目打包成 framework,方便整合到自己的項目中去。

 

  • 下載 ijkplayer ,並配置依賴環境。

1) github網站上 搜 ijkplayer

2) 來到README.md文檔的 Build iOS 處,按步驟進行操作

3) 複製項目:git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

4) 先進入ijkplayer-ios目錄: cd ijkplayer-ios,執行: git checkout -B latest k0.7.7.1

5) 再執行: ./init-ios.sh(意思是去下載 FFmpeg)

  (ijkplayer 是基於FFmpeg的,由於FFmpeg比較大,所以要單獨去下載,下載比較慢)

6) 下載完後,進入ios目錄: cd ios,準備編譯FFmpeg。

7) 編譯FFmpeg,需執行以下命令:

  ./compile-ffmpeg.sh clean

  ./compile-ffmpeg.sh all

8) 編譯成功後,我們就可以運行 IJKMediaDemo 了。

 

  • IJKMediaPlayer 項目打包成 framework

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.