视频直播技术详解(1)采集
聲明:本文為CSDN原創(chuàng)投稿文章,未經(jīng)許可,禁止任何形式的轉(zhuǎn)載。
作者:七牛云
責(zé)編:錢(qián)曙光,關(guān)注架構(gòu)和算法領(lǐng)域,尋求報(bào)道或者投稿請(qǐng)發(fā)郵件qianshg@csdn.net,另有「CSDN 高級(jí)架構(gòu)師群」,內(nèi)有諸多知名互聯(lián)網(wǎng)公司的大牛架構(gòu)師,歡迎架構(gòu)師加微信qshuguang2008申請(qǐng)入群,備注姓名+公司+職位。
from: http://geek.csdn.net/news/detail/98074
隨著互聯(lián)網(wǎng)用戶(hù)消費(fèi)內(nèi)容和交互方式的升級(jí),支撐這些內(nèi)容和交互方式的基礎(chǔ)設(shè)施也正在悄悄發(fā)生變革。手機(jī)設(shè)備拍攝視頻能力和網(wǎng)絡(luò)的升級(jí)催生了大家對(duì)視頻直播領(lǐng)域的關(guān)注,吸引了很多互聯(lián)網(wǎng)創(chuàng)業(yè)者或者成熟企業(yè)進(jìn)入該領(lǐng)域。
七牛云于6月底發(fā)布了一個(gè)針對(duì)視頻直播的實(shí)時(shí)流網(wǎng)絡(luò)LiveNet和完整的直播云解決方案,很多開(kāi)發(fā)者對(duì)這個(gè)網(wǎng)絡(luò)和解決方案的細(xì)節(jié)和使用場(chǎng)景非常感興趣。
結(jié)合該實(shí)時(shí)流網(wǎng)絡(luò)LiveNet和直播云解決方案的實(shí)踐,我們將用七篇文章,更系統(tǒng)化地介紹當(dāng)下大熱的視頻直播各環(huán)節(jié)的關(guān)鍵技術(shù),幫助視頻直播創(chuàng)業(yè)者們更全面、深入地了解視頻直播技術(shù),更好地技術(shù)選型。
本系列文章大綱如下:
(一)采集
(二)處理
(三)編碼和封裝
(四)推流和傳輸
(五)現(xiàn)代播放器原理
(六)延遲優(yōu)化
(七)SDK性能測(cè)試模型
本篇將重點(diǎn)聊聊:采集。
采集是整個(gè)視頻推流過(guò)程中的第一個(gè)環(huán)節(jié),它從系統(tǒng)的采集設(shè)備中獲取原始視頻數(shù)據(jù),將其輸出到下一個(gè)環(huán)節(jié)。視頻的采集涉及兩方面數(shù)據(jù)的采集:音頻采集和圖像采集,它們分別對(duì)應(yīng)兩種完全不同的輸入源和數(shù)據(jù)格式。
采集內(nèi)容
1.音頻采集
音頻數(shù)據(jù)既能與圖像結(jié)合組合成視頻數(shù)據(jù),也能以純音頻的方式采集播放,后者在很多成熟的應(yīng)用場(chǎng)景如在線電臺(tái)和語(yǔ)音電臺(tái)等起著非常重要的作用。音頻的采集過(guò)程主要通過(guò)設(shè)備將環(huán)境中的模擬信號(hào)采集成PCM編碼的原始數(shù)據(jù),然后編碼壓縮成MP3等格式的數(shù)據(jù)分發(fā)出去。常見(jiàn)的音頻壓縮格式有:MP3、AAC、OGG、WMA、Opus、FLAC、APE、m4a和AMR等。
音頻采集和編碼主要面臨的挑戰(zhàn)在于:延時(shí)敏感、卡頓敏感、噪聲消除(Denoise)、回聲消除(AEC)、靜音檢測(cè)(VAD)和各種混音算法等。
在音頻采集階段,參考的主要技術(shù)參數(shù)有:
-
采樣率(samplerate):采樣就是把模擬信號(hào)數(shù)字化的過(guò)程,采樣頻率越高,記錄這一段音頻信號(hào)所用的數(shù)據(jù)量就越大,同時(shí)音頻質(zhì)量也就越高。
-
位寬:每一個(gè)采樣點(diǎn)都需要用一個(gè)數(shù)值來(lái)表示大小,這個(gè)數(shù)值的數(shù)據(jù)類(lèi)型大小可以是:4bit、8bit、16bit、32bit等,位數(shù)越多,表示得就越精細(xì),聲音質(zhì)量自然就越好,而數(shù)據(jù)量也會(huì)成倍增大。我們?cè)谝纛l采樣過(guò)程中常用的位寬是8bit或者16bit。
-
聲道數(shù)(channels):由于音頻的采集和播放是可以疊加的,因此,可以同時(shí)從多個(gè)音頻源采集聲音,并分別輸出到不同的揚(yáng)聲器,故聲道數(shù)一般表示聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。聲道數(shù)為1和2分別稱(chēng)為單聲道和雙聲道,是比較常見(jiàn)的聲道參數(shù)。
-
音頻幀(frame):音頻跟視頻很不一樣,視頻每一幀就是一張圖像,而從上面的正玄波可以看出,音頻數(shù)據(jù)是流式的,本身沒(méi)有明確的一幀幀的概念,在實(shí)際的應(yīng)用中,為了音頻算法處理/傳輸?shù)姆奖?#xff0c;一般約定俗成取2.5ms~60ms為單位的數(shù)據(jù)量為一幀音頻。這個(gè)時(shí)間被稱(chēng)之為“采樣時(shí)間”,其長(zhǎng)度沒(méi)有特別的標(biāo)準(zhǔn),它是根據(jù)編解碼器和具體應(yīng)用的需求來(lái)決定的。
根據(jù)以上定義,我們可以計(jì)算一下一幀音頻幀的大小。假設(shè)某音頻信號(hào)是采樣率為8kHz、雙通道、位寬為16bit,20ms一幀,則一幀音頻數(shù)據(jù)的大小為:
size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte2.圖像采集
圖像采集的圖片結(jié)果組合成一組連續(xù)播放的動(dòng)畫(huà),即構(gòu)成視頻中可肉眼觀看的內(nèi)容。圖像的采集過(guò)程主要由攝像頭等設(shè)備拍攝成YUV編碼的原始數(shù)據(jù),然后經(jīng)過(guò)編碼壓縮成H.264等格式的數(shù)據(jù)分發(fā)出去。常見(jiàn)的視頻封裝格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB和WebM等。
圖像由于其直觀感受最強(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°視頻,可能需要通過(guò)不同角度拍攝,然后經(jīng)過(guò)多通道傳輸后合成。
-
分辨率:隨著設(shè)備屏幕尺寸的日益增多,視頻采集過(guò)程中原始視頻分辨率起著越來(lái)越重要的作用,后續(xù)處理環(huán)節(jié)中使用的所有視頻分辨率的定義都以原始視頻分辨率為基礎(chǔ)。視頻采集卡能支持的最大點(diǎn)陣反映了其分辨率的性能。
-
采樣頻率:采樣頻率反映了采集卡處理圖像的速度和能力。在進(jìn)行高度圖像采集時(shí),需要注意采集卡的采樣頻率是否滿(mǎn)足要求。采樣率越高,圖像質(zhì)量越高,同時(shí)保存這些圖像信息的數(shù)據(jù)量也越大。
以上,構(gòu)成了一個(gè)視頻采集的主要技術(shù)參數(shù),以及視頻中音頻和圖像編碼的常用格式。而對(duì)于直播App開(kāi)發(fā)者來(lái)說(shuō),了解這些細(xì)節(jié)雖然更有幫助,但實(shí)際開(kāi)發(fā)過(guò)程中可能很少能夠關(guān)注采集環(huán)節(jié)中技術(shù)參數(shù)的控制,而是直接在SDK中將采集后的數(shù)據(jù)傳遞給下一個(gè)「處理」和「編碼」環(huán)節(jié)。
采集源
1.攝像頭采集
對(duì)于視頻內(nèi)容的采集,目前攝像頭采集是社交直播中最常見(jiàn)的采集方式,比如主播使用手機(jī)的前置和后置攝像頭拍攝。在現(xiàn)場(chǎng)直播場(chǎng)景中,也有專(zhuān)業(yè)的攝影、攝像設(shè)備用來(lái)采集。安防監(jiān)控場(chǎng)景中也有專(zhuān)業(yè)的攝像頭進(jìn)行監(jiān)控采集。
目前七牛提供的SDK對(duì)以上兩類(lèi)攝像頭的采集都支持,對(duì)于手機(jī),iOS和Android分別支持前置后置攝像頭的采集,只是iOS由于設(shè)備種類(lèi)和系統(tǒng)版本不多,因此采集模塊兼容性較好;而Android需要適配的硬件設(shè)備和系統(tǒng)則非常多,目前支持Android 4.0.3及以上的攝像頭采集。對(duì)于專(zhuān)業(yè)攝像機(jī)或者攝像頭,七牛云提供了兼容適合嵌入式系統(tǒng)的C語(yǔ)言采集模塊的實(shí)現(xiàn),歡迎參考使用:https://github.com/pili-engineering/ipcam_sdk
2.屏幕錄制
屏幕錄制采集的方式在游戲直播場(chǎng)景中非常常見(jiàn),目前我們?cè)贏ndroid SDK中實(shí)現(xiàn)了屏幕錄制的功能。而iOS則由于系統(tǒng)本身沒(méi)有開(kāi)放屏幕錄制的權(quán)限而沒(méi)法直接操作,但對(duì)于iOS 9以上的版本,是有個(gè)取巧的辦法,可以通過(guò)模擬一個(gè)AirPlay鏡像連接到(當(dāng)前App)自身,這樣就可以在軟件上捕獲到屏幕上的任何操作,達(dá)到錄制屏幕的效果。
在教育直播或者會(huì)場(chǎng)演講場(chǎng)合,我們經(jīng)常看見(jiàn)需要錄制電腦桌面上PPT的場(chǎng)景,針對(duì)這種場(chǎng)景,目前市面上比較方便的方案是使用開(kāi)源的桌面推流工具OBS來(lái)進(jìn)行屏幕錄制和推流:https://obsproject.com/
3.從視頻文件推流
除了從硬件設(shè)備采集視頻進(jìn)行推流之外,我們也可能需要將一個(gè)視頻或者音頻文件以直播流的形式實(shí)時(shí)傳輸給觀眾,比如在線電臺(tái)或者電視節(jié)目,它們的輸入可能直接來(lái)自于一些已經(jīng)錄制剪輯好的視頻內(nèi)容。
開(kāi)放式設(shè)計(jì)
以上從采集內(nèi)容和采集源兩個(gè)維度分別介紹了視頻采集相關(guān)的知識(shí),但對(duì)于采集源來(lái)說(shuō),市場(chǎng)上可見(jiàn)的采集源遠(yuǎn)遠(yuǎn)不止這三種,即便是攝像頭也有很多分類(lèi)。對(duì)于一個(gè)完整的覆蓋推流、傳輸和播放三個(gè)環(huán)節(jié)的直播云服務(wù)來(lái)說(shuō),支持盡可能多的采集源和播放終端是一項(xiàng)既無(wú)法規(guī)避也很難完成的工作。
為了支持市場(chǎng)上所有采集源的接入,我們?cè)赟DK中采用了開(kāi)放式的設(shè)計(jì),只要采集源實(shí)現(xiàn)方遵循相應(yīng)的接口,即可支持任意的采集源。
圖中我們把采集的內(nèi)容分為圖像和音頻,其中圖像的采集源包含攝像頭、屏幕錄制或者本地的視頻文件,甚至是其它需要重新定義和實(shí)現(xiàn)的采集源。而音頻的采集源包含麥克風(fēng)、系統(tǒng)聲音或者本地音頻文件,當(dāng)然也可以為它定義別的輸入源。
這樣設(shè)計(jì)最大的好處在于,可以以輕量的設(shè)計(jì)方式支持豐富的采集源,而采集源的具體實(shí)現(xiàn)也可以交給使用者。
在下一篇連載中,我們將詳細(xì)介紹下直播中的處理環(huán)節(jié),解答如何滿(mǎn)足市場(chǎng)上主播的各種需求如美顏、水印、連麥互動(dòng)等。敬請(qǐng)期待!
總結(jié)
以上是生活随笔為你收集整理的视频直播技术详解(1)采集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 车道检测数据集
- 下一篇: 视频直播技术详解(3)编码和封装