視訊直播技術詳解之採集

錢曙光發表於2016-08-30

宣告:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。
作者:七牛雲
責編:錢曙光,關注架構和演算法領域,尋求報導或者投稿請發郵件qianshg@csdn.net,另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,歡迎架構師加微信qshuguang2008申請入群,備註姓名+公司+職位。

隨著網際網路使用者消費內容和互動方式的升級,支撐這些內容和互動方式的基礎設施也正在悄悄發生變革。手機裝置拍攝視訊能力和網路的升級催生了大家對視訊直播領域的關注,吸引了很多網際網路創業者或者成熟企業進入該領域。

七牛雲於6月底釋出了一個針對視訊直播的實時流網路LiveNet和完整的直播雲解決方案,很多開發者對這個網路和解決方案的細節和使用場景非常感興趣。

結合該實時流網路LiveNet和直播雲解決方案的實踐,我們將用七篇文章,更系統化地介紹當下大熱的視訊直播各環節的關鍵技術,幫助視訊直播創業者們更全面、深入地瞭解視訊直播技術,更好地技術選型。

本系列文章大綱如下:

(一)採集
(二)處理
(三)編碼和封裝
(四)推流和傳輸
(五)現代播放器原理
(六)延遲優化
(七)SDK效能測試模型

圖片描述

本篇將重點聊聊:採集。

採集是整個視訊推流過程中的第一個環節,它從系統的採集裝置中獲取原始視訊資料,將其輸出到下一個環節。視訊的採集涉及兩方面資料的採集:音訊採集和影象採集,它們分別對應兩種完全不同的輸入源和資料格式。

採集內容

1.音訊採集

音訊資料既能與影象結合組合成視訊資料,也能以純音訊的方式採集播放,後者在很多成熟的應用場景如線上電臺和語音電臺等起著非常重要的作用。音訊的採集過程主要通過裝置將環境中的模擬訊號採整合PCM編碼的原始資料,然後編碼壓縮成MP3等格式的資料分發出去。常見的音訊壓縮格式有:MP3、AAC、OGG、WMA、Opus、FLAC、APE、m4a和AMR等。

音訊採集和編碼主要面臨的挑戰在於:延時敏感、卡頓敏感、噪聲消除(Denoise)、回聲消除(AEC)、靜音檢測(VAD)和各種混音演算法等。

在音訊採集階段,參考的主要技術引數有:

  • 取樣率(samplerate):取樣就是把模擬訊號數字化的過程,取樣頻率越高,記錄這一段音訊訊號所用的資料量就越大,同時音訊質量也就越高。

  • 位寬:每一個取樣點都需要用一個數值來表示大小,這個數值的資料型別大小可以是:4bit、8bit、16bit、32bit等,位數越多,表示得就越精細,聲音質量自然就越好,而資料量也會成倍增大。我們在音訊取樣過程中常用的位寬是8bit或者16bit。

  • 聲道數(channels):由於音訊的採集和播放是可以疊加的,因此,可以同時從多個音訊源採集聲音,並分別輸出到不同的揚聲器,故聲道數一般表示聲音錄製時的音源數量或回放時相應的揚聲器數量。聲道數為1和2分別稱為單聲道和雙聲道,是比較常見的聲道引數。

  • 音訊幀(frame):音訊跟視訊很不一樣,視訊每一幀就是一張影象,而從上面的正玄波可以看出,音訊資料是流式的,本身沒有明確的一幀幀的概念,在實際的應用中,為了音訊演算法處理/傳輸的方便,一般約定俗成取2.5ms~60ms為單位的資料量為一幀音訊。這個時間被稱之為“取樣時間”,其長度沒有特別的標準,它是根據編解碼器和具體應用的需求來決定的。

根據以上定義,我們可以計算一下一幀音訊幀的大小。假設某音訊訊號是取樣率為8kHz、雙通道、位寬為16bit,20ms一幀,則一幀音訊資料的大小為:

size = 8000 x 2 x 16bit x 0.02s = 5120 bit = 640 byte

2.影象採集

影象採集的圖片結果組合成一組連續播放的動畫,即構成視訊中可肉眼觀看的內容。影象的採集過程主要由攝像頭等裝置拍攝成YUV編碼的原始資料,然後經過編碼壓縮成H.264等格式的資料分發出去。常見的視訊封裝格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB和WebM等。

影象由於其直觀感受最強並且體積也比較大,構成了一個視訊內容的主要部分。影象採集和編碼面臨的主要挑戰在於:裝置相容性差、延時敏感、卡頓敏感以及各種對影象的處理操作如美顏和水印等。

