直播-拉流和推流概述

拉流(播放):

根據(jù)協(xié)議類型(如RTMP盔夜、RTP负饲、RTSP堤魁、HTTP等),與服務(wù)器建立連接并接收數(shù)據(jù)返十;

  • 解析二進(jìn)制數(shù)據(jù)妥泉,從中找到相關(guān)流信息;

  • 根據(jù)不同的封裝格式(如FLV洞坑、TS)解復(fù)用(demux)盲链;

  • 分別得到已編碼的H.264視頻數(shù)據(jù)和AAC音頻數(shù)據(jù);

  • 使用硬解碼(對(duì)應(yīng)系統(tǒng)的API)或軟解碼(FFMpeg)來(lái)解壓音視頻數(shù)據(jù)迟杂;

  • 經(jīng)過(guò)解碼后得到原始的視頻數(shù)據(jù)(YUV)和音頻數(shù)據(jù)(AAC)刽沾;

  • 因?yàn)橐纛l和視頻解碼是分開(kāi)的,所以我們得把它們同步起來(lái)逢慌,否則會(huì)出現(xiàn)音視頻不同步的現(xiàn)象悠轩,比如別人說(shuō)話會(huì)跟口型對(duì)不上间狂;

  • 最后把同步的音頻數(shù)據(jù)送到耳機(jī)或外放攻泼,視頻數(shù)據(jù)送到屏幕上顯示。

了解了播放器的播放流程后鉴象,我們可以優(yōu)化以下幾點(diǎn):

首屏?xí)r間優(yōu)化

從步驟2入手忙菠,通過(guò)預(yù)設(shè)解碼器類型,省去探測(cè)文件類型時(shí)間纺弊;

從步驟5入手牛欢,縮小視頻數(shù)據(jù)探測(cè)范圍,同時(shí)也意味著減少了需要下載的數(shù)據(jù)量淆游,特別是在網(wǎng)絡(luò)不好的時(shí)候傍睹,減少下載的數(shù)據(jù)量能為啟動(dòng)播放節(jié)省大量的時(shí)間,當(dāng)檢測(cè)到I幀數(shù)據(jù)后就立馬返回并進(jìn)入解碼環(huán)節(jié)犹菱。

推流:

推流.jpg
  • 經(jīng)過(guò)輸出設(shè)備(AVCaptureVideoDataOutput)得到原始的采樣數(shù)據(jù)--視頻數(shù)據(jù)(YUV)和音頻數(shù)據(jù)(AAC)拾稳;

  • 使用硬編碼(對(duì)應(yīng)系統(tǒng)的API)或軟編碼(FFMpeg)來(lái)編碼壓縮音視頻數(shù)據(jù);

  • 分別得到已編碼的H.264視頻數(shù)據(jù)和AAC音頻數(shù)據(jù)腊脱;

  • 根據(jù)不同的封裝格式(如FLV访得、TS、MPEG-TS)陕凹;

  • 使用HLS協(xié)議的時(shí)候加上這一步(HLS分段生成策略及m3u8索引文件)

  • 通過(guò)流上傳到服務(wù)器悍抑;

  • 服務(wù)器進(jìn)行相關(guān)協(xié)議的分發(fā)

推流步驟說(shuō)明:很容易看出推流跟播放其實(shí)是逆向的,具體流程就不多說(shuō)了杜耙。

  • 優(yōu)化一:適當(dāng)?shù)腝os(Quality of Service搜骡,服務(wù)質(zhì)量)策略。

推流端會(huì)根據(jù)當(dāng)前上行網(wǎng)絡(luò)情況控制音視頻數(shù)據(jù)發(fā)包和編碼佑女,在網(wǎng)絡(luò)較差的情況下浆兰,音視頻數(shù)據(jù)發(fā)送不出去磕仅,造成數(shù)據(jù)滯留在本地,這時(shí)簸呈,會(huì)停掉編碼器防止發(fā)送數(shù)據(jù)進(jìn)一步滯留榕订,同時(shí)會(huì)根據(jù)網(wǎng)絡(luò)情況選擇合適的策略控制音視頻發(fā)送。

比如網(wǎng)絡(luò)很差的情況下蜕便,推流端會(huì)優(yōu)先發(fā)送音頻數(shù)據(jù)劫恒,保證用戶能聽(tīng)到聲音,并在一定間隔內(nèi)發(fā)關(guān)鍵幀數(shù)據(jù)轿腺,保證用戶在一定時(shí)間間隔之后能看到一些畫(huà)面的變化两嘴。

  • 優(yōu)化二:合理的關(guān)鍵幀配置。

