现如今App中接入直播功能越来越普遍,接入直播可通过各大厂的云直播平台接入SDK来实现,但是,需要接入直播功能的朋友,做之前还是需要了解直播的过程及原理。
直播App架构图:
推流端过程:
1.音视频采集
2.美颜滤镜处理
3.编码压缩
4.推流
服务器端过程:
1.实时转码
2.录制回放
3.自动鉴黄
拉流端过程:
1.拉流
2.解码
3.播放
功能所需技术:
1. 音视频采集
音频的采集过程主要通过麦克风等设备将环境中的模拟信号采集成 PCM 编码的原始数据,经过降噪、混音等处理后编码压缩成 MP3 等格式的数据分发出去。常见的音频压缩格式有:MP3,AAC,OGG,WMA,FLAC,APE,m4a 和 AMR 等。
视频的采集过程主要由摄像头等设备拍摄成 YUV 编码的原始数据,然后经过编码压缩成 H.264 等格式的数据分发出去。常见的视频封装格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。
2. 美颜滤镜
美颜滤镜依靠开源库GPUImage实现。
GPUImage:基于OpenGL图像和视频处理的跨平台框架。GPUImageFilter提供了各种各样的滤镜。
滤镜处理的原理:把静态图像或者视频的每一帧进行图片处理,通过像素点坐标和RGB颜色值变化实现。
3.编码
通常采用H264编码。
特点:高压缩、高质量,支持多种网络流媒体传输。
编码依据:
在相邻几帧图像中,有差别的像素只有10%以内的点,亮度差变化不超过2%,色度差的变化只有1%以内。
过程:
先编码一个完整图像帧I,P帧不编码全部图像,只编入与I帧的差别,这样P帧既能保存自己的信息,又只要原大小的1/10以内,同理以后的编码,就将一段图像压缩了。这段图像称为一个序列,表示有相同特点的一段数据。
H264协议定义了三种帧:完整编码的帧为I帧;参考前面的帧只包含差异部分编码的帧为P帧;参考前后帧编码的帧叫B帧。H264核心算法是帧内压缩和帧间压缩。生成I帧的算法用的帧内压缩,生成B、P帧算法用的帧间压缩。
4. 推流、拉流
推流就是将编码后的数据通过直播协议发送给流媒体服务器的过程。主流的推拉流协议有httpflv、rtmp、hls。
httpflv:
这种直播传输实际上就是利用的flv文件的特点,只需要一个matedata和音视频各自header,后面的音视频数据就可以随意按照时间戳传输,这种直播数据实际上就是一个无限大的http传输的flv文件,客户端利用flv特性,可以一边接受数据边解码播放。
rtmp:Real Time Messaging Protocol(实时消息传输协议):
rtmp是adobe研发的开放协议,rtmp其实实质上也是传输的flv格式的数据,同样是flv tag,只不过rtmp在传输上封装了一层,比如rtmp不仅可以直播,也可以推流。rtmp的直播原理同样也是利用了flv文件的特性,只需要一些头信息,后面就可以随意传输音视频数据,达到边传输边播放。
hls:
hls是苹果公司开发的协议,http轮询传输,该协议主要的数据格式是ts视频文件,大致就是将裸流h264和音频直播数据,切片封装成ts段,形成无数的ts小文件,客户端先请求一个m3u8文件,该文件内部会有一列ts文件的地址,客户端按照顺序依次播放ts。
5. 解码
硬解码:用GPU来解码,减少CPU运算
优点:播放流畅、低功耗,解码速度快。
缺点:兼容不好
软解码:用CPU来解码
优点:兼容好
缺点:加大CPU负担,耗电增加、没有硬解码流畅,解码速度相对慢。
6.鉴黄、恐、暴力
每间隔时间对视频采集关键帧图像进行鉴定判断。识别图像中是否存在人物体征并统计人数;识别图像中人物的性别、年龄区间;识别人物的肤色、肢体器官暴露程度;识别人物的肢体轮廓,分析动作行为;提取音频信息关键词,判断是否存在敏感信息。
相关名词解释:
-
CDN (Content Delivery Network)
即内容分发网络,它是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件。确保内容以一种极为高效的方式为用户的请求提供服务,可在推拉流阶段实现加上功能。
-
帧率(单位 fps)
每秒显示的图片数。
-
码率(单位 kb/s或者Mb/s)
图片进行压缩后每秒显示的数据量。
-
GOP(Group of Pictures):
画面组,一个GOP就是一组连续的画面,每个画面都是一帧,一个GOP就是很多帧的集合。
附录:
音频格式:
1、 WAV
WAV是微软公司开发的一种声音文件格式,用于保存windows平台的音频信息资源。是目前PC机上广泛使用的声音文件格式,几乎所有的音频编辑软件都识别WAV格式。
2、 FLAC
Free Lossless Audio Codec的缩写,中文可理解为无损音频压缩编码。FLAC是一套著名的音频压缩编码,其特点是无损压缩。
3、 MP3
也就是指的是MPEG标准中的音频部分,也就是MPEG音频层。根据压缩质量和编码处理的不同分为3层,分别对应 .mp1 , mp2, . mp3 这3种声音文件。
其特点是文件小,音质好;知道现在还是主流音频格式。
4、 WMA
Windows Media Audio, 这种格式以减少数据流量但保持音质的方法来达到比MP3压缩率更高的木器,WMA的压缩率一般可以达到1:18左右;
5、 OGG
OGG格式完全开源,完全免费。与MP3类似,OGG也是对音频进行有损压缩编码,但通过使用更加先进的声学模型去减少损失。因此,相同码率的OGG比MP3的音质更好,文件也更小一些。
6、 AC-3
全称“杜比AC-3“,是杜比公司开发的新一代家庭影院多声道数字音频编码方式。杜比数字AC-3是根据感觉来开发的编码系统多声道环绕声。主流的编解码标准的压缩对象都是YUV图像。
视频格式:
1、 AVI
即音频视频交错格式。是将语音和影响同步组合在一起的文件格式。采用一种有损压缩方式,压缩比较高,画面质量不是太好,但由于绝大多数视频编辑及转换软件导入导出avi格式较快。
2、 MP4
MP4大多使用mpeg-4或H.264视频编码器压缩。RMVB使用real media视频编码器压缩。
3、 MKV
MKV严格的来说并不是一个视频格式,它是多媒体封装格式,最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,主流的编解码标准的压缩对象都是YUV图像。
4、 FLV
FLV是FLASH VIDEO的简称。由于形成的文件极小;加载速度极快,在网络视频中,运用极为广泛。但仅基本用于网络视频。
5、 MOV
QuickTime具有跨平台、存储空间要求小等特点,采用了有损压缩方式的MOV格式文件,画面效果较AVI格式要稍微好一些。
目前基本仅见于IOS、mac上,但大多数播放器仍支持该格式。
6、3GP
3GP是一种3G流媒体的视频编码格式,3GP是MP4格式的一种简化版本,减少了储存空间和较低的频宽需求,让手机上有限的储存空间可以使用。
YUV:
一般的视频采集芯片输出的码流一般都是YUV数据流的形式。YUV是指亮度参量和色度参量分开表示的像素格式,作用是描述影像色彩及饱和度,用于指定像素的颜色。
Y:亮度分量 (Luminance)
UV:2个色度分量 (Chrominance)