自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS直播類APP開(kāi)發(fā)流程解析(內(nèi)附源碼詳解)

移動(dòng)開(kāi)發(fā)
個(gè)人認(rèn)為要想把直播從零開(kāi)始做出來(lái),絕對(duì)是牛逼中的牛逼,大牛中的大牛,因?yàn)橹辈ブ羞\(yùn)用到的技術(shù)難點(diǎn)非常之多,視頻/音頻處理,圖形處理,視頻/音頻壓縮,CDN分發(fā),即時(shí)通訊等技術(shù),每一個(gè)技術(shù)都?jí)驅(qū)W幾年的。

前言

個(gè)人認(rèn)為要想把直播從零開(kāi)始做出來(lái),絕對(duì)是牛逼中的牛逼,大牛中的大牛,因?yàn)橹辈ブ羞\(yùn)用到的技術(shù)難點(diǎn)非常之多,視頻/音頻處理,圖形處理,視頻/音頻壓縮,CDN分發(fā),即時(shí)通訊等技術(shù),每一個(gè)技術(shù)都?jí)驅(qū)W幾年的。

  • 如果你有更好的建議或者對(duì)這篇文章有不滿的地方, 請(qǐng)聯(lián)系我, 我會(huì)進(jìn)行修改,
  • 祝大家學(xué)習(xí)愉快~謝謝~
  • 一個(gè)完整直播APP原理

把主播錄制的視頻,推送到服務(wù)器,在由服務(wù)器分發(fā)給觀眾觀看。

推流端(采集、美顏處理、編碼、推流)、服務(wù)端處理(轉(zhuǎn)碼、錄制、截圖、鑒黃)、播放器(拉流、解碼、渲染)、互動(dòng)系統(tǒng)(聊天室、禮物系統(tǒng)、贊)

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

1.采集視頻、音頻

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

  • CCD:圖像傳感器: 用于圖像采集和處理的過(guò)程,把圖像轉(zhuǎn)換成電信號(hào)。
  • 拾音器:聲音傳感器: 用于聲音采集和處理的過(guò)程,把聲音轉(zhuǎn)換成電信號(hào)。
  • 音頻采樣數(shù)據(jù):一般都是PCM格式
  • 視頻采樣數(shù)據(jù): 一般都是YUV,或RGB格式,采集到的原始音視頻的體積是非常大的,需要經(jīng)過(guò)壓縮技術(shù)處理來(lái)提高傳輸效率

2.視頻處理(美顏,水印)

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

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

視頻處理的框架

  • GPUImage : GPUImage是一個(gè)基于OpenGL ES的一個(gè)強(qiáng)大的圖像/視頻處理框架,封裝好了各種濾鏡同時(shí)也可以編寫自定義的濾鏡,其本身內(nèi)置了多達(dá)120多種常見(jiàn)的濾鏡效果。
  • OpenGL:OpenGL(全寫Open Graphics Library)是個(gè)定義了一個(gè)跨編程語(yǔ)言、跨平臺(tái)的編程接口的規(guī)格,它用于三維圖象(二維的亦可)。OpenGL是個(gè)專業(yè)的圖形程序接口,是一個(gè)功能強(qiáng)大,調(diào)用方便的底層圖形庫(kù)。
  • OpenGL ES:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三維圖形 API 的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。

3.音視頻編碼解碼

  • 視頻壓縮編碼標(biāo)準(zhǔn):對(duì)視頻進(jìn)行壓縮(視頻編碼)或者解壓縮(視頻解碼)的編碼技術(shù),比如MPEG,H.264,這些視頻編碼技術(shù)是壓縮編碼視頻的
  • MPEG:一種視頻壓縮方式,它采用了幀間壓縮,僅存儲(chǔ)連續(xù)幀之間有差別的地方 ,從而達(dá)到較大的壓縮比
  • H.264/AVC:一種視頻壓縮方式,采用事先預(yù)測(cè)和與MPEG中的P-B幀一樣的幀預(yù)測(cè)方法壓縮,它可以根據(jù)需要產(chǎn)生適合網(wǎng)絡(luò)情況傳輸?shù)囊曨l流,還有更高的壓縮比,有更好的圖象質(zhì)量
  • H.265/HEVC:一種視頻壓縮方式,基于H.264,保留原來(lái)的某些技術(shù),同時(shí)對(duì)一些相關(guān)的技術(shù)加以改進(jìn),以改善碼流、編碼質(zhì)量、延時(shí)和算法復(fù)雜度之間的關(guān)系,達(dá)到最優(yōu)化設(shè)置。

音頻編碼技術(shù)

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

碼率控制

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

視頻封裝格式

  • TS : 一種流媒體封裝格式,流媒體封裝有一個(gè)好處,就是不需要加載索引再播放,大大減少了首次載入的延遲,如果片子比較長(zhǎng),mp4文件的索引相當(dāng)大,影響用戶體驗(yàn)
  • FLV: 一種流媒體封裝格式,由于它形成的文件極小、加載速度極快,使得網(wǎng)絡(luò)觀看視頻文件成為可能,因此FLV格式成為了當(dāng)今主流視頻格式

