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

前言

大半年沒寫博客了,但我一直關(guān)注著互聯(lián)網(wǎng)的動向鹃彻,最近會研究很多東西郊闯,并分享,今年移動直播行業(yè)的興起,誕生了一大批網(wǎng)紅团赁,甚至明星也開始直播了育拨,因此不得不跟上時代的步伐,由于第一次接觸的原因欢摄,因此花了很多時間了解直播熬丧,整理了直播的原理,當(dāng)前只是 原理篇 怀挠,后續(xù)會持續(xù)發(fā)布 實(shí)戰(zhàn)篇 析蝴,教你 從零開始搭建一個完整的iOS直播app ,希望能幫助到更多的人更快的了解直播绿淋。

一闷畸、個人見解(直播難與易)

直播難 :個人認(rèn)為要想把直播從零開始做出來,絕對是牛逼中的牛逼吞滞,大牛中的大牛佑菩,因?yàn)橹辈ブ羞\(yùn)用到的技術(shù)難點(diǎn)非常之多,視頻/音頻處理裁赠,圖形處理倘待,視頻/音頻壓縮,CDN分發(fā)组贺,即時通訊等技術(shù),每一個技術(shù)都夠你學(xué)幾年的祖娘。

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

二琼富、了解直播

熱門直播產(chǎn)品

映客仪吧,斗魚,熊貓鞠眉,虎牙薯鼠,花椒等等

直播效果圖

1.一個完整直播app功能(來自落影l(fā)oyinglin分享)

1、 聊天

私聊械蹋、聊天室出皇、點(diǎn)亮、推送哗戈、黑名單等;

2郊艘、 禮物

普通禮物、豪華禮物、紅包纱注、排行榜畏浆、第三方充值、內(nèi)購狞贱、禮物動態(tài)更新刻获、提現(xiàn)等;

3斥滤、 直播列表

關(guān)注将鸵、熱門、最新佑颇、分類直播用戶列表等顶掉;

4、 自己直播

錄制挑胸、推流痒筒、解碼、播放茬贵、美顏簿透、心跳、后臺切換解藻、主播對管理員操作老充、管理員對用戶等;

5螟左、 房間邏輯

創(chuàng)建房間啡浊、進(jìn)入房間、退出房間胶背、關(guān)閉房間巷嚣、切換房間、房間管理員設(shè)置钳吟、房間用戶列表等廷粒;

6、 用戶邏輯

普通登陸红且、第三方登陸坝茎、注冊、搜索暇番、修改個人信息景东、關(guān)注列表、粉絲列表奔誓、忘記密碼斤吐、查看個人信息搔涝、收入榜、關(guān)注和取關(guān)和措、檢索等庄呈;

7、 觀看直播

聊天信息派阱、滾屏彈幕诬留、禮物顯示、加載界面等贫母;

8文兑、 統(tǒng)計(jì)

APP業(yè)務(wù)統(tǒng)計(jì)、第三方統(tǒng)計(jì)等腺劣;

9绿贞、 超管

禁播、隱藏橘原、審核等籍铁;

2.一個完整直播app原理

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

直播環(huán)節(jié) :推流端(采集、美顏處理芋酌、編碼增显、推流)、服務(wù)端處理(轉(zhuǎn)碼脐帝、錄制同云、截圖、鑒黃)腮恩、播放器(拉流、解碼温兼、渲染)秸滴、互動系統(tǒng)(聊天室、禮物系統(tǒng)募判、贊)

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

1.采集荡含、2.濾鏡處理、3.編碼届垫、4.推流释液、5.CDN分發(fā)、6.拉流装处、7.解碼误债、8.播放浸船、9.聊天互動

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

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

三、了解流媒體(直播需要用到流媒體)

流媒體開發(fā) :網(wǎng)絡(luò)層(socket或st)負(fù)責(zé)傳輸寝蹈,協(xié)議層(rtmp或hls)負(fù)責(zé)網(wǎng)絡(luò)打包李命,封裝層(flv、ts)負(fù)責(zé)編解碼數(shù)據(jù)的封裝箫老,編碼層(h.264和aac)負(fù)責(zé)圖像封字,音頻壓縮。

幀 :每幀代表一幅靜止的圖像

GOP :(Group of Pictures)畫面組耍鬓,一個GOP就是一組連續(xù)的畫面阔籽,每個畫面都是一幀,一個GOP就是很多幀的集合

