視頻通信基礎知識之采集

在之前的文章里,我們說了不少關于音視頻相關的內容,但是一直沒有系統的來介紹視頻通信,接下來我們將出一個系列關于視頻通信的文章。幫助大家對視頻通信有一個更全面的認識。系列文大綱如下:

視頻通信采集
視頻通信處理
視頻通信編碼與封裝
視頻通信的傳輸與推流

今天給大家帶來是我們系列文章的第一篇《視頻通信采集》

視頻通信采集是視頻通信的第一步,采集主要包括兩個方面:視頻采集和音頻采集。

視頻主要是通過攝像頭進行采集,這里面涉及到攝像頭的相關操作以及攝像頭的參數設置,由于各個廠商的攝像頭存在差異,因此這方面也會有一些差異。音頻則通過麥克風進行采集,不同產品的麥克風對音頻采樣率的支持不同。

音視頻通信采集技術要點

  • 圖像采集技術要點:

攝像頭、圖像比例、兼容性等問題

  • 音頻采集技術要點:

麥克風、音頻采樣率、回聲消除處理、緩沖區大小等問題

在iOS開發中,對音視頻的采集都可以用<AVFoundation>框架。而Android開發主要是基于其C/S層架構,客戶端提供調用接口,而實現工作則是在服務端完成。

圖像采集

采集內容

視頻中我們看到的內容是由圖片一張張組合連續播放而成。圖像的采集過程主要由攝像頭等設備拍攝成 YUV 的原始數據,然后經過編碼器壓縮成數據分發出去。

圖像是一個視頻內容的主要部分。圖像采集時主要涉及到下面的參數:

圖像格式:通常采用 YUV 格式存儲原始數據信息,其中包含用 8 位黑白表示的灰度圖,以及由 RGB 組合成的彩色圖。

傳輸通道:正常情況下視頻的拍攝只需 1 路通道,隨著 3D、VR等技術的日漸成熟,為了拍攝一個360° 的視頻,需要進行不同角度的拍攝,然后經過多通道傳輸后合成。

分辨率:現在的設備屏幕尺寸的日益增多增大,視頻采集過程中原始視頻分辨率就起著越來越重要的作用,因為后續處理環節中使用的所有視頻分辨率的定義都以原始視頻分辨率為基礎。

采樣頻率:采樣頻率反映了采集卡處理圖像的速度和能力。在進行高度圖像采集時,需要注意采集卡的采樣頻率是否滿足要求。采樣率越高,圖像質量越高,同時保存這些圖像信息的數據量也越大。

以上,構成了一個視頻采集的主要技術參數,而對于視頻通信開發者來說,在了解這些細節后,有利于在實際開發中對采集環節中技術參數的控制,減少后續編碼環節的壓力。

采集源

圖像的采集源有攝像頭、屏幕錄制等,視頻通信的采集源主要是攝像頭,通過攝像頭獲取圖像信息。這里簡單說一下Android和iOS。

Android中很多基本的架構都是C/S層架構。Android Camera的架構也是C/S架構,service端為Client進程提供豐富的接口,使它能輕松獲得Camera數據的地址,然后處理這些數據。但是在Android中調用攝像頭需要相應的權限,而且權限申請在Android 6.0后變成了動態申請。

而iOS端視頻采集,相比安卓更加便利,使用AVFoundation框架提供的一系列的API即可實現。

音頻采集

在說音頻采集內容之前,先了解一些音頻基礎知識:

PCM:脈沖編碼調制,一種將聲音數字化的方法。

采樣精度(bit pre sample):每個聲音樣本的采樣位數。

聲道(channel):相互獨立的音頻信號數,單聲道(mono)立體聲(Stereo)

語音幀(frame):在音頻數據中,幀(frame)是所有通道的一個樣本。

采樣頻率(sample rate):每秒鐘采集多少個聲音樣本

采集內容

聲音在經過麥克風后,會轉換成一連串電壓變化的信號。要將這樣的電壓變化的信號轉化成為PCM信號則需要進行三個過程:抽樣、量化、編碼。要實現這三個過程,則需要使用三個參數,它們是:

采樣頻率、采樣位數和聲道數

  • 采樣頻率

采樣頻率即每秒鐘取得聲音樣本的次數。采樣頻率越高,聲音的質量也就越好,聲音的還原度越高,但同時它占的資源比越多。由于人耳的對聲音的頻率分辨有限,太高或太低的頻率并不能分辨出來。在16位聲卡中有22KHz、44KHz等幾級,目前的常用采樣頻率不超過48KHz。

  • 采樣位數

采樣位數(采樣值)即將采樣樣本幅度量化。它是用來衡量聲音波動變化的一個參數。它的數值越大,分辨率也就越高,所發出聲音的強度越強。

