視頻直播的技術原理和實現

2021-01-14 11:21 公司動態

直播模型及其實現

一個通用的直播模型一般包括三個模塊:主播方、服務器端和播放端。

001.png

首先是主播方,它是產生視頻流的源頭,由一系列流程組成:第一,通過一定的設備來采集數據;第二,將采集的這些視頻進行一系列的處理,比如水印、美顏和特效濾鏡等處理;第三,將處理后的結果視頻編碼壓縮成可觀看可傳輸的視頻流;第四,分發推流,即將壓縮后的視頻流通過網絡通道傳輸出去。

其次是播放端,播放端功能有兩個層面,第一個層面是關鍵性的需求;另一層面是業務層面的。先看第一個層面,它涉及到一些非常關鍵的指標,比如秒開,在很多場景當中都有這樣的要求,然后是對于一些重要內容的版權保護。為了達到更好的效果,我們還需要配合服務端做智能解析,這在某些場景下也是關鍵性需求。再來看第二個層面也即業務層面的功能,對于一個社交直播產品來說,在播放端,觀眾希望能夠實時的看到主播端推過來的視頻流,并且和主播以及其他觀眾產生一定的互動,因此它可能包含一些像點贊、聊天和彈幕這樣的功能,以及禮物這樣更高級的道具。

直播服務器端提供的最核心功能是收集主播端的視頻推流,并將其放大后推送給所有觀眾端。除了這個核心功能,還有很多運營級別的訴求,比如鑒權認證,視頻連線和實時轉碼,自動鑒黃,多屏合一,以及云端錄制存儲等功能。另外,對于一個主播端推出的視頻流,中間需要經過一些環節才能到達播放端,因此對中間環節的質量進行監控,以及根據這些監控來進行智能調度,也是非常重要的訴求。

實際上無論是主播端還是播放端,他們的訴求都不會僅僅是拍攝視頻和播放視頻這么簡單。在這個核心訴求被滿足之后,還有很多關鍵訴求需要被滿足。比如,對于一個消費級的直播產品來說,除了這三大模塊之外,還需要實現一個業務服務端來進行推流和播放控制,以及所有用戶狀態的維持。如此,就構成了一個消費級可用的直播產品。

思路篇

從0到1打造直播 App

錄制->編碼->網絡傳輸->解碼->播放

以上為直播的整體流程,根據該流程分為以下技術點:

怎樣錄制直播視頻(流媒體源/編碼/封裝)

怎樣實時上傳直播視頻(視頻推流: 如何推/往哪里推/推流服務器)

怎樣播放直播視頻(如何看: HLS/rtmp/flv)

直播間的用戶是如何交互(送禮物/聊天室/彈幕)

如何搭建一個完整的視頻直播系統?

一個完整的直播系統大致包含這幾個環節:采集、前處理、編碼、傳輸、解碼和渲染。在兩端傳輸的過程中再加上一個服務端處理。大致的模型如下:

002.png

直播系統解決方案-搭建你自己的直播平臺

視頻采集與編碼:JavaCVFFmpeg

直播流服務器:SRS

播放器: 網頁端Video.js安卓端Vitamio

實踐篇

如何快速的開發一個完整的iOS直播app 原理篇/播放篇/采集篇/美顏篇

直播難:個人認為要想把直播從零開始做出來,絕對是牛逼中的牛逼,大牛中的大牛,因為直播中運用到的技術難點非常之多,視頻/音頻處理,圖形處理,視頻/音頻壓縮,CDN分發,即時通訊等技術,每一個技術都夠你學幾年的。

直播易:已經有各個領域的大牛,封裝好了許多牛逼的框架,我們只需要用別人寫好的框架,就能快速的搭建一個直播app,也就是傳說中的站在大牛肩膀上編程。

一個完整直播app功能

聊天/禮物/直播列表/自己直播/房間邏輯/用戶邏輯/觀看直播/統計/超管

一個完整直播app原理

003.png

直播原理:把主播錄制的視頻,推送到服務器,在由服務器分發給觀眾觀看。

直播環節:推流端(采集、美顏處理、編碼、推流)、服務端處理(轉碼、錄制、截圖、鑒黃)、播放器(拉流、解碼、渲染)、互動系統(聊天室、禮物系統、贊)

一個完整直播app實現流程

采集/濾鏡處理/編碼/推流/CDN分發/拉流/解碼/播放/聊天互動

一個完整直播app架構

一個完整直播app技術點

004.jpg

如何快速的開發一個完整的iOS直播app

利用第三方直播SDK快速的開發

直播功能:自研還是使用第三方直播SDK開發?

第三方SDK開發: 對于一個初創團隊來講,自研直播不管在技術門檻、CDN、帶寬上都是有很大的門檻的,而且需要耗費大量的時間才能做出成品,不利于拉投資。

自研:公司直播平臺大,從長遠看,自研可以節省成本,技術成面比直接用SDK可控多了。

第三方SDK好處

降低成本/提升效率/降低風險/專業的事,找專業的人來做


技術實現層面

技術相對都比較成熟,設備也都支持硬編碼

