視頻直播的技術(shù)原理和實(shí)現(xiàn)思路方案整理[轉(zhuǎn)]

原理篇

何李石:七牛直播云服務(wù)技術(shù)詳解

直播模型及其實(shí)現(xiàn)

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

首先是主播方态蒂,它是產(chǎn)生視頻流的源頭,由一系列流程組成:第一掺逼,通過一定的設(shè)備來采集數(shù)據(jù)吃媒;第二瓤介,將采集的這些視頻進(jìn)行一系列的處理吕喘,比如水印、美顏和特效濾鏡等處理刑桑;第三氯质,將處理后的結(jié)果視頻編碼壓縮成可觀看可傳輸?shù)囊曨l流;第四祠斧,分發(fā)推流闻察,即將壓縮后的視頻流通過網(wǎng)絡(luò)通道傳輸出去赐写。

其次是播放端览濒,播放端功能有兩個(gè)層面,第一個(gè)層面是關(guān)鍵性的需求尼摹;另一層面是業(yè)務(wù)層面的吴超。先看第一個(gè)層面钉嘹,它涉及到一些非常關(guān)鍵的指標(biāo),比如秒開鲸阻,在很多場(chǎng)景當(dāng)中都有這樣的要求跋涣,然后是對(duì)于一些重要內(nèi)容的版權(quán)保護(hù)。為了達(dá)到更好的效果鸟悴,我們還需要配合服務(wù)端做智能解析陈辱,這在某些場(chǎng)景下也是關(guān)鍵性需求。再來看第二個(gè)層面也即業(yè)務(wù)層面的功能细诸,對(duì)于一個(gè)社交直播產(chǎn)品來說沛贪,在播放端,觀眾希望能夠?qū)崟r(shí)的看到主播端推過來的視頻流震贵,并且和主播以及其他觀眾產(chǎn)生一定的互動(dòng)利赋,因此它可能包含一些像點(diǎn)贊、聊天和彈幕這樣的功能屏歹,以及禮物這樣更高級(jí)的道具隐砸。

直播服務(wù)器端提供的最核心功能是收集主播端的視頻推流,并將其放大后推送給所有觀眾端蝙眶。除了這個(gè)核心功能季希,還有很多運(yùn)營級(jí)別的訴求褪那,比如鑒權(quán)認(rèn)證,視頻連線和實(shí)時(shí)轉(zhuǎn)碼式塌,自動(dòng)鑒黃博敬,多屏合一,以及云端錄制存儲(chǔ)等功能峰尝。另外偏窝,對(duì)于一個(gè)主播端推出的視頻流,中間需要經(jīng)過一些環(huán)節(jié)才能到達(dá)播放端武学,因此對(duì)中間環(huán)節(jié)的質(zhì)量進(jìn)行監(jiān)控祭往,以及根據(jù)這些監(jiān)控來進(jìn)行智能調(diào)度,也是非常重要的訴求火窒。

實(shí)際上無論是主播端還是播放端硼补,他們的訴求都不會(huì)僅僅是拍攝視頻和播放視頻這么簡(jiǎn)單。在這個(gè)核心訴求被滿足之后熏矿,還有很多關(guān)鍵訴求需要被滿足已骇。比如,對(duì)于一個(gè)消費(fèi)級(jí)的直播產(chǎn)品來說票编,除了這三大模塊之外褪储,還需要實(shí)現(xiàn)一個(gè)業(yè)務(wù)服務(wù)端來進(jìn)行推流和播放控制,以及所有用戶狀態(tài)的維持慧域。如此鲤竹,就構(gòu)成了一個(gè)消費(fèi)級(jí)可用的直播產(chǎn)品。

思路篇

從0到1打造直播 App

錄制->編碼->網(wǎng)絡(luò)傳輸->解碼->播放

以上為直播的整體流程吊趾,根據(jù)該流程分為以下技術(shù)點(diǎn):

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

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

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

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

如何搭建一個(gè)完整的視頻直播系統(tǒng)宛裕?

正如 @姚冬 所說,一個(gè)完整的直播系統(tǒng)大致包含這幾個(gè)環(huán)節(jié):采集论泛、前處理揩尸、編碼、傳輸屁奏、解碼和渲染岩榆。在兩端傳輸?shù)倪^程中再加上一個(gè)服務(wù)端處理。大致的模型如下:

直播系統(tǒng)解決方案-搭建你自己的直播平臺(tái)

視頻采集與編碼:JavaCVFFmpeg

直播流服務(wù)器:SRS

播放器: 網(wǎng)頁端Video.js安卓端Vitamio

實(shí)踐篇

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