在計算機中采樣位數一般有8位和16位之分,8位不是說把縱坐標分成8份,而是分成2的8次方即256份; 同理16位是把縱坐標分成2的16次方65536份。采樣位數的值越大,其記錄的波形就越接近原始信號。

  • 聲道數

聲道主要有單聲道和立體聲之分,單聲道的聲音只能使用一個喇叭發聲(有的也處理成兩個喇叭輸出同一個聲道的聲音),立體聲的pcm可以使兩個喇叭都發聲(一般左右聲道有分工) ,更能感受到空間效果。

說完采樣頻率、采樣位數和聲道數,接下來我們看一下PCM文件所占容量公式:

PCM文件存儲量 = (采樣頻率·采樣位數·聲道數·時間)/8 (單位:字節數)

采集源

音頻源:音頻源相比視頻源來說,其采集源有限主要就是麥克風。安卓端音頻采集大都使用AudioRecord,iOS端則會使用蘋果自身的Audio Unit進行采樣。

緩沖區:說完音頻源接下來就說一下緩沖區。緩沖區是麥克風采集到的數據后放置的一個地方。數據庫在這里進行存放,再被讀取獲得錄制的音頻數據。這里會牽扯到緩沖區大小。緩沖區設置得大一些,可以增加系統的穩定性;而把緩沖區設置得小一寫,則會提升系統的響應時間,減少音頻延遲。


以上就是我們視頻通信采集的所有內容,下一篇我們將介紹視頻處理。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539432.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring MVC 流程圖

Spring工作流程描述1. 用戶向服務器發送請求&#xff0c;請求被Spring 前端控制Servelt DispatcherServlet捕獲&#xff1b;2. DispatcherServlet對請求URL進行解析&#xff0c;得到請求資源標識符&#xff08;URI&#xff09;。然后根據該URI&#xff0c;調用HandlerMapping獲…

kafka maven沒有下載_Kafka 系列(三)——Kafka 生產者詳解

首先介紹一下 Kafka 生產者發送消息的過程&#xff1a;Kafka 會將發送消息包裝為 ProducerRecord 對象&#xff0c; ProducerRecord 對象包含了目標主題和要發送的內容&#xff0c;同時還可以指定鍵和分區。在發送 ProducerRecord 對象前&#xff0c;生產者會先把鍵和值對象序列…

linux 硬盤繁忙,icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)

icinga2 借助check_iostat.sh抓取linux服務器的diskIO(硬盤繁忙度)下載地址&#xff1a;https://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/Check-Iostat-Updated/details對腳本進行修改(默認為$12&#xff0c;12為w_await值&#xff0c;14為%util值)UTI…

centos7安裝kubernetes1.9集群

節點規劃 本次選用一個master節點&#xff0c;三個node節點來安裝k8s集群。   節點IPM010.xx.xx.xxN010.xx.xx.xxN110.xx.xx.xxN210.xx.xx.xx集群啟動前的準備(請用root用戶執行) 節點準備工作(在每臺機器上執行) 包括修改主機名&#xff0c;關閉防火墻等操作。  k8s集群會…

oracle中查詢某張表的大小

select sum(bytes)/1024/1024 "表大小(M)" from user_segments where segment_nametable_name;--注&#xff0c;僅表數據的大小&#xff0c;不含索引、分區、LOB類型 select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name having Segm…

python圖像分割算法_OpenCV-Python 圖像分割與Watershed算法 | 三十四

目標 在本章中&#xff0c; 我們將學習使用分水嶺算法實現基于標記的圖像分割 我們將看到&#xff1a;cv.watershed() 理論 任何灰度圖像都可以看作是一個地形表面&#xff0c;其中高強度表示山峰&#xff0c;低強度表示山谷。你開始用不同顏色的水(標簽)填充每個孤立的山谷(局…

linux dns 問題嗎,Linux下DNS的問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:36:22 BJ-linux kernel: end_request: I/O error, dev fd0, sector 0Nov 9 06:37:06 BJ-linux system-config-network[4031]: - //etc/…

NEO從源碼分析看共識協議

2019獨角獸企業重金招聘Python工程師標準>>> 0x00 概論 不同于比特幣使用的工作量證明&#xff08;PoW&#xff09;來實現共識&#xff0c;NEO提出了DBFT共識算法。DBFT改良自股權證明算法&#xff08;PoS&#xff09;&#xff0c;我沒有具體分析過PoS的源碼&#x…

oracle實現id自增和設置主鍵

1、關于主鍵&#xff1a;在建表時指定primary key字句即可&#xff1a; create table test( id number(6) primary key, name varchar2(30) ); 如果是對于已經建好的表&#xff0c;想增加主鍵約束&#xff0c;則類似語法&#xff1a; alter table test add constraint p…