合理控制關(guān)鍵幀發(fā)送間隔(建議2秒或1秒一個(gè))族壳,這樣可以減少后端處理過(guò)程憔辫,為后端的緩沖區(qū)設(shè)置更小創(chuàng)造條件。

軟硬編解選擇

網(wǎng)上有不少關(guān)于選擇軟解還是硬解的分析文章仿荆,這里也介紹一些經(jīng)驗(yàn)贰您,但根本問(wèn)題是,沒(méi)有一個(gè)通用方案能最優(yōu)適配所有操作系統(tǒng)和機(jī)型拢操。

推流編碼: 推薦Andorid4.3(API18)或以上使用硬編锦亦,以下版本使用軟編;iOS使用全硬編方案令境;

播放解碼:Andorid杠园、iOS播放器都使用軟解碼方案,經(jīng)過(guò)我們和大量客戶的測(cè)試以及總結(jié)舔庶,雖然犧牲了功耗抛蚁,但是在部分細(xì)節(jié)方面表現(xiàn)會(huì)較優(yōu),且可控性強(qiáng)惕橙,兼容性也強(qiáng)瞧甩,出錯(cuò)情況少,推薦使用吕漂。

附軟硬編解碼優(yōu)缺點(diǎn)對(duì)比:

硬編碼軟編碼優(yōu)缺點(diǎn).jpg

采集

采集的步驟:

  1. 創(chuàng)建AVCaptureSession
  2. 輸入對(duì)象AVCaptureDeviceInput
  3. 輸出對(duì)象AVCaptureVideoDataOutput
  4. 輸出代理方法captureOutput(_:didOutputSampleBuffer:fromConnection:)

相關(guān)內(nèi)容

  • 采集數(shù)據(jù):iOS平臺(tái)上采集音視頻數(shù)據(jù)亲配,需要使用AVFoundation.Framework框架,從captureSession會(huì)話的回調(diào)中獲取音頻惶凝,視頻數(shù)據(jù)吼虎。
  • 傳輸層協(xié)議:主要采用RTMP協(xié)議居多(默認(rèn)端口1935,采用TCP協(xié)議)苍鲜,也有部分使用HLS協(xié)議
  • 音/視頻編碼解碼:FFMpege編碼解碼
  • 視頻編碼格式:H.265思灰、H.264、MPEG-4等混滔,封裝容器有TS洒疚、MKV歹颓、AVI、MP4等
  • 音頻編碼格式:G.711μ油湖、AAC巍扛、Opus等,封裝有MP3乏德、OGG撤奸、AAC等
  • 渲染工具:采用OpenGL渲染YUV數(shù)據(jù),呈現(xiàn)視頻畫(huà)面喊括。將PCM送入設(shè)備的硬件資源播放胧瓜,產(chǎn)生聲音。iOS播放流式音頻郑什,使用Audio Queue 的方式府喳,即,利用AudioToolbox.Framework 框架蘑拯。

參考技術(shù)文章
http://www.reibang.com/p/10b338e56800
快速集成iOS基于RTMP的視頻推流
雷霄驊(leixiaohua1020)的專欄
參考框架
RTMP推流
LiveVideoCoreSDK
FLVKit
PLMediaStreamingKit
直播播放器
ijkplayer
美顏
GPUImage

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钝满,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子强胰,更是在濱河造成了極大的恐慌舱沧,老刑警劉巖妹沙,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偶洋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡距糖,警方通過(guò)查閱死者的電腦和手機(jī)玄窝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悍引,“玉大人恩脂,你說(shuō)我怎么就攤上這事∪そ铮” “怎么了俩块?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浓领。 經(jīng)常有香客問(wèn)我玉凯,道長(zhǎng),這世上最難降的妖魔是什么联贩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任漫仆,我火速辦了婚禮,結(jié)果婚禮上泪幌,老公的妹妹穿的比我還像新娘盲厌。我一直安慰自己署照,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布吗浩。 她就那樣靜靜地躺著建芙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懂扼。 梳的紋絲不亂的頭發(fā)上岁钓,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音微王,去河邊找鬼屡限。 笑死,一個(gè)胖子當(dāng)著我的面吹牛炕倘,可吹牛的內(nèi)容都是我干的钧大。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼罩旋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啊央!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涨醋,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓜饥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浴骂,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乓土,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年溯警,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了趣苏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梯轻,死狀恐怖食磕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喳挑,我是刑警寧澤彬伦,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站伊诵,受9級(jí)特大地震影響单绑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日戈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一询张、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浙炼,春花似錦份氧、人聲如沸唯袄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恋拷。三九已至,卻和暖如春厅缺,著一層夾襖步出監(jiān)牢的瞬間蔬顾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工湘捎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诀豁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓窥妇,卻偏偏與公主長(zhǎng)得像舷胜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子活翩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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