直播難:個(gè)人認(rèn)為要想把直播從零開始做出來坟瓢,絕對(duì)是牛逼中的牛逼勇边,大牛中的大牛,因?yàn)橹辈ブ羞\(yùn)用到的技術(shù)難點(diǎn)非常之多折联,視頻/音頻處理粒褒,圖形處理,視頻/音頻壓縮诚镰,CDN分發(fā)奕坟,即時(shí)通訊等技術(shù)祥款,每一個(gè)技術(shù)都?jí)蚰銓W(xué)幾年的。

直播易:已經(jīng)有各個(gè)領(lǐng)域的大牛月杉,封裝好了許多牛逼的框架刃跛,我們只需要用別人寫好的框架,就能快速的搭建一個(gè)直播app苛萎,也就是傳說中的站在大牛肩膀上編程桨昙。

一個(gè)完整直播app功能

聊天/禮物/直播列表/自己直播/房間邏輯/用戶邏輯/觀看直播/統(tǒng)計(jì)/超管

一個(gè)完整直播app原理

直播原理:把主播錄制的視頻,推送到服務(wù)器腌歉,在由服務(wù)器分發(fā)給觀眾觀看蛙酪。

直播環(huán)節(jié):推流端(采集、美顏處理究履、編碼滤否、推流)、服務(wù)端處理(轉(zhuǎn)碼最仑、錄制、截圖炊甲、鑒黃)泥彤、播放器(拉流、解碼卿啡、渲染)吟吝、互動(dòng)系統(tǒng)(聊天室、禮物系統(tǒng)颈娜、贊)

一個(gè)完整直播app實(shí)現(xiàn)流程

采集/濾鏡處理/編碼/推流/CDN分發(fā)/拉流/解碼/播放/聊天互動(dòng)

一個(gè)完整直播app架構(gòu)

一個(gè)完整直播app技術(shù)點(diǎn)

如何快速的開發(fā)一個(gè)完整的iOS直播app

利用第三方直播SDK快速的開發(fā)

直播功能:自研還是使用第三方直播SDK開發(fā)剑逃?

第三方SDK開發(fā): 對(duì)于一個(gè)初創(chuàng)團(tuán)隊(duì)來講,自研直播不管在技術(shù)門檻官辽、CDN蛹磺、帶寬上都是有很大的門檻的,而且需要耗費(fèi)大量的時(shí)間才能做出成品同仆,不利于拉投資萤捆。

自研:公司直播平臺(tái)大,從長遠(yuǎn)看俗批,自研可以節(jié)省成本俗或,技術(shù)成面比直接用SDK可控多了。

第三方SDK好處

降低成本/提升效率/降低風(fēng)險(xiǎn)/專業(yè)的事岁忘,找專業(yè)的人來做

做一款仿映客的直播App辛慰?看我就夠了

技術(shù)實(shí)現(xiàn)層面

技術(shù)相對(duì)都比較成熟,設(shè)備也都支持硬編碼

github上有現(xiàn)成的開源實(shí)現(xiàn)干像,推流帅腌、美顏辱志、水印、彈幕狞膘、點(diǎn)贊動(dòng)畫揩懒、濾鏡、播放都有挽封。技術(shù)其實(shí)不是很難已球,而且現(xiàn)在很多云廠商都提供SDK,七牛云辅愿、金山云智亮、樂視云、騰訊云点待、百度云阔蛉、斗魚直播伴侶推流端,功能幾乎都是一樣的癞埠,沒啥亮點(diǎn)状原,不同的是整個(gè)直播平臺(tái)服務(wù)差異和接入的簡(jiǎn)易性。后端現(xiàn)在 RTMP/HTTP-FLV 清一色苗踪,App掛個(gè)源站直接接入云廠商或CDN就OK颠区。

運(yùn)營成本和客戶體驗(yàn)

根據(jù)網(wǎng)上的數(shù)據(jù),斗魚 TV 為 3 億人民幣通铲,戰(zhàn)旗 TV 為 1.5 億人民幣毕莱,龍珠為 1.2 億人民幣,虎牙為 3000 萬 + 人民幣颅夺。

項(xiàng)目搭建

流媒體傳輸: RTMP

推流:LaiFengiOS/LFLiveKit

美顏:BeautifyFace

播放端:Bilibili/ijkplayer

GrayJIAXU/520Linkee

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

