视频直播技术详解(1)采集
聲明:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。
作者:七牛云
責編:錢曙光,關注架構和算法領域,尋求報道或者投稿請發郵件qianshg@csdn.net,另有「CSDN 高級架構師群」,內有諸多知名互聯網公司的大牛架構師,歡迎架構師加微信qshuguang2008申請入群,備注姓名+公司+職位。
from: http://geek.csdn.net/news/detail/98074
隨著互聯網用戶消費內容和交互方式的升級,支撐這些內容和交互方式的基礎設施也正在悄悄發生變革。手機設備拍攝視頻能力和網絡的升級催生了大家對視頻直播領域的關注,吸引了很多互聯網創業者或者成熟企業進入該領域。
七牛云于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 byte2.圖像采集
圖像采集的圖片結果組合成一組連續播放的動畫,即構成視頻中可肉眼觀看的內容。圖像的采集過程主要由攝像頭等設備拍攝成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中采用了開放式的設計,只要采集源實現方遵循相應的接口,即可支持任意的采集源。
圖中我們把采集的內容分為圖像和音頻,其中圖像的采集源包含攝像頭、屏幕錄制或者本地的視頻文件,甚至是其它需要重新定義和實現的采集源。而音頻的采集源包含麥克風、系統聲音或者本地音頻文件,當然也可以為它定義別的輸入源。
這樣設計最大的好處在于,可以以輕量的設計方式支持豐富的采集源,而采集源的具體實現也可以交給使用者。
在下一篇連載中,我們將詳細介紹下直播中的處理環節,解答如何滿足市場上主播的各種需求如美顏、水印、連麥互動等。敬請期待!
總結
以上是生活随笔為你收集整理的视频直播技术详解(1)采集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车道检测数据集
- 下一篇: 视频直播技术详解(3)编码和封装