直播的數(shù)據(jù)牲蜀,其實(shí)是一組圖片笆制,包括I幀、P幀各薇、B幀项贺,當(dāng)用戶第一次觀看的時候,會尋找I幀峭判,而播放器會到服務(wù)器尋找到最近的I幀反饋給用戶开缎。因此,GOP Cache增加了端到端延遲林螃,因?yàn)樗仨氁玫阶罱腎幀

GOP Cache的長度越長奕删,畫面質(zhì)量越好

碼率 :圖片進(jìn)行壓縮后每秒顯示的數(shù)據(jù)量。

幀率 :每秒顯示的圖片數(shù)疗认。影響畫面流暢度完残,與畫面流暢度成正比:幀率越大,畫面越流暢横漏;幀率越小谨设,畫面越有跳動感。

由于人類眼睛的特殊生理結(jié)構(gòu)缎浇,如果所看畫面之幀率高于16的時候扎拣,就會認(rèn)為是連貫的,此現(xiàn)象稱之為視覺暫留素跺。并且當(dāng)幀速達(dá)到一定數(shù)值后二蓝,再增長的話,人眼也不容易察覺到有明顯的流暢度提升了指厌。

分辨率 :(矩形)圖片的長度和寬度刊愚,即圖片的尺寸

壓縮前的每秒數(shù)據(jù)量 :幀率X分辨率(單位應(yīng)該是若干個字節(jié))

壓縮比 :壓縮前的每秒數(shù)據(jù)量/碼率 (對于同一個視頻源并采用同一種視頻編碼算法,則:壓縮比越高踩验,畫面質(zhì)量越差鸥诽。)

視頻文件格式 : 文件的后綴 商玫,比如 .wmv,.mov,.mp4,.mp3,.avi ,

主要用處 ,根據(jù)文件格式衙传,系統(tǒng)會自動判斷用什么軟件打開,

注意: 隨意修改文件格式决帖,對文件的本身不會造成太大的影響,比如把a(bǔ)vi改成mp4,文件還是avi.

視頻封裝格式 : 一種儲存視頻信息的容器 蓖捶,流式封裝可以有 TS地回、FLV 等,索引式的封裝有 MP4,MOV,AVI 等俊鱼,

主要作用 :一個視頻文件往往會包含圖像和音頻刻像,還有一些配置信息(如圖像和音頻的關(guān)聯(lián),如何解碼它們等):這些內(nèi)容需要按照一定的規(guī)則組織并闲、封裝起來.

注意 :會發(fā)現(xiàn)封裝格式跟文件格式一樣细睡,因?yàn)橐话阋曨l文件格式的后綴名即采用相應(yīng)的視頻封裝格式的名稱,所以視頻文件格式就是視頻封裝格式。

視頻封裝格式和視頻壓縮編碼標(biāo)準(zhǔn) :就好像項(xiàng)目工程和編程語言帝火,封裝格式就是一個項(xiàng)目的工程溜徙,視頻編碼方式就是編程語言,一個項(xiàng)目工程可以用不同語言開發(fā)犀填。

四蠢壹、直播基礎(chǔ)知識介紹:

1.采集視頻、音頻

*1.1 采集視頻九巡、音頻編碼框架*

AVFoundation :AVFoundation是用來播放和創(chuàng)建實(shí)時的視聽媒體數(shù)據(jù)的框架图贸,同時提供Objective-C接口來操作這些視聽數(shù)據(jù),比如編輯冕广,旋轉(zhuǎn)疏日,重編碼

*1.2 視頻、音頻硬件設(shè)備*

CCD :圖像傳感器: 用于圖像采集和處理的過程撒汉,把圖像轉(zhuǎn)換成電信號沟优。

拾音器 :聲音傳感器: 用于聲音采集和處理的過程,把聲音轉(zhuǎn)換成電信號睬辐。

音頻采樣數(shù)據(jù) :一般都是PCM格式

視頻采樣數(shù)據(jù) : 一般都是 YUV ,或 RGB 格式挠阁,采集到的原始音視頻的體積是非常大的,需要經(jīng)過壓縮技術(shù)處理來提高傳輸效率

2.視頻處理(美顏溉委,水泳槲ā)

