目錄
- 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(原理篇)
- 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(播放篇)
- 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(采集篇)
- 【如何快速的開發(fā)一個(gè)完整的iOS直播app】(美顏篇)
前言
大半年沒寫博客了,但我一直關(guān)注著互聯(lián)網(wǎng)的動(dòng)向竭讳,最近會(huì)研究很多東西创葡,并分享,今年移動(dòng)直播行業(yè)的興起绢慢,誕生了一大批網(wǎng)紅灿渴,甚至明星也開始直播了,因此不得不跟上時(shí)代的步伐胰舆,由于第一次接觸的原因骚露,因此花了很多時(shí)間了解直播,整理了直播的原理缚窿,當(dāng)前只是原理篇
棘幸,后續(xù)會(huì)持續(xù)發(fā)布實(shí)戰(zhàn)篇
,教你從零開始搭建一個(gè)完整的iOS直播app
倦零,希望能幫助到更多的人更快的了解直播误续。
如果喜歡我的文章,可以關(guān)注我微博:袁崢Seemygo
一扫茅、個(gè)人見解(直播難與易)
直播難
:個(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驻子,也就是傳說中的站在大牛肩膀上編程灿意。
二、了解直播
熱門直播產(chǎn)品
映客崇呵,斗魚缤剧,熊貓,虎牙域慷,花椒等等
直播效果圖
1.一個(gè)完整直播app功能(來自落影l(fā)oyinglin分享)
-
1荒辕、
聊天
- 私聊汗销、聊天室、點(diǎn)亮抵窒、推送弛针、黑名單等;
-
2、
禮物
- 普通禮物李皇、豪華禮物削茁、紅包、排行榜掉房、第三方充值茧跋、內(nèi)購、禮物動(dòng)態(tài)更新圃阳、提現(xiàn)等厌衔;
-
3、
直播列表
- 關(guān)注捍岳、熱門富寿、最新、分類直播用戶列表等锣夹;
-
4页徐、
自己直播
- 錄制、推流银萍、解碼变勇、播放、美顏贴唇、心跳搀绣、后臺(tái)切換、主播對(duì)管理員操作戳气、管理員對(duì)用戶等链患;
-
5、
房間邏輯
- 創(chuàng)建房間瓶您、進(jìn)入房間麻捻、退出房間、關(guān)閉房間呀袱、切換房間贸毕、房間管理員設(shè)置、房間用戶列表等夜赵;
-
6明棍、
用戶邏輯
- 普通登陸、第三方登陸油吭、注冊(cè)击蹲、搜索署拟、修改個(gè)人信息、關(guān)注列表歌豺、粉絲列表推穷、忘記密碼、查看個(gè)人信息类咧、收入榜馒铃、關(guān)注和取關(guān)、檢索等痕惋;
-
7区宇、
觀看直播
- 聊天信息、滾屏彈幕值戳、禮物顯示议谷、加載界面等;
-
8堕虹、
統(tǒng)計(jì)
- APP業(yè)務(wù)統(tǒng)計(jì)卧晓、第三方統(tǒng)計(jì)等;
-
9赴捞、
超管
- 禁播逼裆、隱藏、審核等赦政;
2.一個(gè)完整直播app原理
直播原理
:把主播錄制的視頻胜宇,推送到服務(wù)器,在由服務(wù)器分發(fā)給觀眾觀看恢着。
直播環(huán)節(jié)
:推流端(采集桐愉、美顏處理、編碼掰派、推流)仅财、服務(wù)端處理(轉(zhuǎn)碼、錄制碗淌、截圖、鑒黃)抖锥、播放器(拉流亿眠、解碼、渲染)磅废、互動(dòng)系統(tǒng)(聊天室纳像、禮物系統(tǒng)、贊)
3.一個(gè)完整直播app實(shí)現(xiàn)流程
1.采集拯勉、2.濾鏡處理竟趾、3.編碼憔购、4.推流、5.CDN分發(fā)岔帽、6.拉流玫鸟、7.解碼、8.播放犀勒、9.聊天互動(dòng)
4.一個(gè)完整直播app架構(gòu)
5.一個(gè)完整直播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)畫面組猛们,一個(gè)GOP就是一組連續(xù)的畫面,每個(gè)畫面都是一幀,一個(gè)GOP就是很多幀的集合- 直播的數(shù)據(jù)湿痢,其實(shí)是一組圖片,包括I幀漓帚、P幀蹬敲、B幀,當(dāng)用戶第一次觀看的時(shí)候舶得,會(huì)尋找I幀掰烟,而播放器會(huì)到服務(wù)器尋找到最近的I幀反饋給用戶。因此沐批,GOP Cache增加了端到端延遲纫骑,因?yàn)樗仨氁玫阶罱腎幀
- GOP Cache的長度越長,畫面質(zhì)量越好
碼率
:圖片進(jìn)行壓縮后每秒顯示的數(shù)據(jù)量九孩。-
幀率
:每秒顯示的圖片數(shù)先馆。影響畫面流暢度,與畫面流暢度成正比:幀率越大躺彬,畫面越流暢煤墙;幀率越小,畫面越有跳動(dòng)感宪拥。- 由于人類眼睛的特殊生理結(jié)構(gòu)仿野,如果所看畫面之幀率高于16的時(shí)候,就會(huì)認(rèn)為是連貫的她君,此現(xiàn)象稱之為視覺暫留脚作。并且當(dāng)幀速達(dá)到一定數(shù)值后,再增長的話,人眼也不容易察覺到有明顯的流暢度提升了球涛。
分辨率
:(矩形)圖片的長度和寬度劣针,即圖片的尺寸壓縮前的每秒數(shù)據(jù)量
:幀率X分辨率(單位應(yīng)該是若干個(gè)字節(jié))壓縮比
:壓縮前的每秒數(shù)據(jù)量/碼率 (對(duì)于同一個(gè)視頻源并采用同一種視頻編碼算法,則:壓縮比越高亿扁,畫面質(zhì)量越差捺典。)-
視頻文件格式
:文件的后綴
,比如.wmv,.mov,.mp4,.mp3,.avi
,-
主要用處
魏烫,根據(jù)文件格式辣苏,系統(tǒng)會(huì)自動(dòng)判斷用什么軟件打開,
注意: 隨意修改文件格式,對(duì)文件的本身不會(huì)造成太大的影響哄褒,比如把a(bǔ)vi改成mp4,文件還是avi.
-
-
視頻封裝格式
:一種儲(chǔ)存視頻信息的容器
稀蟋,流式封裝可以有TS、FLV
等呐赡,索引式的封裝有MP4,MOV,AVI
等退客,-
主要作用
:一個(gè)視頻文件往往會(huì)包含圖像和音頻,還有一些配置信息(如圖像和音頻的關(guān)聯(lián)链嘀,如何解碼它們等):這些內(nèi)容需要按照一定的規(guī)則組織萌狂、封裝起來. -
注意
:會(huì)發(fā)現(xiàn)封裝格式跟文件格式一樣,因?yàn)橐话阋曨l文件格式的后綴名即采用相應(yīng)的視頻封裝格式的名稱,所以視頻文件格式就是視頻封裝格式怀泊。
-
視頻封裝格式和視頻壓縮編碼標(biāo)準(zhǔn)
:就好像項(xiàng)目工程和編程語言茫藏,封裝格式就是一個(gè)項(xiàng)目的工程,視頻編碼方式就是編程語言霹琼,一個(gè)項(xiàng)目工程可以用不同語言開發(fā)务傲。
四、直播基礎(chǔ)知識(shí)介紹:
1.采集視頻枣申、音頻
***** 1.1 采集視頻售葡、音頻編碼框架 *****
-
AVFoundation
:AVFoundation是用來播放和創(chuàng)建實(shí)時(shí)的視聽媒體數(shù)據(jù)的框架,同時(shí)提供Objective-C接口來操作這些視聽數(shù)據(jù)忠藤,比如編輯挟伙,旋轉(zhuǎn),重編碼
***** 1.2 視頻模孩、音頻硬件設(shè)備 *****
-
CCD
:圖像傳感器: 用于圖像采集和處理的過程尖阔,把圖像轉(zhuǎn)換成電信號(hào)。 -
拾音器
:聲音傳感器: 用于聲音采集和處理的過程榨咐,把聲音轉(zhuǎn)換成電信號(hào)诺祸。 -
音頻采樣數(shù)據(jù)
:一般都是PCM格式 -
視頻采樣數(shù)據(jù)
: 一般都是YUV
,或RGB
格式,采集到的原始音視頻的體積是非常大的祭芦,需要經(jīng)過壓縮技術(shù)處理來提高傳輸效率
2.視頻處理(美顏,水鱼竟怼)
-
視頻處理原理
:因?yàn)橐曨l最終也是通過GPU龟劲,一幀一幀渲染到屏幕上的胃夏,所以我們可以利用OpenGL ES,對(duì)視頻幀進(jìn)行各種加工昌跌,從而視頻各種不同的效果仰禀,就好像一個(gè)水龍頭流出的水,經(jīng)過若干節(jié)管道蚕愤,然后流向不同的目標(biāo)
- 現(xiàn)在的各種美顏和視頻添加特效的app都是利用
GPUImage
這個(gè)框架實(shí)現(xiàn)的,.
- 現(xiàn)在的各種美顏和視頻添加特效的app都是利用
***** 視頻處理框架 *****
-
GPUImage
: GPUImage是一個(gè)基于OpenGL ES的一個(gè)強(qiáng)大的圖像/視頻處理框架,封裝好了各種濾鏡同時(shí)也可以編寫自定義的濾鏡,其本身內(nèi)置了多達(dá)120多種常見的濾鏡效果答恶。 -
OpenGL
:OpenGL(全寫Open Graphics Library)是個(gè)定義了一個(gè)跨編程語言、跨平臺(tái)的編程接口的規(guī)格萍诱,它用于三維圖象(二維的亦可)悬嗓。OpenGL是個(gè)專業(yè)的圖形程序接口,是一個(gè)功能強(qiáng)大裕坊,調(diào)用方便的底層圖形庫包竹。 -
OpenGL ES
:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對(duì)手機(jī)籍凝、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)周瞎。
3.視頻編碼解碼
***** 3.1 視頻編碼框架 *****
-
FFmpeg
:是一個(gè)跨平臺(tái)的開源視頻框架,能實(shí)現(xiàn)如視頻編碼,解碼,轉(zhuǎn)碼,串流,播放等豐富的功能。其支持的視頻格式以及播放協(xié)議非常豐富,幾乎包含了所有音視頻編解碼饵蒂、封裝格式以及播放協(xié)議声诸。- -Libswresample:可以對(duì)音頻進(jìn)行重采樣,rematrixing 以及轉(zhuǎn)換采樣格式等操 作。
- -Libavcodec:提供了一個(gè)通用的編解碼框架,包含了許多視頻,音頻,字幕流 等編碼/解碼器退盯。
- -Libavformat:用于對(duì)視頻進(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)
:對(duì)視頻進(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
:一種視頻壓縮方式孤个,它采用了幀間壓縮剃允,僅存儲(chǔ)連續(xù)幀之間有差別的地方 ,從而達(dá)到較大的壓縮比 -
H.264/AVC
:一種視頻壓縮方式,采用事先預(yù)測(cè)和與MPEG中的P-B幀一樣的幀預(yù)測(cè)方法壓縮,它可以根據(jù)需要產(chǎn)生適合網(wǎng)絡(luò)情況傳輸?shù)囊曨l流,還有更高的壓縮比斥废,有更好的圖象質(zhì)量-
注意1
:如果是從單個(gè)畫面清晰度比較椒楣,MPEG4有優(yōu)勢(shì);從動(dòng)作連貫性上的清晰度牡肉,H.264有優(yōu)勢(shì) -
注意2
:由于264的算法更加復(fù)雜捧灰,程序?qū)崿F(xiàn)煩瑣,運(yùn)行它需要更多的處理器和內(nèi)存資源统锤。因此毛俏,運(yùn)行264對(duì)系統(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ù)嘲驾,同時(shí)對(duì)一些相關(guān)的技術(shù)加以改進(jìn)淌哟,以改善碼流、編碼質(zhì)量辽故、延時(shí)和算法復(fù)雜度之間的關(guān)系徒仓,達(dá)到最優(yōu)化設(shè)置。- H.265 是一種更為高效的編碼標(biāo)準(zhǔn)誊垢,能夠在同等畫質(zhì)效果下將內(nèi)容的體積壓縮得更小掉弛,傳輸時(shí)更快更省帶寬
-
I幀
:(關(guān)鍵幀)保留一副完整的畫面,解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾嬅妫?/li>
-
P幀
:(差別幀)保留這一幀跟之前幀的差別喂走,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別殃饿,生成最終畫面。(P幀沒有完整畫面數(shù)據(jù)芋肠,只有與前一幀的畫面差別的數(shù)據(jù)) -
B幀
:(雙向差別幀)保留的是本幀與前后幀的差別乎芳,解碼B幀,不僅要取得之前的緩存畫面帖池,還要解碼之后的畫面奈惑,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高睡汹,但是解碼時(shí)CPU會(huì)比較累 -
幀內(nèi)(Intraframe)壓縮
:當(dāng)壓縮一幀圖像時(shí)肴甸,僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息,幀內(nèi)一般采用有損壓縮算法 -
幀間(Interframe)壓縮
:時(shí)間壓縮(Temporal compression),它通過比較時(shí)間軸上不同幀之間的數(shù)據(jù)進(jìn)行壓縮囚巴。幀間壓縮一般是無損的 -
muxing(合成)
:將視頻流原在、音頻流甚至是字幕流封裝到一個(gè)文件中(容器格式(FLV友扰,TS)
),作為一個(gè)信號(hào)進(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
: 一種流媒體封裝格式铲敛,流媒體封裝有一個(gè)好處褐澎,就是不需要加載索引再播放,大大減少了首次載入的延遲伐蒋,如果片子比較長工三,mp4文件的索引相當(dāng)大,影響用戶體驗(yàn)-
為什么要用TS
:這是因?yàn)閮蓚€(gè)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í)時(shí)消息傳輸協(xié)議,Adobe Systems公司為Flash播放器和服務(wù)器之間音頻焙畔、視頻和數(shù)據(jù)傳輸開發(fā)的開放協(xié)議掸读,因?yàn)槭情_放協(xié)議所以都可以使用了。- RTMP協(xié)議用于對(duì)象闹蒜、視頻寺枉、音頻的傳輸。
- 這個(gè)協(xié)議建立在TCP協(xié)議或者輪詢HTTP協(xié)議之上绷落。
- RTMP協(xié)議就像一個(gè)用來裝數(shù)據(jù)包的容器姥闪,這些數(shù)據(jù)可以是FLV中的視音頻數(shù)據(jù)。一個(gè)單一的連接可以通過不同的通道傳輸多路網(wǎng)絡(luò)流砌烁,這些通道中的包都是按照固定大小的包傳輸?shù)?/li>
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)于一個(gè)中介萌业。 -
CDN工作原理
:比如請(qǐng)求流媒體數(shù)據(jù)- 1.上傳流媒體數(shù)據(jù)到服務(wù)器(源站)
- 2.源站存儲(chǔ)流媒體數(shù)據(jù)
- 3.客戶端播放流媒體,向CDN請(qǐng)求編碼后的流媒體數(shù)據(jù)
- 4.CDN的服務(wù)器響應(yīng)請(qǐng)求奸柬,若節(jié)點(diǎn)上沒有該流媒體數(shù)據(jù)存在生年,則向源站繼續(xù)請(qǐng)求流媒體數(shù)據(jù);若節(jié)點(diǎn)上已經(jīng)緩存了該視頻文件廓奕,則跳到第6步抱婉。
- 5.源站響應(yīng)CDN的請(qǐng)求,將流媒體分發(fā)到相應(yīng)的CDN節(jié)點(diǎn)上
- 6.CDN將流媒體數(shù)據(jù)發(fā)送到客戶端
-
-
回源
:當(dāng)有用戶訪問某一個(gè)URL的時(shí)候桌粉,如果被解析到的那個(gè)CDN節(jié)點(diǎn)沒有緩存響應(yīng)的內(nèi)容蒸绩,或者是緩存已經(jīng)到期,就會(huì)回源站
去獲取搜索番甩。如果沒有人訪問侵贵,那么CDN節(jié)點(diǎn)不會(huì)主動(dòng)去源站
拿. -
帶寬
:在固定的時(shí)間可傳輸?shù)臄?shù)據(jù)總量,- 比如64位缘薛、800MHz的前端總線窍育,它的數(shù)據(jù)傳輸率就等于64bit×800MHz÷8(Byte)=6.4GB/s
-
負(fù)載均衡
: 由多臺(tái)服務(wù)器以對(duì)稱的方式組成一個(gè)服務(wù)器集合,每臺(tái)服務(wù)器都具有等價(jià)的地位宴胧,都可以單獨(dú)對(duì)外提供服務(wù)而無須其他服務(wù)器的輔助.- 通過某種負(fù)載分擔(dān)技術(shù)漱抓,將外部發(fā)送來的請(qǐng)求均勻分配到對(duì)稱結(jié)構(gòu)中的某一臺(tái)服務(wù)器上,而接收到請(qǐng)求的服務(wù)器獨(dú)立地回應(yīng)客戶的請(qǐng)求恕齐。
- 均衡負(fù)載能夠平均分配客戶請(qǐng)求到服務(wù)器列陣乞娄,籍此提供快速獲取重要數(shù)據(jù),解決大量并發(fā)訪問服務(wù)問題显歧。
- 這種群集技術(shù)可以用最少的投資獲得接近于大型主機(jī)的性能仪或。
-
QoS(帶寬管理)
:限制每一個(gè)組群的帶寬,讓有限的帶寬發(fā)揮最大的效用
6.拉流
-
直播協(xié)議選擇
:- 即時(shí)性要求較高或有互動(dòng)需求的可以采用
RTMP
,RTSP
- 對(duì)于有回放或跨平臺(tái)需求的士骤,推薦使用
HLS
- 即時(shí)性要求較高或有互動(dòng)需求的可以采用
`直播協(xié)議對(duì)比` :
-
HLS
:由Apple公司定義的用于實(shí)時(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)碼率流播
添忘,客戶端會(huì)根據(jù)網(wǎng)絡(luò)狀況自動(dòng)選擇不同碼率的視頻流采呐,條件允許的情況下使用高碼率,網(wǎng)絡(luò)繁忙的時(shí)候使用低碼率搁骑,并且自動(dòng)在二者間隨意切
換斧吐。這對(duì)移動(dòng)設(shè)備網(wǎng)絡(luò)狀況不穩(wěn)定的情況下保障流暢播放非常有幫助。 - 實(shí)現(xiàn)方法是服務(wù)器端提供多碼率視頻流仲器,并且在列表文件中注明会通,播放器根據(jù)播放進(jìn)度和下載速度自動(dòng)調(diào)整。
- HLS是
-
HLS與RTMP對(duì)比
:HLS主要是延時(shí)比較大娄周,RTMP主要優(yōu)勢(shì)在于延時(shí)低- HLS協(xié)議的小切片方式會(huì)生成大量的文件,存儲(chǔ)或處理這些文件會(huì)造成大量資源浪費(fèi)
- 相比使用RTSP協(xié)議的好處在于沪停,一旦切分完成煤辨,之后的分發(fā)過程完全不需要額外使用任何專門軟件,普通的網(wǎng)絡(luò)服務(wù)器即可木张,大大降低了CDN邊緣服務(wù)器的配置要求众辨,可以使用任何現(xiàn)成的CDN,而一般服務(wù)器很少支持RTSP。
-
HTTP-FLV
:基于HTTP協(xié)議流式的傳輸媒體內(nèi)容舷礼。- 相對(duì)于RTMP鹃彻,HTTP更簡單和廣為人知,內(nèi)容延遲同樣可以做到1~3秒妻献,打開速度更快蛛株,因?yàn)镠TTP本身沒有復(fù)雜的狀態(tài)交互。所以從延遲角度來看育拨,HTTP-FLV要優(yōu)于RTMP谨履。
-
RTSP
:實(shí)時(shí)流傳輸協(xié)議,定義了一對(duì)多應(yīng)用程序如何有效地通過IP網(wǎng)絡(luò)傳送多媒體數(shù)據(jù). -
RTP
:實(shí)時(shí)傳輸協(xié)議,RTP是建立在UDP協(xié)議上的,常與RTCP一起使用熬丧,其本身并沒有提供按時(shí)發(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):兼容不好
- 優(yōu)點(diǎn):播放流暢、低功耗渐苏,解碼速度快掀潮,
-
軟解碼
:用CPU來解碼- 優(yōu)點(diǎn):兼容好
* 缺點(diǎn):加大CPU負(fù)擔(dān),耗電增加琼富、沒有硬解碼流暢仪吧,解碼速度相對(duì)慢
- 優(yōu)點(diǎn):兼容好
8.播放
-
ijkplayer:一個(gè)基于FFmpeg的開源Android/iOS視頻播放器
- API易于集成;
- 編譯配置可裁剪鞠眉,方便控制安裝包大惺硎蟆;
- 支持硬件加速解碼械蹋,更加省電
- 簡單易用出皇,指定拉流URL,自動(dòng)解碼播放.
9.聊天互動(dòng)
-
IM
:(InstantMessaging)即時(shí)通訊:是一個(gè)實(shí)時(shí)通信系統(tǒng)哗戈,允許兩人或多人使用網(wǎng)絡(luò)實(shí)時(shí)的傳遞文字消息郊艘、文件、語音與視頻交流.-
IM
在直播系統(tǒng)中的主要作用是實(shí)現(xiàn)觀眾與主播唯咬、觀眾與觀眾之間的文字互動(dòng).
***** 第三方SDK *****
-
- 騰訊云:騰訊提供的即時(shí)通訊SDK纱注,可作為直播的聊天室
- 融云:一個(gè)比較常用的即時(shí)通訊SDK,可作為直播的聊天室
五副渴、如何快速的開發(fā)一個(gè)完整的iOS直播app
1奈附、利用第三方直播SDK快速的開發(fā)
七牛云:七牛直播云是專為直播平臺(tái)打造的全球化直播流服務(wù)和一站式實(shí)現(xiàn)SDK端到端直播場景的企業(yè)級(jí)直播云服務(wù)平臺(tái).
* 熊貓TV,龍珠TV等直播平臺(tái)都是用的七牛云
網(wǎng)易視頻云:基于專業(yè)的跨平臺(tái)視頻編解碼技術(shù)和大規(guī)模視頻內(nèi)容分發(fā)網(wǎng)絡(luò),提供穩(wěn)定流暢煮剧、低延時(shí)斥滤、高并發(fā)的實(shí)時(shí)音視頻服務(wù),可將視頻直播無縫對(duì)接到自身App.
2勉盅、第三方SDK公司為什么要提供SDK給我們佑颇?
- 希望把我們的產(chǎn)品和它綁在一條船上,更加的依賴它草娜。
- 技術(shù)生錢挑胸,幫養(yǎng)一大批牛B的程序員
3、直播功能:自研還是使用第三方直播SDK開發(fā)宰闰?
第三方SDK開發(fā)
: 對(duì)于一個(gè)初創(chuàng)團(tuán)隊(duì)來講茬贵,自研直播不管在技術(shù)門檻簿透、CDN、帶寬上都是有很大的門檻的解藻,而且需要耗費(fèi)大量的時(shí)間才能做出成品老充,不利于拉投資。
自研
:公司直播平臺(tái)大螟左,從長遠(yuǎn)看啡浊,自研可以節(jié)省成本,技術(shù)成面比直接用SDK可控多了胶背。
4.第三方SDK好處
- 降低成本
- 使用好的第三方企業(yè)服務(wù)巷嚣,將不用再花高價(jià)請(qǐng)獵頭去挖昂貴的大牛,也不用去安撫大牛們個(gè)性化的脾氣
- 提升效率
- 第三方服務(wù)的專注與代碼集成所帶來的方便钳吟,所花費(fèi)的時(shí)間可能僅僅是1-2個(gè)小時(shí)廷粒,節(jié)約近99%的時(shí)間,足夠換取更多的時(shí)間去和競爭對(duì)手斗智斗勇红且,增加更大的成功可能性
- 降低風(fēng)險(xiǎn)
- 借助專業(yè)的第三方服務(wù)评雌,由于它的快速、專業(yè)直焙、穩(wěn)定等特點(diǎn),能夠極大地加強(qiáng)產(chǎn)品的競爭能力(優(yōu)質(zhì)服務(wù)砂轻、研發(fā)速度等)奔誓,縮短試錯(cuò)時(shí)間,必將是創(chuàng)業(yè)中保命的手段之一
- 專業(yè)的事搔涝,找專業(yè)的人來做
- 第三方服務(wù)最少是10-20人的團(tuán)隊(duì)專注地解決同一個(gè)問題厨喂,做同一件事情。第三方服務(wù)所帶來的支持效果庄呈,絕不是通過1-2個(gè)人處理所能對(duì)比的蜕煌,難道不是嗎
結(jié)束語
后續(xù)還會(huì)有講解視頻采集,美顏诬留,聊天室斜纪,禮物系統(tǒng)等更多功能,敬請(qǐng)關(guān)注N亩摇:懈铡!