互动直播的是由推流端、服务端、播放端、互动系统五个部分组成。
推流端
推流端是有采集、前处理、编码、推流组成
采集:
1、音频采集:将你录制的声音通过模拟信号采集成PCM编码的原始数据,然后通过编码器压缩成MP3等格式;常见的压缩格式有MP3、WAVE、MPEG、AIFF等;音频采集的技术参考点:采样率、位宽、声道数、音频帧(2.5ms~60ms)
采样率:8KHz
位宽:16bit
声道数:双声道
音频帧:20ms/帧
一帧的数据大小就是:8000*16*2*0.02=5120bit /8= 640byte(字节)
2、图像采集:由摄像头拍摄成yuv编码的原始数据,然后通编码算法压缩成H.264等格式;常见的视频格式有avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb、rm、3gp、dat、ts、mts、vob
图像采集的技术参考点:分辨率、采样频率、采集格式、传输通道
3、采集源:摄像头、屏幕录制、文件推流
4、Android采集过程:
a、Surfaceview+Camera
b、GLSurfaceView +SurfaceTexture (openglees 做滤镜美颜功能
c、onPreviewFrame 默认得到的是NV21格式的数据,需要转换成I420
为什么要使用转I420
1.Camera预览格式:NV21、YV12 ,默认是NV21 格式
2.H264编码必须要用 I420格式的YUV420
前处理:
1、视频处理a、美颜----磨皮:模糊处理 均值模糊、高斯模糊、中值滤波;美白:识别皮肤、调整色值
b、滤镜----GPUIImage处理
c、水印----图像与水印图片的合并
2、音频处理
a、混音----音频信号的叠加、采样值溢出的处理
c、降噪----傅里叶变换
d、特效----变声:音色、音调 SoundTouch
编码:
1、编码的必要性压缩数据存储空间、减少传输时间
2、编码的原理
空间冗余:相邻像素之间的相关性
时间冗余:相邻图像之间内容相似
编码冗余:像素值出现的概率不同
视觉冗余:视觉对细节的不敏感性
3、常见的图像编码器
H264、H265、VP8、VP9
H264的编码知识
NALU:网络提取层单元
SPS:包括了一个图像序列的所有信息
PPS:包括了一个图像所有片的信息
I帧:帧内编码帧
P帧:前向预测编码帧
B帧:双向预测编码帧
GOP:两个I帧之间的图像组
4、常见的音频编码器
ACC、PCM、WAV、OGG
5、常见的封装格式
FLV、TS、AVI等
推流:
协议RTMP、WebRTC、UDP自定义协议RTMP
优点:
a、CDN支持良好
b、协议简单易实现
缺点:
a、基于TCP,传输成本高
b、Adobe私有协议
WebRTC
优点:
a、W3C标准
b、基于UDP
缺点:
CDN支持较差
UDP自定义协议
优点:
定制化空间大
缺点:
a、开发成本高
b、CDN不友好
服务端
是由转码、录制、截图、鉴黄组成转码
适应不同的网络带宽、不同的终端处理能力和不同的用户需求为直播平台提供很多的增值服务录制、截图
录制用于回放、截图用于封面鉴黄
基于深度学习的图片识别技术、对直播流进行控制播放端
是由拉流、解码、渲染组成常见的拉流协议
RTMP、HTTP-FLV、HLS使用场景
RTMP、HTTP-FLV:即时性要求较高、或有互动需求HLS:有回放需求、或跨平台需求
解码
编码的逆过程从音视频的数据中提取原始数据