視頻處理原理 :因?yàn)橐曨l最終也是通過GPU爱榕,一幀一幀渲染到屏幕上的瓣喊,所以我們可以利用OpenGL ES,對視頻幀進(jìn)行各種加工黔酥,從而視頻各種不同的效果藻三, 就好像一個水龍頭流出的水洪橘,經(jīng)過若干節(jié)管道,然后流向不同的目標(biāo)

現(xiàn)在的各種美顏和視頻添加特效的app都是利用 GPUImage 這個框架實(shí)現(xiàn)的,.

*視頻處理框架*

GPUImage : GPUImage是一個基于OpenGL ES的一個強(qiáng)大的圖像/視頻處理框架,封裝好了各種濾鏡同時也可以編寫自定義的濾鏡,其本身內(nèi)置了多達(dá)120多種常見的濾鏡效果棵帽。

OpenGL :OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言熄求、跨平臺的編程接口的規(guī)格,它用于三維圖象(二維的亦可)逗概。OpenGL是個專業(yè)的圖形程序接口弟晚,是一個功能強(qiáng)大,調(diào)用方便的底層圖形庫逾苫。

OpenGL ES :OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集卿城,針對手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)铅搓。

3.視頻編碼解碼

*3.1 視頻編碼框架*

FFmpeg :是一個跨平臺的開源視頻框架,能實(shí)現(xiàn)如視頻編碼,解碼,轉(zhuǎn)碼,串流,播放等豐富的功能瑟押。其支持的視頻格式以及播放協(xié)議非常豐富,幾乎包含了所有音視頻編解碼、封裝格式以及播放協(xié)議星掰。

-Libswresample:可以對音頻進(jìn)行重采樣,rematrixing 以及轉(zhuǎn)換采樣格式等操 作多望。

-Libavcodec:提供了一個通用的編解碼框架,包含了許多視頻,音頻,字幕流 等編碼/解碼器。

-Libavformat:用于對視頻進(jìn)行封裝/解封裝氢烘。

-Libavutil:包含一些共用的函數(shù),如隨機(jī)數(shù)生成,數(shù)據(jù)結(jié)構(gòu),數(shù)學(xué)運(yùn)算等怀偷。

-Libpostproc:用于進(jìn)行視頻的一些后期處理。

-Libswscale:用于視頻圖像縮放,顏色空間轉(zhuǎn)換等威始。

-Libavfilter:提供濾鏡功能枢纠。

X264 :把視頻原數(shù)據(jù)YUV編碼壓縮成H.264格式

VideoToolbox :蘋果自帶的視頻硬解碼和硬編碼API,但是在iOS8之后才開放黎棠。

AudioToolbox :蘋果自帶的音頻硬解碼和硬編碼API

*3.2 視頻編碼技術(shù)*

視頻壓縮編碼標(biāo)準(zhǔn) : 對視頻進(jìn)行壓縮(視頻編碼)或者解壓縮(視頻解碼)的編碼技術(shù) ,比如 MPEG 晋渺, H.264 ,這些視頻編碼技術(shù)是壓縮編碼視頻的

主要作用 :是將視頻像素?cái)?shù)據(jù)壓縮成為視頻碼流,從而降低視頻的數(shù)據(jù)量脓斩。如果視頻不經(jīng)過壓縮編碼的話木西,體積通常是非常大的,一部電影可能就要上百G的空間随静。

注意 :最影響視頻質(zhì)量的是其視頻編碼數(shù)據(jù)和音頻編碼數(shù)據(jù)八千,跟封裝格式?jīng)]有多大關(guān)系

MPEG :一種視頻壓縮方式,它采用了幀間壓縮燎猛,僅存儲連續(xù)幀之間有差別的地方 恋捆,從而達(dá)到較大的壓縮比

H.264/AVC :一種視頻壓縮方式,采用事先預(yù)測和與MPEG中的P-B幀一樣的幀預(yù)測方法壓縮,它可以根據(jù)需要產(chǎn)生適合網(wǎng)絡(luò)情況傳輸?shù)囊曨l流,還有更高的壓縮比重绷,有更好的圖象質(zhì)量

注意1 :如果是從單個畫面清晰度比較沸停,MPEG4有優(yōu)勢;從動作連貫性上的清晰度昭卓,H.264有優(yōu)勢

注意2 :由于264的算法更加復(fù)雜愤钾,程序?qū)崿F(xiàn)煩瑣瘟滨,運(yùn)行它需要更多的處理器和內(nèi)存資源。因此能颁,運(yùn)行264對系統(tǒng)要求是比較高的杂瘸。