技術(shù)坑 : 降噪, 音頻解碼器, 藍(lán)牙適配, 回聲消除, 信令控制, 登錄, 鑒權(quán), 權(quán)限管理, 狀態(tài)管理, 應(yīng)用消息, 消息推送, 禮物系統(tǒng), 即時(shí)聊天, 支付系統(tǒng), 統(tǒng)計(jì)系統(tǒng), 數(shù)據(jù)庫, 緩存, 分布式文件存儲(chǔ), 消息隊(duì)列, 運(yùn)維系統(tǒng)等等大小不一的坑等你來填!!!

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

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

LaiFeng-Android/SopCastComponent

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

整個(gè)項(xiàng)目完成了采集部服、 視音頻處理、編碼稚字、數(shù)據(jù)發(fā)送前處理饲宿、數(shù)據(jù)發(fā)送的功能。整個(gè)項(xiàng)目支持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)

直播聊天室 - 融云即時(shí)通訊云

視頻直播

聊天互動(dòng)

主播端/觀眾端

前端篇

H5視頻直播掃盲 | AlloyTeam

對(duì)于視頻播放,可以使用 HLS(HTTP Live Streaming)協(xié)議播放直播流短绸, ios 和 android 都天然支持這種協(xié)議车吹,配置簡(jiǎn)單筹裕,直接使用 video 標(biāo)簽即可。

到底什么是HLS協(xié)議窄驹?

簡(jiǎn)單講就是把整個(gè)流分成一個(gè)個(gè)小的朝卒,基于HTTP的文件來下載,每次只下載一些乐埠,前面提到了用于H5播放直播視頻時(shí)引入的一個(gè).m3u8(extended M3U playlist)的文件抗斤,這個(gè)文件就是基于HLS協(xié)議,存放視頻流元數(shù)據(jù)的文件丈咐。

H5直播起航 | Aotu.io「凹凸實(shí)驗(yàn)室」

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

移動(dòng)端 iOS 和 Android 都天然支持HLS協(xié)議伤疙,做好視頻采集端、視頻流推流服務(wù)之后辆影,便可以直接在H5頁面配置 video 標(biāo)簽播放直播視頻, HLS 在 PC 端僅支持safari瀏覽器徒像,類似chrome瀏覽器使用HTML5 video標(biāo)簽無法播放 m3u8 格式,可直接采用網(wǎng)上一些比較成熟的方案

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) 視頻

移動(dòng)端可直接通過標(biāo)簽來播放.m3u8格式的視頻:mobile-hls-video.html

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

更多參考

fir.im Weekly - 揭秘直播移動(dòng) APP 技術(shù)實(shí)現(xiàn)

PPT+長文推薦:『直播』大時(shí)代

如何開發(fā)出一款仿映客直播APP項(xiàng)目實(shí)踐篇

android音視頻點(diǎn)/直播模塊開發(fā)

直播協(xié)議的選擇:RTMP vs. HLS

HTML5 視頻直播 | JerryQu

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

yangchao0033/HLS-Demo

總結(jié)

如果想最快的實(shí)現(xiàn)直播功能, 最好選用直播云, 因?yàn)槠涮峁┝送晟频?SDK, 從推流到流服務(wù)器再到最終的播放器, 一條龍服務(wù)下來.

如果想自己搭建整個(gè)一套, 技術(shù)選型可以參考

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

(上傳)流服務(wù)器:SRS

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

來自:https://github.com/f2e-journey/xueqianban/issues/61

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厨姚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子键菱,更是在濱河造成了極大的恐慌,老刑警劉巖今布,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件经备,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡部默,警方通過查閱死者的電腦和手機(jī)侵蒙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傅蹂,“玉大人纷闺,你說我怎么就攤上這事》莺” “怎么了犁功?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婚夫。 經(jīng)常有香客問我浸卦,道長,這世上最難降的妖魔是什么案糙? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任限嫌,我火速辦了婚禮靴庆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怒医。我一直安慰自己炉抒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布稚叹。 她就那樣靜靜地躺著焰薄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪入录。 梳的紋絲不亂的頭發(fā)上蛤奥,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音僚稿,去河邊找鬼凡桥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚀同,可吹牛的內(nèi)容都是我干的缅刽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼蠢络,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼衰猛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刹孔,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤啡省,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后髓霞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卦睹,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年方库,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了结序。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纵潦,死狀恐怖徐鹤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邀层,我是刑警寧澤返敬,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站被济,受9級(jí)特大地震影響救赐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一经磅、第九天 我趴在偏房一處隱蔽的房頂上張望泌绣。 院中可真熱鬧,春花似錦预厌、人聲如沸阿迈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苗沧。三九已至,卻和暖如春炭晒,著一層夾襖步出監(jiān)牢的瞬間待逞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工网严, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留识樱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓震束,卻偏偏與公主長得像怜庸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垢村,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容