Android視頻直播基礎(chǔ)知識(shí)

直播流程:

  • 1、 采集視頻、音頻
    攝像頭 NV21 camera
    麥克風(fēng) pcm數(shù)據(jù)
  • 2袁辈、 視頻處理
    美顏、水印珠漂、濾鏡
  • 3晚缩、 音視頻數(shù)據(jù)壓縮
    硬編碼:視頻MediaCodec 音頻AudioTack
    軟編碼:
    視頻壓縮、視頻編碼 H264 x264將NV21 數(shù)據(jù)轉(zhuǎn)換成YUV420P
    音頻壓縮媳危、音頻編碼 AAC
  • 4荞彼、 推流
    將采集到的音視頻數(shù)據(jù),根據(jù)流媒體協(xié)議推送到流媒體服務(wù)器上
    將音視頻封裝成FLV或者TS流
  • 5待笑、 流媒體服務(wù)器數(shù)據(jù)處理
    截屏鸣皂,獲取視頻縮略圖
    錄制
    實(shí)時(shí)轉(zhuǎn)碼
    CDN分發(fā)
  • 6、 拉流
    從流媒體服務(wù)器上獲取音視頻數(shù)據(jù)
    通過(guò)流媒體協(xié)議:RTMP暮蹂、RTSP寞缝、HLS、HTTP
  • 7仰泻、 音視頻解碼
    視頻解碼:硬解:MediaCodec 軟解:H264
    音頻解碼:硬解:AudioTrack 軟解:faac
  • 8荆陆、 播放
  • 9、 聊天互動(dòng)
  • 10集侯、彈幕

主流的流媒體服務(wù)器

  • FMS:(Flash media server) Adobe推出的
    支持協(xié)議:RTMP被啼、RTMPT、RTMPE浅悉、RTMPS趟据、RTMFP
    商業(yè),收費(fèi)成本高
  • Red5 :
    暴雪公司 是Java開發(fā)的基于flash的流媒體使用RTMP協(xié)議术健,與FMS兼容汹碱,MP3和FLV文件轉(zhuǎn)換成流
    免費(fèi)開源,性能差不穩(wěn)定
  • Nginx :偽流媒體
    c開發(fā)的荞估,高性能HTTP和反向代理流媒體服務(wù)器咳促,外網(wǎng)反向代理到內(nèi)網(wǎng)稚新,再響應(yīng)到到公網(wǎng)
    是一個(gè)模塊化的服務(wù)器,部署方便跪腹,性能高

RTMP協(xié)議:

RTMP是Real Time Messaging Protocol(實(shí)時(shí)消息傳輸協(xié)議)的首字母縮寫褂删。該協(xié)議基于TCP,是一個(gè)協(xié)議簇冲茸,包括RTMP基本協(xié)議及
RTMPT/RTMPS/RTMPE等多種變種屯阀。RTMP是一種設(shè)計(jì)用來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來(lái)在Flash/AIR平臺(tái)和支持RTMP協(xié)
議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信轴术。

RTMP協(xié)議是Adobe公司推出的實(shí)時(shí)傳輸協(xié)議难衰,主要用于基于flv格式的音視頻流的實(shí)時(shí)傳輸。得到編碼后的視音頻數(shù)據(jù)后逗栽,先要進(jìn)行
FLV包裝盖袭,然后封包成rtmp格式,然后進(jìn)行傳輸彼宠。使用RTMP格式進(jìn)行傳輸鳄虱,需要先連接服務(wù)器,然后創(chuàng)建流凭峡,然后發(fā)布流拙已,然后傳輸
相應(yīng)的視音頻數(shù)據(jù)。整個(gè)發(fā)送是用消息來(lái)定義的想罕,rtmp定義了各種形式的消息悠栓,而為了消息能夠很好地發(fā)送霉涨,又對(duì)消息進(jìn)行了分塊處
理按价,整個(gè)協(xié)議較為復(fù)雜。

音頻PCM數(shù)據(jù)

參數(shù):聲道數(shù)笙瑟、采樣位數(shù)楼镐、采樣率
1、聲道數(shù):?jiǎn)温暤劳稀⒘Ⅲw聲等
2框产、采樣率:每秒鐘取得聲音樣本的次數(shù),頻率越高错洁,聲質(zhì)越好秉宿,占用資源越多。人耳的分辨率有限屯碴,太高也分辨不出描睦。
16位聲卡中有22.05KHz和44.1KHz等幾級(jí),22.05KHz相當(dāng)于FM廣播的音質(zhì)导而,44.1KHz相當(dāng)于CD的音質(zhì)了忱叭,
目前常用的采樣率不超過(guò)48KHZ
3隔崎、采樣位數(shù):衡量聲音波動(dòng)變化的一個(gè)參數(shù),也可以說(shuō)是聲卡的分辨率韵丑。計(jì)算機(jī)中采樣位數(shù)一般有8位和16位爵卒。