注意3 :由于264的實(shí)現(xiàn)更加靈活,它把一些實(shí)現(xiàn)留給了廠商自己去實(shí)現(xiàn)伙菊,雖然這樣給實(shí)現(xiàn)帶來了很多好處败玉,但是不同產(chǎn)品之間互通成了很大的問題,造成了通過A公司的編碼器編出的數(shù)據(jù)镜硕,必須通過A公司的解碼器去解這樣尷尬的事情

H.265/HEVC :一種視頻壓縮方式,基于H.264绒怨,保留原來的某些技術(shù),同時對一些相關(guān)的技術(shù)加以改進(jìn)谦疾,以改善碼流南蹂、編碼質(zhì)量、延時和算法復(fù)雜度之間的關(guān)系念恍,達(dá)到最優(yōu)化設(shè)置六剥。

H.265 是一種更為高效的編碼標(biāo)準(zhǔn),能夠在同等畫質(zhì)效果下將內(nèi)容的體積壓縮得更小峰伙,傳輸時更快更省帶寬

I幀 :(關(guān)鍵幀)保留一副完整的畫面疗疟,解碼時只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾嬅妫?/p>

P幀 :(差別幀)保留這一幀跟之前幀的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別瞳氓,生成最終畫面策彤。(P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))

B幀 :(雙向差別幀)保留的是本幀與前后幀的差別匣摘,解碼B幀店诗,不僅要取得之前的緩存畫面,還要解碼之后的畫面音榜,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面庞瘸。B幀壓縮率高,但是解碼時CPU會比較累

幀內(nèi)(Intraframe)壓縮 :當(dāng)壓縮一幀圖像時赠叼,僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息,幀內(nèi)一般采用有損壓縮算法

幀間(Interframe)壓縮 :時間壓縮(Temporal compression)擦囊,它通過比較時間軸上不同幀之間的數(shù)據(jù)進(jìn)行壓縮。幀間壓縮一般是無損的

muxing(合成) :將視頻流嘴办、音頻流甚至是字幕流封裝到一個文件中( 容器格式(FLV瞬场,TS) ),作為一個信號進(jìn)行傳輸涧郊。

*3.3 音頻編碼技術(shù)*

AAC 贯被, mp3 :這些屬于音頻編碼技術(shù),壓縮音頻用

*3.4碼率控制*

多碼率 :觀眾所處的網(wǎng)絡(luò)情況是非常復(fù)雜的,有可能是WiFi,有可能4G刃榨、3G、甚至2G双仍,那么怎么滿足多方需求呢枢希?多搞幾條線路,根據(jù)當(dāng)前網(wǎng)絡(luò)環(huán)境自定義碼率朱沃。

列如:常嘲危看見視頻播放軟件中的1024,720逗物,高清,標(biāo)清,流暢等辱士,指的就是各種碼率偶房。

*3.5 視頻封裝格式*

TS : 一種流媒體封裝格式,流媒體封裝有一個好處失暴,就是不需要加載索引再播放坯门,大大減少了首次載入的延遲,如果片子比較長逗扒,mp4文件的索引相當(dāng)大古戴,影響用戶體驗(yàn)

為什么要用TS :這是因?yàn)閮蓚€TS片段可以無縫拼接,播放器能連續(xù)播放

FLV : 一種流媒體封裝格式,由于它形成的文件極小矩肩、加載速度極快现恼,使得網(wǎng)絡(luò)觀看視頻文件成為可能,因此FLV格式成為了當(dāng)今主流視頻格式

4.推流

*4.1 數(shù)據(jù)傳輸框架*

librtmp :用來傳輸RTMP協(xié)議格式的數(shù)據(jù)

*4.2 流媒體數(shù)據(jù)傳輸協(xié)議*

RTMP :實(shí)時消息傳輸協(xié)議,Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸開發(fā)的開放協(xié)議黍檩,因?yàn)槭情_放協(xié)議所以都可以使用了叉袍。

RTMP協(xié)議用于對象、視頻刽酱、音頻的傳輸畦韭。

這個協(xié)議建立在TCP協(xié)議或者輪詢HTTP協(xié)議之上。