在影象採集階段,參考的主要技術引數有:

  • 影象傳輸格式:通用影像傳輸格式(Common Intermediate Format)是視訊會議(video conference)中常使用的影像傳輸格式。

  • 影象格式:通常採用YUV格式儲存原始資料資訊,其中包含用8位表示的黑白影象灰度值,以及可由RGB三種色彩組合成的彩色影象。

  • 傳輸通道:正常情況下視訊的拍攝只需1路通道,隨著VR和AR技術的日漸成熟,為了拍攝一個完整的360°視訊,可能需要通過不同角度拍攝,然後經過多通道傳輸後合成。

  • 解析度:隨著裝置螢幕尺寸的日益增多,視訊採集過程中原始視訊解析度起著越來越重要的作用,後續處理環節中使用的所有視訊解析度的定義都以原始視訊解析度為基礎。視訊採集卡能支援的最大點陣反映了其解析度的效能。

  • 取樣頻率:取樣頻率反映了採集卡處理影象的速度和能力。在進行高度影象採集時,需要注意採集卡的取樣頻率是否滿足要求。取樣率越高,影象質量越高,同時儲存這些影象資訊的資料量也越大。

以上,構成了一個視訊採集的主要技術引數,以及視訊中音訊和影象編碼的常用格式。而對於直播App開發者來說,瞭解這些細節雖然更有幫助,但實際開發過程中可能很少能夠關注採集環節中技術引數的控制,而是直接在SDK中將採集後的資料傳遞給下一個「處理」和「編碼」環節。

採集源

1.攝像頭採集

對於視訊內容的採集,目前攝像頭採集是社交直播中最常見的採集方式,比如主播使用手機的前置和後置攝像頭拍攝。在現場直播場景中,也有專業的攝影、攝像裝置用來採集。安防監控場景中也有專業的攝像頭進行監控採集。

目前七牛提供的SDK對以上兩類攝像頭的採集都支援,對於手機,iOS和Android分別支援前置後置攝像頭的採集,只是iOS由於裝置種類和系統版本不多,因此採集模組相容性較好;而Android需要適配的硬體裝置和系統則非常多,目前支援Android 4.0.3及以上的攝像頭採集。對於專業攝像機或者攝像頭,七牛雲提供了相容適合嵌入式系統的C語言採集模組的實現,歡迎參考使用:https://github.com/pili-engineering/ipcam_sdk

2.螢幕錄製

螢幕錄製採集的方式在遊戲直播場景中非常常見,目前我們在Android SDK中實現了螢幕錄製的功能。而iOS則由於系統本身沒有開放螢幕錄製的許可權而沒法直接操作,但對於iOS 9以上的版本,是有個取巧的辦法,可以通過模擬一個AirPlay映象連線到(當前App)自身,這樣就可以在軟體上捕獲到螢幕上的任何操作,達到錄製螢幕的效果。

在教育直播或者會場演講場合,我們經常看見需要錄製電腦桌面上PPT的場景,針對這種場景,目前市面上比較方便的方案是使用開源的桌面推流工具OBS來進行螢幕錄製和推流:https://obsproject.com/

3.從視訊檔案推流

除了從硬體裝置採集視訊進行推流之外,我們也可能需要將一個視訊或者音訊檔案以直播流的形式實時傳輸給觀眾,比如線上電臺或者電視節目,它們的輸入可能直接來自於一些已經錄製剪輯好的視訊內容。

開放式設計

以上從採集內容和採集源兩個維度分別介紹了視訊採集相關的知識,但對於採集源來說,市場上可見的採集源遠遠不止這三種,即便是攝像頭也有很多分類。對於一個完整的覆蓋推流、傳輸和播放三個環節的直播雲服務來說,支援儘可能多的採集源和播放終端是一項既無法規避也很難完成的工作。

為了支援市場上所有采集源的接入,我們在SDK中採用了開放式的設計,只要採集源實現方遵循相應的介面,即可支援任意的採集源。

圖片描述

圖中我們把採集的內容分為影象和音訊,其中影象的採集源包含攝像頭、螢幕錄製或者本地的視訊檔案,甚至是其它需要重新定義和實現的採集源。而音訊的採集源包含麥克風、系統聲音或者本地音訊檔案,當然也可以為它定義別的輸入源。

這樣設計最大的好處在於,可以以輕量的設計方式支援豐富的採集源,而採集源的具體實現也可以交給使用者。

在下一篇連載中,我們將詳細介紹下直播中的處理環節,解答如何滿足市場上主播的各種需求如美顏、水印、連麥互動等。敬請期待!


2016年9月22日-23日,SDCC 2016大資料技術&架構實戰峰會將在杭州舉行,兩場峰會大牛講師來自阿里、京東、蘇寧、唯品會、美團點評、遊族、餓了麼、有贊、Echo等知名網際網路公司,共同探討海量資料下的應用監控系統建設、異常檢測的演算法和實現、大資料基礎架構實踐、敏捷型資料平臺的構建及應用、音訊分析的機器學習演算法應用,以及高可用/高併發/高效能系統架構設計、電商架構、分散式架構等話題與技術。
9月4日24點前仍處於最低六折優惠票價階段,單場峰會(含餐)門票只需499元,5人以上團購或者購買兩場峰會通票更有特惠,限時折扣,預購從速。(票務詳情連結)。

相關文章