視頻參數(shù):

  • 分辨率:視頻是由連續(xù)的圖像構(gòu)成的。圖像則是由像素(pixel)構(gòu)成的撵彻。
    一張圖像有多少像素钓株,稱為這個(gè)圖像的分辨率。視頻的分辨率就是每一幀圖像的分辨率陌僵。
  • 幀率:一個(gè)視頻享幽,每一秒由多少圖像構(gòu)成,稱為這個(gè)視頻的幀率(frame-rate)
  • 碼率:碼率的定義是視頻文件體積除以時(shí)間拾弃。單位一般是Kbps(Kbit/s)或者M(jìn)bps(Mbit/s)

H264編碼框架:

分為兩層:

  • 視頻編碼層(VCL):負(fù)責(zé)高效的視頻內(nèi)容表示值桩,VCL數(shù)據(jù)即編碼處理的輸出,表示被壓縮編碼后的視頻數(shù)據(jù)序列
  • 網(wǎng)絡(luò)提取層(NAL):負(fù)責(zé)以網(wǎng)路要求的恰當(dāng)?shù)姆绞綄?duì)數(shù)據(jù)進(jìn)行打包和傳送豪椿,是傳輸層奔坟,網(wǎng)絡(luò)播放和本地播放都是用此來(lái)傳輸

編碼原理:
H264協(xié)議里定義了三種幀:I幀、P幀搭盾、B幀
H264中圖像以序列位單位進(jìn)行組織咳秉,一個(gè)序列是一段圖像編碼后的數(shù)據(jù)流,以I幀開始到下一個(gè)I幀結(jié)束鸯隅。一個(gè)序列的
第一個(gè)圖像叫IDR圖像(立即刷新圖樣)澜建,IDR圖像都是I幀圖像。
H.264 引入 IDR 圖像是為了解碼的重同步蝌以,當(dāng)解碼器解碼到 IDR 圖像時(shí)炕舵,立即將參考幀隊(duì)列清空,將已解碼的數(shù)
據(jù)全部輸出或拋棄跟畅,重新查找參數(shù)集咽筋,開始一個(gè)新的序列。這樣徊件,如果前一個(gè)序列出現(xiàn)重大錯(cuò)誤奸攻,在這里可以獲得
重新同步的機(jī)會(huì)。IDR圖像之后的圖像永遠(yuǎn)不會(huì)使用IDR之前的圖像的數(shù)據(jù)來(lái)解碼虱痕。

h264的壓縮方法:

  • 1.分組:把幾幀圖像分為一組(GOP睹耐,也就是一個(gè)序列),為防止運(yùn)動(dòng)變化,幀數(shù)不宜取多
  • 2.預(yù)測(cè)幀:以I幀做為基礎(chǔ)幀,以I幀預(yù)測(cè)P幀,再由I幀和P幀預(yù)測(cè)B幀;
  • 3.數(shù)據(jù)傳輸:最后將I幀數(shù)據(jù)與預(yù)測(cè)的差值信息進(jìn)行存儲(chǔ)和傳輸。

I幀 : 關(guān)鍵幀

I幀:幀內(nèi)編碼幀 部翘,你可以理解為這一幀畫面的完整保留硝训;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾嬅妫?br> I幀特點(diǎn):
1)它是一個(gè)全幀壓縮編碼幀。它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸;
2)解碼時(shí)僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像;
3)I幀描述了圖像背景和運(yùn)動(dòng)主體的詳情;
4)I幀不需要參考其他畫面而生成;
5)I幀是P幀和B幀的參考幀(其質(zhì)量直接影響到同組中以后各幀的質(zhì)量);
6)I幀是幀組GOP的基礎(chǔ)幀(第一幀),在一組中只有一個(gè)I幀;
7)I幀不需要考慮運(yùn)動(dòng)矢量;
8)I幀所占數(shù)據(jù)的信息量比較大。

P幀 :前向預(yù)測(cè)編碼幀