github上有現成的開源實現,推流、美顏、水印、彈幕、點贊動畫、濾鏡、播放都有。技術其實不是很難,而且現在很多云廠商都提供SDK,七牛云、金山云、樂視云、騰訊云、百度云、斗魚直播伴侶推流端,功能幾乎都是一樣的,沒啥亮點,不同的是整個直播平臺服務差異和接入的簡易性。后端現在 RTMP/HTTP-FLV 清一色,App掛個源站直接接入云廠商或CDN就OK。

運營成本和客戶體驗

根據網上的數據,斗魚 TV 為 3 億人民幣,戰旗 TV 為 1.5 億人民幣,龍珠為 1.2 億人民幣,虎牙為 3000 萬 + 人民幣。

項目搭建

流媒體傳輸: RTMP

推流:LaiFengiOS/LFLiveKit

美顏:BeautifyFace

播放端:Bilibili/ijkplayer

GrayJIAXU/520Linkee

iOS視頻直播初窺:高仿<喵播APP>

技術坑 : 降噪, 音頻解碼器, 藍牙適配, 回聲消除, 信令控制, 登錄, 鑒權, 權限管理, 狀態管理, 應用消息, 消息推送, 禮物系統, 即時聊天, 支付系統, 統計系統, 數據庫, 緩存, 分布式文件存儲, 消息隊列, 運維系統等等大小不一的坑等你來填!!!

資金坑 :以帶寬為例, 2萬人同時在線, 手機碼率在600KB, 每個月的帶寬費用至少在30萬左右. 根據歡聚時代(YY)15年四季度財務報, 他們的帶寬成本為人民幣1.611億元, 折合每月5000萬+. 人力成本+渠道支出和其他支出就不詳談了.

社會坑: 還得每時每刻與各種黑暗勢力斗爭, 包括色情, 廣告, 刷小號, 刷充值, 告侵權, DDos...(我反編譯喵播的官方APP, 他們的項目名就叫Shehui, O(∩_∩)O哈哈~)

LaiFeng-Android/SopCastComponent

來瘋直播安卓控件,支持flv,支持rtmp,支持添加視頻特效等等

整個項目完成了采集、 視音頻處理、編碼、數據發送前處理、數據發送的功能。整個項目支持flv封包,rtmp上傳

LaiFengiOS/LFLiveKit

LaiFeng IOS Live Kit,H264 and AAC Hard coding,support GPUImage Beauty, rtmp transmission,weak network lost frame,Dynamic switching rate

方案篇

各種云廠商提供的直播云解決方案

阿里云視頻直播解決方案

直播推流 SDK(iOS/Android)

直播播放器 SDK(iOS/Android)

直播聊天室 - 融云即時通訊云

視頻直播

聊天互動

主播端/觀眾端

前端篇

H5視頻直播掃盲 | AlloyTeam

對于視頻播放,可以使用 HLS(HTTP Live Streaming)協議播放直播流, ios 和 android 都天然支持這種協議,配置簡單,直接使用 video 標簽即可。

到底什么是HLS協議?

簡單講就是把整個流分成一個個小的,基于HTTP的文件來下載,每次只下載一些,前面提到了用于H5播放直播視頻時引入的一個.m3u8(extended M3U playlist)的文件,這個文件就是基于HLS協議,存放視頻流元數據的文件。

H5直播起航 | Aotu.io「凹凸實驗室」

WEB 上主流的視頻直播方案有 HLS 和 RTMP,移動 WEB 端目前以 HLS 為主(HLS存在延遲性問題,也可以借助 video.js 采用RTMP),PC端則以 RTMP 為主實時性較好

移動端 iOS 和 Android 都天然支持HLS協議,做好視頻采集端、視頻流推流服務之后,便可以直接在H5頁面配置 video 標簽播放直播視頻, HLS 在 PC 端僅支持safari瀏覽器,類似chrome瀏覽器使用HTML5 video標簽無法播放 m3u8 格式,可直接采用網上一些比較成熟的方案

videojs-contrib-hls

HTTP Live Streaming (HLS) has become a de-facto standard for streaming video on mobile devices thanks to its native support on iOS and Android. Unfortunately, all the major desktop browsers except for Safari are missing HLS support.

Web 前端如何播放 HLS(.m3u8) 視頻

移動端可直接通過標簽來播放.m3u8格式的視頻:mobile-hls-video.html

PC端需要通過其他手段(例如 videojs-contrib-hls)來解碼.m3u8格式的視頻, 才能夠通過標簽或者 flash 來播放:pc-hls-video.html

更多參考

fir.im Weekly - 揭秘直播移動 APP 技術實現

PPT+長文推薦:『直播』大時代

如何開發出一款仿映客直播APP項目實踐篇

android音視頻點/直播模塊開發

直播協議的選擇:RTMP vs. HLS

HTML5 視頻直播 | JerryQu

有支持M3U8格式的HTML5播放器嗎?

yangchao0033/HLS-Demo

總結

如果想最快的實現直播功能, 最好選用直播云, 因為其提供了完善的 SDK, 從推流到流服務器再到最終的播放器, 一條龍服務下來.

如果想自己搭建整個一套, 技術選型可以參考

(主播)采集推流: iOSLaiFengiOS/LFLiveKitAndroidLaiFeng-Android/SopCastComponent

(上傳)流服務器:SRS

(觀眾)播放器: App 端Bilibili/ijkplayer網頁端Video.js



官方微信
娇小xxxxx性开放