北京(jing)2016年8月25日電(dian) /美通社(she)/ -- 隨著互聯網用戶消費內容和(he)(he)交(jiao)互方式(shi)的(de)(de)(de)升級,支撐這些內容和(he)(he)交(jiao)互方式(shi)的(de)(de)(de)基礎(chu)設施也正在悄(qiao)悄(qiao)發(fa)生變(bian)革(ge)。手(shou)機設備拍攝視頻能力和(he)(he)網絡(luo)的(de)(de)(de)升級催生了大家對視頻直播領(ling)域(yu)的(de)(de)(de)關(guan)注,吸引了很多互聯網創業者或(huo)者成熟企業進入該(gai)領(ling)域(yu)。
七牛(niu)云作為一家以(yi)基礎服務能力見長的(de)云計算公司,于(yu)6月底發(fa)布了一個針對(dui)視(shi)頻直播(bo)的(de)實時流網絡 LiveNet 和(he)完整的(de)直播(bo)云解(jie)(jie)決方案,很多開發(fa)者對(dui)這(zhe)個網絡和(he)解(jie)(jie)決方案的(de)細節和(he)使用場景非常感興趣。本篇我(wo)們(men)將(jiang)重(zhong)點對(dui)直播(bo)技術中的(de)采集環節做詳解(jie)(jie)。
采(cai)(cai)集(ji)是整個視(shi)頻(pin)推流過程中(zhong)的(de)(de)第一個環節,它從系(xi)統的(de)(de)采(cai)(cai)集(ji)設備中(zhong)獲取(qu)原始視(shi)頻(pin)數據,將其(qi)輸出到下一個環節。視(shi)頻(pin)的(de)(de)采(cai)(cai)集(ji)涉及兩(liang)方(fang)面(mian)數據的(de)(de)采(cai)(cai)集(ji):音頻(pin)采(cai)(cai)集(ji)和(he)圖像采(cai)(cai)集(ji),它們分別對應兩(liang)種完全不同的(de)(de)輸入源和(he)數據格式(shi)。
采集內容
1.音頻采集
音頻(pin)(pin)數(shu)(shu)據(ju)(ju)(ju)既能(neng)與圖像(xiang)結合組合成(cheng)視頻(pin)(pin)數(shu)(shu)據(ju)(ju)(ju),也能(neng)以(yi)純(chun)音頻(pin)(pin)的(de)(de)方式(shi)采(cai)集播放,后者在(zai)很多成(cheng)熟的(de)(de)應(ying)用場景如(ru)在(zai)線電臺和語音電臺等(deng)起著(zhu)非常重(zhong)要的(de)(de)作用。音頻(pin)(pin)的(de)(de)采(cai)集過(guo)程主要通(tong)過(guo)設備將環境中的(de)(de)模擬信號采(cai)集成(cheng) PCM 編碼的(de)(de)原(yuan)始數(shu)(shu)據(ju)(ju)(ju),然后編碼壓縮(suo)成(cheng) MP3 等(deng)格式(shi)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)分(fen)發出去。常見的(de)(de)音頻(pin)(pin)壓縮(suo)格式(shi)有:MP3,AAC,OGG,WMA,Opus,FLAC,APE,m4a 和 AMR 等(deng)。
音頻采集和編碼主要面臨的挑戰在于:延時敏感、卡頓敏感、噪聲消除 (Denoise)、回聲消除 (AEC)、靜音檢測 (VAD)和各種混音算法等。
在音頻采(cai)集(ji)階段,參考的主要(yao)技術參數有 :
采樣率 (samplerate):采樣就是把模(mo)擬(ni)信號數(shu)(shu)字化的過程(cheng),采樣頻(pin)率(lv)越高,記(ji)錄這一(yi)段(duan)音頻(pin)信號所用的數(shu)(shu)據量(liang)就越大,同時音頻(pin)質量(liang)也(ye)就越高。
位寬:每一個采樣點都需要用一個數值來表示大小,這個數值的數據類型大小可以是:4bit、8bit、16bit、32bit 等等,位數越多,表示得就越精細,聲音質量自然就越好,而數據量也會成倍增大。七(qi)牛云(yun)在音頻采樣過(guo)程中常(chang)用的位寬是8bit 或者16bit。
聲道數 (channels):由于音(yin)頻的(de)采(cai)集和播放是可(ke)(ke)以疊(die)加的(de),因此(ci),可(ke)(ke)以同(tong)時(shi)從(cong)多(duo)個音(yin)頻源(yuan)采(cai)集聲(sheng)音(yin),并分別輸(shu)出到不同(tong)的(de)揚聲(sheng)器(qi),故(gu)聲(sheng)道(dao)(dao)數(shu)一般表示(shi)聲(sheng)音(yin)錄制時(shi)的(de)音(yin)源(yuan)數(shu)量或回放時(shi)相(xiang)應的(de)揚聲(sheng)器(qi)數(shu)量。聲(sheng)道(dao)(dao)數(shu)為 1 和 2 分別稱(cheng)為單聲(sheng)道(dao)(dao)和雙聲(sheng)道(dao)(dao),是比較常見的(de)聲(sheng)道(dao)(dao)參(can)數(shu)。
音頻幀 (frame):音(yin)頻(pin)跟視頻(pin)很不一(yi)樣,視頻(pin)每一(yi)幀(zhen)(zhen)就是一(yi)張圖(tu)像(xiang),而從上(shang)面的(de)(de)(de)(de)正(zheng)玄波可以看(kan)出,音(yin)頻(pin)數據(ju)是流(liu)式的(de)(de)(de)(de),本身(shen)沒有明確的(de)(de)(de)(de)一(yi)幀(zhen)(zhen)幀(zhen)(zhen)的(de)(de)(de)(de)概念(nian),在實(shi)際(ji)的(de)(de)(de)(de)應用中,為了音(yin)頻(pin)算法處理/傳輸的(de)(de)(de)(de)方便(bian),一(yi)般(ban)約定(ding)俗成取2.5ms~60ms為單(dan)位的(de)(de)(de)(de)數據(ju)量(liang)為一(yi)幀(zhen)(zhen)音(yin)頻(pin)。這個時(shi)間(jian)被稱之為“采樣時(shi)間(jian)”,其長(chang)度(du)沒有特(te)別的(de)(de)(de)(de)標準,它(ta)是根(gen)據(ju)編解(jie)碼(ma)器和具體(ti)應用的(de)(de)(de)(de)需求來決定(ding)的(de)(de)(de)(de)。
根據以上定義,可(ke)以(yi)計算一(yi)下一(yi)幀音(yin)頻(pin)(pin)幀的大(da)小。假設某音(yin)頻(pin)(pin)信號是采樣率為 8kHz、雙(shuang)通道、位寬(kuan)為 16bit,20ms 一(yi)幀,則一(yi)幀音(yin)頻(pin)(pin)數(shu)據的大(da)小為:
size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte
2.圖像采集
圖(tu)(tu)像采集的(de)(de)圖(tu)(tu)片(pian)結果(guo)組(zu)合成(cheng)(cheng)一組(zu)連續播(bo)放的(de)(de)動畫,即構成(cheng)(cheng)視頻(pin)中可肉眼(yan)觀看(kan)的(de)(de)內容(rong)。圖(tu)(tu)像的(de)(de)采集過(guo)程主要由攝像頭等設(she)備拍攝成(cheng)(cheng) YUV 編碼(ma)的(de)(de)原始數據(ju),然后經(jing)過(guo)編碼(ma)壓縮成(cheng)(cheng) H.264 等格式的(de)(de)數據(ju)分發出去(qu)。常見的(de)(de)視頻(pin)封裝格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。
圖像由(you)于其(qi)直觀感(gan)受較強并且體積也比較大,構成了一個視頻(pin)內(nei)容的主要部分(fen)。圖像采集和(he)編碼面臨的主要挑戰在(zai)于:設備兼容性差、延時(shi)敏(min)感(gan)、卡頓敏(min)感(gan)以(yi)及(ji)各種對圖像的處(chu)理操(cao)作如美顏和(he)水(shui)印等。
在(zai)圖像采集階段,參(can)考的主要技術參(can)數(shu)有:
圖像傳輸格式:通用影像傳輸格式 (Common Intermediate Format) 是視訊會議 (video conference) 中常使(shi)用(yong)的影(ying)像傳輸格式。
圖像格(ge)式(shi):通(tong)常采(cai)用 YUV 格(ge)式(shi)存儲(chu)原始(shi)數據信息,其中(zhong)包含(han)用 8 位表示(shi)的黑白圖像灰度值,以及可(ke)由 RGB 三種色(se)彩組合成的彩色(se)圖像。
傳(chuan)(chuan)輸(shu)通(tong)道(dao):正(zheng)常情況下視(shi)頻的拍攝(she)只需1路通(tong)道(dao),隨著VR和AR 技術的日漸成(cheng)熟(shu),為(wei)了拍攝(she)一個完整的 360° 視(shi)頻,可(ke)能需要通(tong)過不同角度拍攝(she),然后經過多通(tong)道(dao)傳(chuan)(chuan)輸(shu)后合成(cheng)。
分(fen)辨率(lv):隨著設(she)備(bei)屏幕尺寸的(de)日益(yi)增多,視頻采集(ji)過程中原(yuan)始(shi)視頻分(fen)辨率(lv)起著越來越重(zhong)要的(de)作用,后續處理環節中使用的(de)所有視頻分(fen)辨率(lv)的(de)定(ding)義都(dou)以(yi)原(yuan)始(shi)視頻分(fen)辨率(lv)為基礎。視頻采集(ji)卡(ka)能支持的(de)較(jiao)大(da)點陣(zhen)反映了其分(fen)辨率(lv)的(de)性(xing)能。
采(cai)(cai)樣頻率(lv)(lv):采(cai)(cai)樣頻率(lv)(lv)反(fan)映了采(cai)(cai)集卡處理圖像的速度(du)和能力(li)。在(zai)進行高(gao)度(du)圖像采(cai)(cai)集時,需要(yao)注意(yi)采(cai)(cai)集卡的采(cai)(cai)樣頻率(lv)(lv)是否滿足要(yao)求。采(cai)(cai)樣率(lv)(lv)越(yue)高(gao),圖像質量(liang)越(yue)高(gao),同時保(bao)存這(zhe)些(xie)圖像信息的數據量(liang)也(ye)越(yue)大。
以上(shang),構成(cheng)了一個視頻采集(ji)的主要技術(shu)參(can)數,以及視頻中音(yin)頻和圖像編(bian)碼的常用(yong)格式。而對于直播 App 開發者來說(shuo),了解這些細節雖然更有(you)幫助,但(dan)實際開發過程中可能很(hen)少能夠關注采集(ji)環節中技術(shu)參(can)數的控(kong)制,而是直接在 SDK 中將采集(ji)后的數據傳(chuan)遞(di)給下(xia)一個「處(chu)理(li)」和「編(bian)碼」環節。
采集源
1.攝像頭采集
對于視頻(pin)內(nei)容的(de)(de)采(cai)集,目前攝(she)(she)像(xiang)頭采(cai)集是社交直播(bo)中(zhong)最常見(jian)的(de)(de)采(cai)集方式,比如主播(bo)使用手機的(de)(de)前置和后(hou)置攝(she)(she)像(xiang)頭拍攝(she)(she)。在現場直播(bo)場景中(zhong),也(ye)有(you)專業的(de)(de)攝(she)(she)影、攝(she)(she)像(xiang)設備用來采(cai)集。安防監控場景中(zhong)也(ye)有(you)專業的(de)(de)攝(she)(she)像(xiang)頭進行監控采(cai)集。
目前七(qi)牛提(ti)供(gong)的SDK對以(yi)上兩(liang)類(lei)(lei)攝(she)像(xiang)頭(tou)的采集都(dou)支(zhi)持,對于手機(ji),iOS 和(he)Android分別支(zhi)持前置后置攝(she)像(xiang)頭(tou)的采集,只是 iOS 由于設備(bei)種類(lei)(lei)和(he)系(xi)統版本不多(duo),因此采集模塊兼容性(xing)較好;而 Android 需要適(shi)配(pei)的硬件設備(bei)和(he)系(xi)統則(ze)非(fei)常(chang)多(duo),目前支(zhi)持 Android 4.0.3 及以(yi)上的攝(she)像(xiang)頭(tou)采集。對于專(zhuan)業攝(she)像(xiang)機(ji)或者(zhe)攝(she)像(xiang)頭(tou),七(qi)牛云提(ti)供(gong)了兼容適(shi)合嵌入式系(xi)統的 C 語言采集模塊的實(shi)現(xian),歡迎(ying)參考使(shi)用:
2.屏幕錄制
屏幕錄制采集的方式在游戲直播場景中非常常見,目前在 Android SDK 中實現(xian)了屏(ping)幕錄制(zhi)的功能(neng)。而(er) iOS 則由于(yu)系統本身沒有開(kai)放屏(ping)幕錄制(zhi)的權限(xian)而(er)沒法(fa)直接(jie)操作,但對(dui)于(yu) iOS 9 以上(shang)的版(ban)本,是有個取(qu)巧(qiao)的辦法(fa),可以通過(guo)模(mo)擬(ni)一個 AirPlay 鏡(jing)像(xiang)連接(jie)到(當前(qian) App)自(zi)身,這樣就(jiu)可以在軟件(jian)上(shang)捕獲到屏(ping)幕上(shang)的任何操作,達到錄制(zhi)屏(ping)幕的效果。
在教育直播或者會場演講場合,經常看見需(xu)要錄制電腦(nao)桌面(mian)上 PPT 的(de)場(chang)景,針對這種(zhong)場(chang)景,目前市面(mian)上比較方便的(de)方案(an)是使用(yong)開(kai)源的(de)桌面(mian)推(tui)流(liu)工具 OBS 來進(jin)行(xing)屏幕錄制和推(tui)流(liu):
3.從視頻文件推流
除了從硬件設備采集視頻進行推流之外,也可能需要將(jiang)一個視(shi)(shi)頻或者音頻文(wen)件以直播流的形式實時傳(chuan)輸(shu)給觀眾,比如在線電臺或者電視(shi)(shi)節(jie)目,它(ta)們的輸(shu)入可能直接(jie)來(lai)自于一些已經錄制剪(jian)輯好的視(shi)(shi)頻內容。
開放式設計
以上從(cong)采(cai)集內容和采(cai)集源(yuan)(yuan)兩個(ge)維(wei)度分(fen)別介(jie)紹了視頻(pin)采(cai)集相關的(de)知識,但對于采(cai)集源(yuan)(yuan)來(lai)說,市場(chang)上可見的(de)采(cai)集源(yuan)(yuan)遠(yuan)遠(yuan)不止這(zhe)三種,即便是(shi)攝像頭也有很多分(fen)類。對于一(yi)個(ge)完整的(de)覆蓋推流、傳輸(shu)和播放三個(ge)環節的(de)直播云服(fu)務來(lai)說,支持盡(jin)可能多的(de)采(cai)集源(yuan)(yuan)和播放終端是(shi)一(yi)項(xiang)既無(wu)法規避也很難完成的(de)工作。
為了支持市場上所有采集源的接入,七牛(niu)云在 SDK 中采用(yong)了(le)開放式的設計,只(zhi)要采集(ji)源實現方(fang)遵循相應的接口,即可(ke)支持任意(yi)的采集(ji)源。
圖中把采集(ji)的內容分為圖(tu)像和音頻,其中(zhong)圖(tu)像的采集(ji)源包含攝像頭、屏幕錄制或(huo)(huo)者(zhe)本(ben)(ben)地(di)的視頻文(wen)件(jian),甚(shen)至(zhi)是其它需要(yao)重新定義(yi)和實現的采集(ji)源。而音頻的采集(ji)源包含麥克風、系統聲音或(huo)(huo)者(zhe)本(ben)(ben)地(di)音頻文(wen)件(jian),當然(ran)也可以為它定義(yi)別(bie)的輸(shu)入源。
這(zhe)樣設(she)計較大的好處在于,可以以輕(qing)量的設(she)計方式(shi)支持豐(feng)富的采(cai)集源,而采(cai)集源的具體實現也可以交(jiao)給使用者(zhe)。
為(wei)了(le)讓(rang)大家能夠將技(ji)術理論快速應用(yong)到實踐開發中,七牛云聯合慕(mu)課(ke)網特別制作(zuo)了(le)一期(qi)課(ke)程,專門針對移動直播應用(yong)開發,供大家學(xue)習參考: