视频通信基础知识之采集

在之前的文章里,我们说了不少关于音视频相关的内容,但是一直没有系统的来介绍视频通信,接下来我们将出一个系列关于视频通信的文章。帮助大家对视频通信有一个更全面的认识。系列文大纲如下:

视频通信采集
视频通信处理
视频通信编码与封装
视频通信的传输与推流

今天给大家带来是我们系列文章的第一篇《视频通信采集》

视频通信采集是视频通信的第一步,采集主要包括两个方面:视频采集和音频采集。

视频主要是通过摄像头进行采集,这里面涉及到摄像头的相关操作以及摄像头的参数设置,由于各个厂商的摄像头存在差异,因此这方面也会有一些差异。音频则通过麦克风进行采集,不同产品的麦克风对音频采样率的支持不同。

音视频通信采集技术要点

  • 图像采集技术要点:

摄像头、图像比例、兼容性等问题

  • 音频采集技术要点:

麦克风、音频采样率、回声消除处理、缓冲区大小等问题

在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.mzph.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…