python scrapy框架基如何實現多線程_Python實現在線程里運行scrapy的方法

本文實例講述了Python實現在線程里運行scrapy的方法。分享給大家供大家參考。具體如下&#xff1a; 如果你希望在一個寫好的程序里調用scrapy&#xff0c;就可以通過下面的代碼&#xff0c;讓scrapy運行在一個線程里。 """ Code to run Scrapy crawler in a thr…

怎樣在linux系統上安裝r,Linux系統之路——如何在CentOS7.2安裝R(示例代碼)

使用ubuntu的小伙伴們直接使用命令sudo apt-get installr-base-dev或者r-base搞定。然而對于使用centos的我卻一直卡在安裝這一步&#xff0c;十分的悲催&#xff0c;只有羨慕的份&#xff0c;但也不至于在linux上使用不上R。辦法還是有的&#xff0c;自己總結出兩種方法&#…

自定義實現棧的功能

棧的定義&#xff1a;棧是一個數據集合&#xff0c;我們可以吧它理解為是一個只能在一端進行插入或者刪除的列表。棧的特點&#xff1a;先進后出 Stack() 建立一個空的棧對象push() 吧一個元素添加到棧的最頂層pop() 刪除棧最頂層的元素&#xff0c;并返回這個元素gettop() 取棧…

mybatis循環map的一些技巧

<foreach>標簽的用法&#xff1a; 六個參數&#xff1a; collection&#xff1a;要循環的集合 index&#xff1a;循環索引&#xff08;不知道啥用。。&#xff09; item&#xff1a;集合中的一個元素&#xff08;item和collection&#xff0c;按foreach循環理解&#xff…

linux部署node web,nodejs怎么部署到Linux上?

nodejs怎么部署到Linux上&#xff1f;下面本篇文章就來給大家介紹一下在Linux上部署nodejs的方法&#xff0c;希望對大家有所幫助。nodejs部署到Linux上的方法如下&#xff1a;(建議先安裝xshell和xftp)1、到nodejs官網下載壓縮包(選擇合適自己系統的版本)&#xff0c;放到Linu…

python樹莓派 是什么_用樹莓派和Python給你的植物澆水

我想指出&#xff0c;我絕不是電子學專家。如果你讓我制作一個電路圖或者解釋某件電子產品工作原理的細節&#xff0c;我會一無所知。在生活中&#xff0c;我對電力的工作原理有了基本的了解&#xff0c;我只是胡亂擺弄了一下電子元件就完成了這個工程。話雖如此&#xff0c;當…

htmlspecialchars() 函數過濾XSS的問題

htmlspecialchars()函數的功能如下&#xff1a; htmlspecialchars() 函數把預定義的字符轉換為 HTML 實體。 預定義的字符是&#xff1a; & &#xff08;和號&#xff09;成為 &" &#xff08;雙引號&#xff09;成為 " &#xff08;單引號&#xff09;成為 …

c語言中 字母對應的數值,C語言編程:求下式中每個字母所代表的數字

編寫程序求解下式中各字母所代表的數字&#xff0c;不同的字母代表不同的數字。PEAR- ARA PEA*問題分析與算法設計類似的問題從計算機算法的角度來說是比較簡單的&#xff0c;可以采用最常見的窮舉方法解決。程序中采用循環窮舉每個字母所可能代表的數字&#xff0c;然后將字母…

用mac的python寫網絡爬蟲_在mac下使用python抓取數據

2015已經過去&#xff0c;這是2016的第一篇博文&#xff01; 祝大家新年快樂&#xff01; 但是我還有好多期末考試&#xff01; 還沒開始復習&#xff0c;唉&#xff0c;一把辛酸淚&#xff01; 最近看了一遍彥祖的文章叫做 所以自己也想小試牛刀.于是便開始動手寫,但初次接觸,…

運輸配送信息Delivery_Information

為什么80%的碼農都做不了架構師&#xff1f;>>> 運輸配送信息Delivery_Information 金銀倉會選用以下運輸公司&#xff0c;為客戶配送磁磚傢俬潔具&#xff1a; 佛山冠昌達中港運輸&#xff08;散貨或包車&#xff0c;近佛山石灣的磁磚倉庫&#xff0c;近樂從傢俬城…

linux的 dev vdal,RAZVOJ DELA NA DALJAVO V SLOVENIJI

摘要&#xff1a;V diplomskem delu bomo raziskovali razvoj dela na daljavo v Sloveniji. Na? poglavitni cilj je prikazati ?irjenje teledela v Sloveniji. Drugod po Evropi se ?e vrsto let uveljavlja tudi ta vrsta opravljanja dela, pri nas pa manj. O tem lah…