文档章节

视频直播技术——采集

Elvis_cv
 Elvis_cv
发布于 2017/05/05 17:44
字数 2307
阅读 16
收藏 0
点赞 0
评论 0

图片描述

采集是整个视频推流过程中的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节。视频的采集涉及两方面数据的采集:音频采集和图像采集,它们分别对应两种完全不同的输入源和数据格式。

采集内容

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中采用了开放式的设计,只要采集源实现方遵循相应的接口,即可支持任意的采集源。

图片描述

图中我们把采集的内容分为图像和音频,其中图像的采集源包含摄像头、屏幕录制或者本地的视频文件,甚至是其它需要重新定义和实现的采集源。而音频的采集源包含麦克风、系统声音或者本地音频文件,当然也可以为它定义别的输入源。

这样设计最大的好处在于,可以以轻量的设计方式支持丰富的采集源,而采集源的具体实现也可以交给使用者。

© 著作权归作者所有

共有 人打赏支持
Elvis_cv
粉丝 0
博文 17
码字总数 46878
作品 0
广州
QA/测试工程师
Android视频直播的实现(推流完整实现001)

http://blog.csdn.net/huaxun66/article/details/53427771 http://blog.csdn.net/huaxun66/article/details/53427771 最近一段时间,视频直播可谓大火。在视频直播领域,有不同的商家提供各种...

stn_lcd
2017/02/20
0
0
新技术get|直播 × 小程序 / VR 到底如何实现?

从 2011 年 9158 和 YY 由秀场模式起步做互联网直播业,到去年斗鱼宣布成为首家获得 D 轮融资的直播平台,并宣告业内首先实现盈利,整个互联网直播业已经七年多了。 在日益成熟的直播市场中,...

OSC源创君
04/18
0
3
直播,音视频编码器和解码器(EasyDarwin)-Android

使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。 TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进...

shareus
05/18
0
0
北京云栖大会多媒体专场:新视界 新智能

12月19日-20日,全球云计算TOP级峰会云栖大会的年度压轴大戏——北京峰会在国家会议中心成功举办,本次峰会内容将涵盖云计算、大数据和人工智能等,30多场主题专场,深度解读各垂直行业、业务...

樰篱
2017/12/21
0
0
高级算法专家储开颜:无端不视频 阿里视频云三大端上技术能力

近日,阿里云高级算法专家储开颜在云栖大会北京峰会上进行了《视不可挡,无端不视频》的主题演讲,介绍了当今视频行业的发展情况,并对阿里视频云三大端上的技术能力做了详细解读。 视不可挡...

樰篱
2017/12/27
0
0
来看看最近火爆的在线推币机和在线娃娃机

前端: 成熟的APP+SDK+H5 方案,可定制二次开发 硬件:推流方案+硬件主板方案+摄像头 线下:娃娃机 推币机租赁+娃娃礼品仓储物流 手机网络推币机特点: 1、操作简单:操作和线下相比简单一线...

hsuan889
05/08
0
0
来看看最近火爆的在线推币机 在线娃娃机

前端: 成熟的APP+SDK+H5 方案,可定制二次开发 硬件:推流方案+硬件主板方案+摄像头 线下:娃娃机 推币机租赁+娃娃礼品仓储物流 手机网络推币机特点: 1、操作简单:操作和线下相比简单一线...

hsuan889
05/08
0
0
播放器/短视频 SDK 架构设计

短视频 SDK 架构设计实践- http://blog.csdn.net/dev_csdn/article/details/78683826 短视频开发需要的预备知识及难点:贴纸,特效/美颜/混音/内置滤镜等SO,不使用 ffmpeg 的软解软编,而是...

shareus
2017/12/01
0
0
阿里云MaxCompute技术共享计划 首波技术公开课干货集锦

今夏伊始,阿里云大数据计算服务MaxCompute,为将计算红利惠及更多企业和更多开发者,隆重开启技术共享计划。 为让更多开发者能够高效、便捷、循序渐进的了解大数据、了解MaxCompute以及阿里...

迷你芊宝宝
06/26
0
0
微信团队分享:微信每日亿次实时音视频聊天背后的技术解密

本文内容整理自腾讯专家研究员 & 微信视频技术负责人谷沉沉在 2017 ArchSummit 全球架构师峰会上的技术分享。 1、前言 2012 年 7 月,微信 4.2 版本首次加入了实时音视频聊天功能,如今已发展...

JackJiang2011
01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python -re模块及正则表达式解析

传送门: https://blog.csdn.net/pipisorry/article/details/25909899 ps:上面文章中"命名分组"的语法格式不能执行。正确的如下: (?P<name>正则表达式) #name是一个合法的标识符 除了使用别名...

一口今心
9分钟前
0
0
mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
18分钟前
0
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
18分钟前
8
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
28分钟前
1
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
30分钟前
0
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
33分钟前
0
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
35分钟前
0
0
javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
39分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
43分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部