引言
在現(xiàn)在移動(dòng)互聯(lián)網(wǎng)如火如荼的時(shí)代戒突,流媒體業(yè)務(wù)在移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)中所占的比重越來越大,特別是今年直播業(yè)務(wù)的興起,使互聯(lián)網(wǎng)社交進(jìn)入了直播時(shí)代顾瞻,直播已經(jīng)成為很多APP特別是社交APP的標(biāo)配業(yè)務(wù)。站在一個(gè)程序員的角度(coding角度)來看德绿,直播業(yè)務(wù)其實(shí)就是流媒體業(yè)務(wù)荷荤。那么流媒體業(yè)務(wù)開發(fā)涉及到哪些方面的知識(shí)呢?下面我們來看看一個(gè)流媒體數(shù)據(jù)(音頻數(shù)據(jù)和圖像數(shù)據(jù))從采集 ->處理->編碼和格式封裝 -> 傳輸-> 解碼 -> 播放
整個(gè)過程中所涉及到的知識(shí)點(diǎn)移稳。例如一個(gè)直播業(yè)務(wù)的流媒體數(shù)據(jù)從采集到播放是這樣的:
采集
采集是整個(gè)過程中的第一個(gè)環(huán)節(jié)蕴纳,它從系統(tǒng)的采集設(shè)備中獲取原始視頻數(shù)據(jù),將其輸出到下一個(gè)環(huán)節(jié)个粱。視頻的采集涉及兩方面數(shù)據(jù)的采集:音頻采集和圖像采集古毛,它們分別對(duì)應(yīng)兩種完全不同的輸入源和數(shù)據(jù)格式。
-
音頻采集
采集源:麥克風(fēng)几蜻、系統(tǒng)聲音或者本地音頻文件等
-
采集內(nèi)容:
采集過程主要通過設(shè)備將環(huán)境中的模擬信號(hào)采集成 PCM 編碼的原始數(shù)據(jù)喇潘,然后編碼壓縮成 MP3 等格式的數(shù)據(jù)分發(fā)出去体斩。
音頻采集和編碼主要面臨的挑戰(zhàn)在于:延時(shí)敏感、卡頓敏感颖低、噪聲消除(Denoise)絮吵、回聲消除(AEC)、靜音檢測(cè)(VAD)和各種混音算法等忱屑。
在音頻采集階段蹬敲,參考的主要技術(shù)參數(shù)有 :
采樣率(samplerate):采樣就是把模擬信號(hào)數(shù)字化的過程,采樣頻率越高莺戒,記錄這一段音頻信號(hào)所用的數(shù)據(jù)量就越大伴嗡,同時(shí)音頻質(zhì)量也就越高。
位寬:每一個(gè)采樣點(diǎn)都需要用一個(gè)數(shù)值來表示大小从铲,這個(gè)數(shù)值的數(shù)據(jù)類型大小可以是:4bit瘪校、8bit、16bit名段、32bit 等等阱扬,位數(shù)越多,表示得就越精細(xì)伸辟,聲音質(zhì)量自然就越好麻惶,而數(shù)據(jù)量也會(huì)成倍增大。我們?cè)谝纛l采樣過程中常用的位寬是 8bit 或者 16bit信夫。
聲道數(shù)(channels):由于音頻的采集和播放是可以疊加的窃蹋,因此,可以同時(shí)從多個(gè)音頻源采集聲音静稻,并分別輸出到不同的揚(yáng)聲器警没,故聲道數(shù)一般表示聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。聲道數(shù)為 1 和 2 分別稱為單聲道和雙聲道姊扔,是比較常見的聲道參數(shù)惠奸。
音頻幀(frame):音頻跟視頻很不一樣,視頻每一幀就是一張圖像恰梢,而從上面的正玄波可以看出佛南,音頻數(shù)據(jù)是流式的,本身沒有明確的一幀幀的概念嵌言,在實(shí)際的應(yīng)用中嗅回,為了音頻算法處理/傳輸?shù)姆奖悖话慵s定俗成取 2.5ms~60ms 為單位的數(shù)據(jù)量為一幀音頻摧茴。這個(gè)時(shí)間被稱之為“采樣時(shí)間”绵载,其長(zhǎng)度沒有特別的標(biāo)準(zhǔn),它是根據(jù)編解碼器和具體應(yīng)用的需求來決定的。
根據(jù)以上定義娃豹,我們可以計(jì)算一下一幀音頻幀的大小焚虱。假設(shè)某音頻信號(hào)是采樣率為 8kHz、雙通道懂版、位寬為 16bit鹃栽,20ms 一幀,則一幀音頻數(shù)據(jù)的大小為:
size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte
-
圖像采集
采集源:攝像頭躯畴、屏幕錄制或者本地的視頻文件等
-
采集內(nèi)容:
圖像采集圖像采集的圖片結(jié)果組合成一組連續(xù)播放的動(dòng)畫民鼓,即構(gòu)成視頻中可肉眼觀看的內(nèi)容。圖像的采集過程主要由攝像頭等設(shè)備拍攝成 YUV 編碼的原始數(shù)據(jù)蓬抄,然后經(jīng)過編碼壓縮成 H.264 等格式的數(shù)據(jù)分發(fā)出去丰嘉。
圖像由于其直觀感受最強(qiáng)并且體積也比較大,構(gòu)成了一個(gè)視頻內(nèi)容的主要部分嚷缭。
圖像采集和編碼面臨的主要挑戰(zhàn)在于:設(shè)備兼容性差饮亏、延時(shí)敏感、卡頓敏感以及各種對(duì)圖像的處理操作如美顏和水印等峭状。
在圖像采集階段克滴,參考的主要技術(shù)參數(shù)有:
圖像傳輸格式:通用影像傳輸格式(Common Intermediate Format)是視訊會(huì)議(video conference)中常使用的影像傳輸格式。
圖像格式:通常采用 YUV 格式存儲(chǔ)原始數(shù)據(jù)信息优床,其中包含用 8 位表示的黑白圖像灰度值,以及可由 RGB 三種色彩組合成的彩色圖像誓焦。
傳輸通道:正常情況下視頻的拍攝只需 1 路通道胆敞,隨著 VR 和 AR 技術(shù)的日漸成熟,為了拍攝一個(gè)完整的 360° 視頻杂伟,可能需要通過不同角度拍攝移层,然后經(jīng)過多通道傳輸后合成。
分辨率:隨著設(shè)備屏幕尺寸的日益增多赫粥,視頻采集過程中原始視頻分辨率起著越來越重要的作用观话,后續(xù)處理環(huán)節(jié)中使用的所有視頻分辨率的定義都以原始視頻分辨率為基礎(chǔ)。視頻采集卡能支持的最大點(diǎn)陣反映了其分辨率的性能越平。
采樣頻率:采樣頻率反映了采集卡處理圖像的速度和能力频蛔。在進(jìn)行高度圖像采集時(shí),需要注意采集卡的采樣頻率是否滿足要求秦叛。采樣率越高晦溪,圖像質(zhì)量越高,同時(shí)保存這些圖像信息的數(shù)據(jù)量也越大挣跋。
處理
視頻或者音頻完成采集之后得到原始數(shù)據(jù)三圆,為了增強(qiáng)一些現(xiàn)場(chǎng)效果或者加上一些額外的效果,我們一般會(huì)在將其編碼壓縮前進(jìn)行處理,比如打上時(shí)間戳或者公司 Logo 的水印舟肉,祛斑美顏和聲音混淆等處理
常見視頻處理功能:
-
美顏
美顏的主要原理是通過「磨皮+美白」來達(dá)到整體美顏的效果修噪。磨皮的技術(shù)術(shù)語(yǔ)是「去噪」,也即對(duì)圖像中的噪點(diǎn)進(jìn)行去除或者模糊化處理路媚,常見的去噪算法有均值模糊黄琼、高斯模糊和中值濾波等。當(dāng)然磷籍, 由于臉部的每個(gè)部位不盡相同适荣,臉上的雀斑可能呈現(xiàn)出眼睛黑點(diǎn)的樣子,對(duì)整張圖像進(jìn)行「去噪」處理的時(shí)候不需要將眼睛也去掉院领,因此這個(gè)環(huán)節(jié)中也涉及到人臉和皮膚檢測(cè)技術(shù)
-
視頻水印
水印是圖片和視頻內(nèi)容中常見的功能之一弛矛,它可用于簡(jiǎn)單是版權(quán)保護(hù),或者進(jìn)行廣告設(shè)置.也就是在視頻圖像上的某些位置添加上別的圖片或文字比然。
-
濾鏡
在 iOS 端可以考慮使用 GPUImage 這個(gè)庫(kù)丈氓,這是一個(gè)開源的基于GPU的圖片或視頻的處理框架,內(nèi)置了多達(dá)120多種常見的濾鏡效果强法。
-
特效
特效其實(shí)就是在視頻中添加一組動(dòng)態(tài)的圖片水印万俗。一般是基于人臉識(shí)別的。
編碼和格式封裝
-
編碼
編碼是對(duì)從采集源獲取到的數(shù)據(jù)或者處理過的數(shù)據(jù)按照某種規(guī)范進(jìn)行壓縮的技術(shù)饮怯。例如:移動(dòng)端一般將從采集源獲取的音頻原始數(shù)據(jù)(PCM格式)編碼成AAC格式的數(shù)據(jù)闰歪,常見的音頻壓縮格式有:MP3,AAC蓖墅,HE-AAC库倘,Opus,F(xiàn)LAC论矾,Vorbis (Ogg)教翩,Speex 和 AMR等。從采集源獲取到的原始圖像數(shù)據(jù)(一般是YUV格式的)編碼成 h.264格式的數(shù)據(jù)贪壳。為什么要對(duì)這些原始數(shù)據(jù)進(jìn)行編碼饱亿,主要有兩個(gè)原因:
- 存儲(chǔ)困難 :因?yàn)樵紨?shù)據(jù),體積很大闰靴。
- 傳輸困難 :占帶寬彪笼, 費(fèi)流量。
為什么可以壓縮传黄,主要是因?yàn)椋?/p>
- 空間冗余:圖像相鄰像素之間有較強(qiáng)的相關(guān)性
- 時(shí)間冗余:視頻序列的相鄰圖像之間內(nèi)容相似
- 編碼冗余:不同像素值出現(xiàn)的概率不同
- 視覺冗余:人的視覺系統(tǒng)對(duì)某些細(xì)節(jié)不敏感
- 知識(shí)冗余:規(guī)律性的結(jié)構(gòu)可由先驗(yàn)知識(shí)和背景知識(shí)得到
數(shù)據(jù)壓縮一般分為 無損壓縮(Lossless)和 有損壓縮(Lossy)
編碼方式:
- 軟件編碼 常用FFMpeg多媒體庫(kù)杰扫,利用CPU做視頻的編碼
- 硬件編碼 利用GPU或者專用處理器來對(duì)視頻流進(jìn)行編碼
軟件編碼比較通用,但是占用CPU資源膘掰,編解碼效率不高章姓。硬件編碼效率很高佳遣。
-
封裝格式
所謂封裝格式也稱多媒體容器 (Multimedia Container),也就是將所有的處理好的視頻凡伊、音頻都包裝到一個(gè)文件容器內(nèi)呈現(xiàn)給觀眾零渐,這個(gè)包裝的過程就叫封裝。常見的視頻封裝格式有:MP4系忙、3GP诵盼、AVI、MKV银还、WMV风宁、MPG、VOB蛹疯、FLV戒财、SWF、MOV捺弦、RMVB 和 WebM 等饮寞。
傳輸
傳輸是指:通過互聯(lián)網(wǎng),地面無線廣播列吼,衛(wèi)星等方式將將壓縮的視頻碼流從編碼端傳輸?shù)浇獯a端幽崩。
解碼
解碼是對(duì)已編碼的視頻數(shù)據(jù)進(jìn)行還原解碼操作。
解碼方式:
> 1. 軟件解碼 常用FFMpeg多媒體庫(kù)寞钥,利用CPU做視頻的解碼
> 2. 硬件解碼 利用GPU或者專用處理器來對(duì)視頻流進(jìn)行解碼
軟件解碼比較通用慌申,但是占用CPU資源,編解碼效率不高理郑。硬件解碼效率很高太示。
播放
播放就是將解碼后的音頻數(shù)據(jù)通過音響等播放, 將視頻圖像數(shù)據(jù)通過顯示器等顯示香浩。
總結(jié):以上是通過查相關(guān)資料整理后的一些個(gè)人理解【拭悖可能有誤敬請(qǐng)各位同學(xué)指導(dǎo)批判邻吭。后面還會(huì)分模塊詳解。其中參考了雷霄驊很多資料宴霸,在此向大神表示敬意囱晴。
未完待續(xù)。