RTMP協(xié)議就像一個用來裝數(shù)據(jù)包的容器肛跌,這些數(shù)據(jù)可以是FLV中的視音頻數(shù)據(jù)艺配。一個單一的連接可以通過不同的通道傳輸多路網(wǎng)絡(luò)流,這些通道中的包都是按照固定大小的包傳輸?shù)?/p>

chunk :消息包

5.流媒體服務(wù)器

*5.1常用服務(wù)器*

SRS :一款國人開發(fā)的優(yōu)秀開源流媒體服務(wù)器系統(tǒng)

BMS :也是一款流媒體服務(wù)器系統(tǒng)衍慎,但不開源转唉,是SRS的商業(yè)版,比SRS功能更多

nginx :免費(fèi)開源web服務(wù)器稳捆,常用來配置流媒體服務(wù)器赠法。

*5.2數(shù)據(jù)分發(fā)*

CDN :(Content Delivery Network),即內(nèi)容分發(fā)網(wǎng)絡(luò),將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)”邊緣”,使用戶可以就近取得所需的內(nèi)容砖织,解決 Internet網(wǎng)絡(luò)擁擠的狀況款侵,提高用戶訪問網(wǎng)站的響應(yīng)速度.

CDN :代理服務(wù)器,相當(dāng)于一個中介侧纯。

CDN工作原理 :比如請求流媒體數(shù)據(jù)

1.上傳流媒體數(shù)據(jù)到服務(wù)器(源站)

2.源站存儲流媒體數(shù)據(jù)

3.客戶端播放流媒體新锈,向CDN請求編碼后的流媒體數(shù)據(jù)

4.CDN的服務(wù)器響應(yīng)請求,若節(jié)點(diǎn)上沒有該流媒體數(shù)據(jù)存在眶熬,則向源站繼續(xù)請求流媒體數(shù)據(jù)妹笆;若節(jié)點(diǎn)上已經(jīng)緩存了該視頻文件,則跳到第6步娜氏。

5.源站響應(yīng)CDN的請求拳缠,將流媒體分發(fā)到相應(yīng)的CDN節(jié)點(diǎn)上

6.CDN將流媒體數(shù)據(jù)發(fā)送到客戶端

回源 :當(dāng)有用戶訪問某一個URL的時候,如果被解析到的那個CDN節(jié)點(diǎn)沒有緩存響應(yīng)的內(nèi)容贸弥,或者是緩存已經(jīng)到期窟坐,就會回 源站 去獲取搜索。如果沒有人訪問绵疲,那么CDN節(jié)點(diǎn)不會主動去 源站 拿.

帶寬 :在固定的時間可傳輸?shù)臄?shù)據(jù)總量狸涌,

比如64位、800MHz的前端總線最岗,它的數(shù)據(jù)傳輸率就等于64bit×800MHz÷8(Byte)=6.4GB/s

負(fù)載均衡 : 由多臺服務(wù)器以對稱的方式組成一個服務(wù)器集合帕胆,每臺服務(wù)器都具有等價的地位,都可以單獨(dú)對外提供服務(wù)而無須其他服務(wù)器的輔助.

通過某種負(fù)載分擔(dān)技術(shù)般渡,將外部發(fā)送來的請求均勻分配到對稱結(jié)構(gòu)中的某一臺服務(wù)器上懒豹,而接收到請求的服務(wù)器獨(dú)立地回應(yīng)客戶的請求。

均衡負(fù)載能夠平均分配客戶請求到服務(wù)器列陣驯用,籍此提供快速獲取重要數(shù)據(jù)脸秽,解決大量并發(fā)訪問服務(wù)問題。

這種群集技術(shù)可以用最少的投資獲得接近于大型主機(jī)的性能蝴乔。

QoS(帶寬管理) :限制每一個組群的帶寬记餐,讓有限的帶寬發(fā)揮最大的效用

6.拉流

直播協(xié)議選擇 :

即時性要求較高或有互動需求的可以采用 RTMP , RTSP

對于有回放或跨平臺需求的,推薦使用 HLS

直播協(xié)議對比 :

HLS :由Apple公司定義的用于實(shí)時流傳輸?shù)膮f(xié)議,HLS基于HTTP協(xié)議實(shí)現(xiàn)薇正,傳輸內(nèi)容包括兩部分片酝,一是M3U8描述文件,二是TS媒體文件挖腰〉裱兀可實(shí)現(xiàn)流媒體的直播和點(diǎn)播,主要應(yīng)用在iOS系統(tǒng)