P幀:表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別捎迫,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別晃酒,
生成最終畫面。(也就是差別幀窄绒,P幀沒有完整畫面數(shù)據(jù)贝次,只有與前一幀的畫面差別的數(shù)據(jù))
P幀的預(yù)測(cè)與重構(gòu):
P幀是以I幀為參考幀,在I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送。
在接收端根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值并與差值相加以得到P幀“某點(diǎn)”樣值,從而可得到完整的P幀彰导。
P幀特點(diǎn):
1)P幀是I幀后面相隔1~2幀的編碼幀;
2)P幀采用運(yùn)動(dòng)補(bǔ)償?shù)姆椒▊魉退c前面的I或P幀的差值及運(yùn)動(dòng)矢量(預(yù)測(cè)誤差);
3)解碼時(shí)必須將I幀中的預(yù)測(cè)值與預(yù)測(cè)誤差求和后才能重構(gòu)完整的P幀圖像;
4)P幀屬于前向預(yù)測(cè)的幀間編碼蛔翅。它只參考前面最靠近它的I幀或P幀;
5)P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀;
6)由于P幀是參考幀,它可能造成解碼錯(cuò)誤的擴(kuò)散;
7)由于是差值傳送,P幀的壓縮比較高。

B幀:雙向預(yù)測(cè)內(nèi)插編碼幀

B幀是雙向差別幀位谋,也就是B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜山析,有4種情況,
但我這樣說(shuō)簡(jiǎn)單些)掏父,換言之笋轨,要解碼B幀,不僅要取得之前的緩存畫面赊淑,還要解碼之后的畫面爵政,通過(guò)前后畫面的與本
幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高陶缺,但是解碼時(shí)CPU會(huì)比較累钾挟。
B幀的預(yù)測(cè)與重構(gòu)
B幀以前面的I或P幀和后面的P幀為參考幀,“找出”B幀“某點(diǎn)”的預(yù)測(cè)值和兩個(gè)運(yùn)動(dòng)矢量,并取預(yù)測(cè)差值和運(yùn)動(dòng)矢量傳送。
接收端根據(jù)運(yùn)動(dòng)矢量在兩個(gè)參考幀中“找出(算出)”預(yù)測(cè)值并與差值求和,得到B幀“某點(diǎn)”樣值,從而可得到完整的B幀饱岸。
B幀特點(diǎn)
1)B幀是由前面的I或P幀和后面的P幀來(lái)進(jìn)行預(yù)測(cè)的;
2)B幀傳送的是它與前面的I或P幀和后面的P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量;
3)B幀是雙向預(yù)測(cè)編碼幀;
4)B幀壓縮比最高,因?yàn)樗环从硟蓞⒖紟g運(yùn)動(dòng)主體的變化情況,預(yù)測(cè)比較準(zhǔn)確;
5)B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散掺出。。

一般來(lái)說(shuō)苫费,I幀的壓縮率是7(跟JPG差不多)汤锨,P幀是20,B幀可 以達(dá)到50黍衙∧喑可見使用B幀能節(jié)省大量空間,節(jié)省出來(lái)的
空間可以用來(lái)保存多一些I幀琅翻,這樣在相同碼率下,可以提供更好的畫質(zhì)柑贞。

幀內(nèi)壓縮:

幀內(nèi)(Intraframe)壓縮也稱為空間壓縮(Spatial compression)方椎。當(dāng)壓縮一幀圖像時(shí),僅考慮本幀的數(shù)據(jù)而不考慮
相鄰幀之間的冗余信息钧嘶,這實(shí)際上與靜態(tài)圖像壓縮類似棠众。幀內(nèi)一般采用有損壓縮算法,由于幀內(nèi)壓縮是編碼一個(gè)完整
的圖像,所以可以獨(dú)立的解碼闸拿、顯示空盼。幀內(nèi)壓縮一般達(dá)不到很高的壓縮,跟編碼jpeg差不多新荤。

幀間壓縮:

幀間(Interframe)壓縮的原理是:相鄰幾幀的數(shù)據(jù)有很大的相關(guān)性揽趾,或者說(shuō)前后兩幀信息變化很小的特點(diǎn)。
也即連續(xù)的視頻其相鄰幀之間具有冗余信 息,根據(jù)這一特性苛骨,壓縮相鄰幀之間的冗余量就可以進(jìn)一步提高壓縮量篱瞎,
減小壓縮比。幀間壓縮也稱為時(shí)間壓縮(Temporal compression)痒芝,它通過(guò)比較時(shí)間軸上不同幀之間的數(shù)據(jù)進(jìn)行壓縮俐筋。
幀間壓縮一般是無(wú)損的。幀差值(Frame differencing)算法是一種典型的時(shí)間壓縮法严衬,它通過(guò)比較本幀與相鄰幀
之間的差異澄者,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數(shù)據(jù)量请琳。

無(wú)損(Lossy less)壓縮:

也即壓縮前和解壓縮后的數(shù)據(jù)完全一致闷哆。多數(shù)的無(wú)損壓縮都采用RLE行程編碼算法。
有損(Lossy )壓縮:
意味著解壓縮后的數(shù)據(jù)與壓縮前的數(shù)據(jù)不一致单起。在壓縮的過(guò)程中要丟失一些人眼和人耳所不敏感的圖像或音頻
信息,而且丟失的信息不可恢復(fù)抱怔。

