音視頻處理
數(shù)據(jù)采集。對(duì)于音頻來說采集到的數(shù)據(jù)是PCM格式,對(duì)于視頻數(shù)據(jù)采集的格式是YUV格式。
數(shù)據(jù)壓縮編碼。數(shù)據(jù)采集完成之后,需要對(duì)數(shù)據(jù)進(jìn)行壓縮編碼。音視頻使用的壓縮技術(shù)稱為有損壓縮技術(shù)。而像我們平RAR,ZIP工具進(jìn)行的壓縮都是無損壓縮。就是說解壓后的數(shù)據(jù)與原始數(shù)據(jù)一樣叫做無損壓縮,解壓后和原始數(shù)據(jù)高度接近稱為有損壓縮,音視頻編碼屬于后者。對(duì)于音頻來講,常用的編碼格式有speex, AAC, OPUS, G.711等?,F(xiàn)在比較常用的是AAC,一是它音質(zhì)比較好,二是RTMP對(duì)AAC支持的比較好。對(duì)于視頻編碼格式有H.264, H.265, VP8, VP9等,目?;旧隙际鞘褂肏.264。注意,衡量有損壓縮好壞的指標(biāo)就是看同等壓縮率的情況下,解壓后的數(shù)據(jù)與原始數(shù)據(jù)之間差別的大小,差別越小證明壓縮的算法越優(yōu)。當(dāng)然在實(shí)時(shí)互動(dòng)直播中,我們?yōu)榱藢?shí)時(shí)性就需要犧牲一部分質(zhì)量或者也有可能為了質(zhì)量而犧牲一些實(shí)時(shí)性,這需要仔細(xì)的權(quán)衡。
傳輸。數(shù)據(jù)壓縮完之后通過網(wǎng)絡(luò)傳輸。對(duì)于泛娛樂化的直播平臺(tái)一般都使用RTMP協(xié)議進(jìn)行數(shù)據(jù)的傳輸,RTMP是在TCP之上的網(wǎng)絡(luò)協(xié)議。對(duì)于實(shí)時(shí)互動(dòng)直播則必須使用UDP進(jìn)行數(shù)據(jù)傳輸。 UDP數(shù)據(jù)的傳輸速度上比TCP有天然的優(yōu)勢(shì)。RTMP是Adobe公司發(fā)明一種傳輸協(xié)議,目前所有的CDN網(wǎng)絡(luò)對(duì)RTMP的支持是非常好的,但它的問題就是延遲性比較大。使用RTMP造成延遲主要有兩個(gè)方面原因,一是RTMP網(wǎng)絡(luò)協(xié)議由于是基于TCP協(xié)議的,本身延遲就比UDP大,另一方面是CDN架構(gòu)造成的。CDN首先從頂級(jí)結(jié)點(diǎn)接收數(shù)據(jù),然后以樹狀形式分發(fā)到端結(jié)點(diǎn),這個(gè)過程鏈條比較長,導(dǎo)致整體的延遲非常大。而且延遲時(shí)間不固定,有可能某段時(shí)間延遲3?5秒,也有可能過一段時(shí)間延遲就達(dá)到了30秒這都是有可能的。
解碼。就是將對(duì)編碼數(shù)據(jù)做反向操作。如音頻是AAC編碼,則它再解為PCM格式數(shù)據(jù)。視頻是H.264再解為YUV數(shù)據(jù)。
播放和渲染。對(duì)于音頻直接將PCM數(shù)據(jù)放入到音頻驅(qū)動(dòng)緩沖驅(qū),驅(qū)動(dòng)程序就會(huì)將音頻播放出來。對(duì)于視頻一般會(huì)通過 opengl利用 GPU進(jìn)行圖像渲染。