HLS是 以點(diǎn)播的技術(shù)方式 來實(shí)現(xiàn)直播

HLS是 自適應(yīng)碼率流播 猴仑,客戶端會根據(jù)網(wǎng)絡(luò)狀況自動選擇不同碼率的視頻流审轮,條件允許的情況下使用高碼率,網(wǎng)絡(luò)繁忙的時候使用低碼率,并且自動在二者間隨意切

換疾渣。這對移動設(shè)備網(wǎng)絡(luò)狀況不穩(wěn)定的情況下保障流暢播放非常有幫助篡诽。

實(shí)現(xiàn)方法是服務(wù)器端提供多碼率視頻流,并且在列表文件中注明榴捡,播放器根據(jù)播放進(jìn)度和下載速度自動調(diào)整杈女。

HLS與RTMP對比 :HLS主要是延時比較大,RTMP主要優(yōu)勢在于延時低

HLS協(xié)議的小切片方式會生成大量的文件薄疚,存儲或處理這些文件會造成大量資源浪費(fèi)

相比使用RTSP協(xié)議的好處在于,一旦切分完成赊琳,之后的分發(fā)過程完全不需要額外使用任何專門軟件街夭,普通的網(wǎng)絡(luò)服務(wù)器即可,大大降低了CDN邊緣服務(wù)器的配置要求躏筏,可以使用任何現(xiàn)成的CDN,而一般服務(wù)器很少支持RTSP板丽。

HTTP-FLV :基于HTTP協(xié)議流式的傳輸媒體內(nèi)容。

相對于RTMP趁尼,HTTP更簡單和廣為人知埃碱,內(nèi)容延遲同樣可以做到1~3秒,打開速度更快酥泞,因?yàn)镠TTP本身沒有復(fù)雜的狀態(tài)交互砚殿。所以從延遲角度來看,HTTP-FLV要優(yōu)于RTMP芝囤。

RTSP :實(shí)時流傳輸協(xié)議,定義了一對多應(yīng)用程序如何有效地通過IP網(wǎng)絡(luò)傳送多媒體數(shù)據(jù).

RTP :實(shí)時傳輸協(xié)議,RTP是建立在UDP協(xié)議上的似炎,常與RTCP一起使用,其本身并沒有提供按時發(fā)送機(jī)制或其它服務(wù)質(zhì)量(QoS)保證悯姊,它依賴于低層服務(wù)去實(shí)現(xiàn)這一過程羡藐。

RTCP :RTP的配套協(xié)議,主要功能是為RTP所提供的服務(wù)質(zhì)量(QoS)提供反饋,收集相關(guān)媒體連接的統(tǒng)計(jì)信息悯许,例如傳輸字節(jié)數(shù)仆嗦,傳輸分組數(shù),丟失分組數(shù)先壕,單向和雙向網(wǎng)絡(luò)延遲等等瘩扼。

7.解碼

*7.1 解封裝*

demuxing(分離) :從視頻流、音頻流垃僚,字幕流合成的文件( 容器格式(FLV邢隧,TS) )中, 分解出視頻冈在、音頻或字幕倒慧,各自進(jìn)行解碼。

*7.2 音頻編碼框架*

fdk_aac :音頻編碼解碼框架,PCM音頻數(shù)據(jù)和AAC音頻數(shù)據(jù)互轉(zhuǎn)

*7.3 解碼介紹*

硬解碼 :用GPU來解碼纫谅,減少CPU運(yùn)算

優(yōu)點(diǎn):播放流暢炫贤、低功耗,解碼速度快付秕,

* ? ?缺點(diǎn):兼容不好

軟解碼 :用CPU來解碼

優(yōu)點(diǎn):兼容好

* ? ?缺點(diǎn):加大CPU負(fù)擔(dān)兰珍,耗電增加、沒有硬解碼流暢询吴,解碼速度相對慢

8.播放

ijkplayer:一個基于FFmpeg的開源Android/iOS視頻播放器

API易于集成掠河;

編譯配置可裁剪,方便控制安裝包大忻图啤唠摹;

支持硬件加速解碼,更加省電

簡單易用奉瘤,指定拉流URL勾拉,自動解碼播放.

9.聊天互動