4.推流

推流,就是將采集到的音頻,視頻數(shù)據(jù)通過(guò)流媒體協(xié)議發(fā)送到流媒體服務(wù)器。

選擇流媒體協(xié)議

現(xiàn)在直播應(yīng)用,采用RTMP協(xié)議居多,也有部分使用HLS協(xié)議。

采用RTMP協(xié)議,就要看下它與流媒體服務(wù)器交互的過(guò)程,RTMP協(xié)議的默認(rèn)端口是1935,采用TCP協(xié)議。并且需要了解FLV的封裝格式。

采用HLS協(xié)議,因?yàn)樯婕暗角衅?,延時(shí)會(huì)比較大,需要了解TS流。

采集音視頻數(shù)據(jù)

做直播,數(shù)據(jù)的來(lái)源不可缺少,就是采集攝像頭,麥克風(fēng)的數(shù)據(jù)。

iOS平臺(tái)上采集音視頻數(shù)據(jù),需要使用AVFoundation.Framework框架,從captureSession會(huì)話的回調(diào)中獲取音頻,視頻數(shù)據(jù)。

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

常用服務(wù)器

  • SRS:一款國(guó)人開(kāi)發(fā)的優(yōu)秀開(kāi)源流媒體服務(wù)器系統(tǒng)
  • BMS:也是一款流媒體服務(wù)器系統(tǒng),但不開(kāi)源,是SRS的商業(yè)版,比SRS功能更多
  • nginx:免費(fèi)開(kāi)源web服務(wù)器,常用來(lái)配置流媒體服務(wù)器

6.拉流

直播協(xié)議選擇:

  • 即時(shí)性要求較高或有互動(dòng)需求的可以采用RTMP,RTSP
  • 對(duì)于有回放或跨平臺(tái)需求的,推薦使用HLS

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)

7.解碼

使用相關(guān)硬件或軟件對(duì)接收到的編碼后的音視頻數(shù)據(jù)進(jìn)行解碼,得到可以直接顯示的圖像/聲音

涉及技術(shù)或協(xié)議:

  • 一般對(duì)應(yīng)的編碼器都會(huì)帶有相應(yīng)的解碼器,也有一些第三方解碼插件等

8.播放

ijkplayer:一個(gè)基于FFmpeg的開(kāi)源Android/iOS視頻播放器

  • API易于集成;
  • 編譯配置可裁剪,方便控制安裝包大小;
  • 支持硬件加速解碼,更加省電
  • 簡(jiǎn)單易用,指定拉流URL,自動(dòng)解碼播放.

9.聊天互動(dòng)

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

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

第三方SDK

  • 騰訊云:騰訊提供的即時(shí)通訊SDK,可作為直播的聊天室
  • 融云:一個(gè)比較常用的即時(shí)通訊SDK,可作為直播的聊天室

項(xiàng)目代碼獲取

想要獲取案例源碼可以加我技術(shù)交流群:656315826 最近我在研究這一塊,如果你有更好的建議或者對(duì)這篇文章有不滿的地方, 請(qǐng)聯(lián)系我, 我會(huì)進(jìn)行修改,共同學(xué)習(xí)進(jìn)步。

祝大家學(xué)習(xí)愉快

 

責(zé)任編輯:未麗燕 來(lái)源: 簡(jiǎn)書(shū)
相關(guān)推薦

2018-03-20 14:17:38

2021-08-10 20:41:33

AndroidApp流程

2011-08-17 14:20:21

IOS開(kāi)發(fā)GraphicsCon

2020-12-17 11:11:56

iOS 14輕APP蘋果

2013-06-17 15:41:09

Windows PhoWP開(kāi)發(fā)JSON生成C#類

2024-03-28 18:17:49

PMSAndroid

2014-07-14 11:14:00

iOSSafariWebApp

2013-06-04 16:59:42

iOS開(kāi)發(fā)iOS工具移動(dòng)開(kāi)發(fā)

2021-04-08 21:37:06

AppGallery 應(yīng)用開(kāi)發(fā)

2013-09-12 15:37:09

iOS開(kāi)發(fā)流程

2011-07-20 11:09:58

蘋果 OpenCL 變量

2022-08-08 19:35:37

HDF驅(qū)動(dòng)開(kāi)發(fā)鴻蒙

2011-07-08 17:12:50

iOS XML

2011-08-05 16:18:32

iOS XML 解析

2021-07-21 16:30:38

iOSAPP架構(gòu)

2013-01-15 10:38:06

iOSAppAppCan

2021-09-02 07:00:01

Glide流程Android

2021-11-06 07:42:04

驗(yàn)證開(kāi)發(fā)流程

2011-07-07 16:38:21

iOS UITableVie

2009-07-08 13:22:30

JDK源碼分析Set
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)