幾乎所有高壓縮的算法都采用有損壓縮,這樣才能達(dá)到低數(shù)據(jù)率的目標(biāo)。丟失的數(shù)據(jù)率與壓縮比有關(guān),壓縮比越小嘀倒,丟失
的數(shù)據(jù)越多,解壓縮后的效果一般越差屈留。此外,某些有損壓縮算法采用多次重復(fù)壓縮的方式,這樣還會(huì)引 起額外的數(shù)據(jù)丟失。

ACC編碼特點(diǎn):

(1) AAC是一種高壓縮比的音頻壓縮算法测蘑,但它的壓縮比要遠(yuǎn)超過(guò)較老的音頻壓縮算法灌危,
如AC-3、MP3等碳胳。并且其質(zhì)量可以同未壓縮的CD音質(zhì)相媲美勇蝙。
(2) 同其他類似的音頻編碼算法一樣,AAC也是采用了變換編碼算法挨约,但AAC使用了分辨率
更高的濾波器組味混,因此它可以達(dá)到更高的壓縮比。 (3) AAC使用了臨時(shí)噪聲重整诫惭、后向自適應(yīng)線性預(yù)測(cè)翁锡、聯(lián)合立體聲技術(shù)和量化哈夫曼編碼等最新技術(shù),
這些新技術(shù)的使用都使壓縮比得到進(jìn)一步的提高
(4) AAC支持更多種采樣率和比特率夕土、支持1個(gè)到48個(gè)音軌馆衔、支持多達(dá)15個(gè)低頻音軌瘟判、具有
多種語(yǔ)言的兼容能力、還有多達(dá)15個(gè)內(nèi)嵌數(shù)據(jù)流角溃。 (5) AAC支持更寬的聲音頻率范圍拷获,最高可達(dá)到96kHz,最低可達(dá)8KHz减细,遠(yuǎn)寬于MP3的16KHz-48kHz的范圍匆瓜。 (6)不同于MP3及WMA,AAC幾乎不損失聲音頻率中的甚高邪财、甚低頻率成分陕壹,并且比WMA在頻譜結(jié)構(gòu)上更接近于原始
音頻,因而聲音的保真度更好树埠。專業(yè)評(píng)測(cè)中表明糠馆,AAC比WMA聲音更清晰,而且更接近原音怎憋。 (7)AAC采用優(yōu)化的算法達(dá)到了更高的解碼效率又碌,解碼時(shí)只需較少的處理能力。

AAC與MP3規(guī)格對(duì)比

比特率:AAC - 最高超過(guò)400kbps / MP3 - 32~320kbps采樣率:AAC - 最高96kHz / MP3 - 最高48kHz聲道數(shù):AAC - (5.1)六聲道 / MP3 - 兩聲道采樣精度:AAC - 最高32bit / MP3 - 最高16bit

demo地址:https://pan.baidu.com/s/1Wz5O7qVpgvsWx6l4j8NfvA

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绊袋,一起剝皮案震驚了整個(gè)濱河市毕匀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌癌别,老刑警劉巖皂岔,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異展姐,居然都是意外死亡躁垛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門圾笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)教馆,“玉大人,你說(shuō)我怎么就攤上這事擂达⊥疗蹋” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵板鬓,是天一觀的道長(zhǎng)悲敷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)穗熬,這世上最難降的妖魔是什么镀迂? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮唤蔗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己妓柜,他們只是感情好箱季,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棍掐,像睡著了一般藏雏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上作煌,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天掘殴,我揣著相機(jī)與錄音,去河邊找鬼粟誓。 笑死奏寨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹰服。 我是一名探鬼主播病瞳,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悲酷!你這毒婦竟也來(lái)了套菜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤设易,失蹤者是張志新(化名)和其女友劉穎逗柴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顿肺,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戏溺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挟冠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片于购。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖知染,靈堂內(nèi)的尸體忽然破棺而出肋僧,到底是詐尸還是另有隱情,我是刑警寧澤控淡,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布嫌吠,位于F島的核電站,受9級(jí)特大地震影響掺炭,放射性物質(zhì)發(fā)生泄漏辫诅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一涧狮、第九天 我趴在偏房一處隱蔽的房頂上張望炕矮。 院中可真熱鬧么夫,春花似錦、人聲如沸肤视。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邢滑。三九已至腐螟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間困后,已是汗流浹背乐纸。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摇予,地道東北人汽绢。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像趾盐,于是被迫代替她去往敵國(guó)和親庶喜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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