IM :(InstantMessaging)即時通訊:是一個實(shí)時通信系統(tǒng),允許兩人或多人使用網(wǎng)絡(luò)實(shí)時的傳遞文字消息盗温、文件藕赞、語音與視頻交流.

IM 在直播系統(tǒng)中的主要作用是實(shí)現(xiàn)觀眾與主播、觀眾與觀眾之間的文字互動.

*第三方SDK*

騰訊云:騰訊提供的即時通訊SDK卖局,可作為直播的聊天室

融云:一個比較常用的即時通訊SDK斧蜕,可作為直播的聊天室

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

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

七牛云:七牛直播云是專為直播平臺打造的全球化直播流服務(wù)和一站式實(shí)現(xiàn)SDK端到端直播場景的企業(yè)級直播云服務(wù)平臺.

*? ? 熊貓TV,龍珠TV等直播平臺都是用的七牛云

網(wǎng)易視頻云:基于專業(yè)的跨平臺視頻編解碼技術(shù)和大規(guī)模視頻內(nèi)容分發(fā)網(wǎng)絡(luò)惩激,提供穩(wěn)定流暢、低延時蟹演、高并發(fā)的實(shí)時音視頻服務(wù)风钻,可將視頻直播無縫對接到自身App.

2、第三方SDK公司為什么要提供SDK給我們酒请?

希望把我們的產(chǎn)品和它綁在一條船上骡技,更加的依賴它。

技術(shù)生錢羞反,幫養(yǎng)一大批牛B的程序員

3布朦、直播功能:自研還是使用第三方直播SDK開發(fā)?

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

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

4.第三方SDK好處

降低成本

使用好的第三方企業(yè)服務(wù)温赔,將不用再花高價請獵頭去挖昂貴的大牛蛤奢,也不用去安撫大牛們個性化的脾氣

提升效率

第三方服務(wù)的專注與代碼集成所帶來的方便,所花費(fèi)的時間可能僅僅是1-2個小時陶贼,節(jié)約近99%的時間啤贩,足夠換取更多的時間去和競爭對手斗智斗勇,增加更大的成功可能性

降低風(fēng)險

借助專業(yè)的第三方服務(wù)拜秧,由于它的快速痹屹、專業(yè)、穩(wěn)定等特點(diǎn)腹纳,能夠極大地加強(qiáng)產(chǎn)品的競爭能力(優(yōu)質(zhì)服務(wù)痢掠、研發(fā)速度等)驱犹,縮短試錯時間嘲恍,必將是創(chuàng)業(yè)中保命的手段之一

專業(yè)的事,找專業(yè)的人來做

第三方服務(wù)最少是10-20人的團(tuán)隊(duì)專注地解決同一個問題雄驹,做同一件事情佃牛。第三方服務(wù)所帶來的支持效果,絕不是通過1-2個人處理所能對比的医舆,難道不是嗎

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俘侠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔬将,更是在濱河造成了極大的恐慌爷速,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霞怀,死亡現(xiàn)場離奇詭異惫东,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毙石,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門廉沮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徐矩,你說我怎么就攤上這事滞时。” “怎么了滤灯?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵坪稽,是天一觀的道長曼玩。 經(jīng)常有香客問我,道長刽漂,這世上最難降的妖魔是什么演训? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贝咙,結(jié)果婚禮上样悟,老公的妹妹穿的比我還像新娘。我一直安慰自己庭猩,他們只是感情好窟她,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔼水,像睡著了一般震糖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趴腋,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天吊说,我揣著相機(jī)與錄音,去河邊找鬼优炬。 笑死颁井,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蠢护。 我是一名探鬼主播雅宾,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼葵硕!你這毒婦竟也來了眉抬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤懈凹,失蹤者是張志新(化名)和其女友劉穎蜀变,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體介评,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡库北,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了威沫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贤惯。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棒掠,靈堂內(nèi)的尸體忽然破棺而出孵构,到底是詐尸還是另有隱情,我是刑警寧澤烟很,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布颈墅,位于F島的核電站蜡镶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恤筛。R本人自食惡果不足惜官还,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毒坛。 院中可真熱鬧望伦,春花似錦、人聲如沸煎殷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪直。三九已至劣摇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弓乙,已是汗流浹背末融。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暇韧,地道東北人勾习。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像锨咙,于是被迫代替她去往敵國和親语卤。 傳聞我的和親對象是個殘疾皇子追逮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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