直播基本流程
这里不涉及到业务相关 , 这里简要说明直播流程
推流端: 负责将本地的音视频数据推送至流媒体服务器
流程:音视频数据采集->编码->封装->协议封包
功能:美颜滤镜、音效处理、回音消除
播流端:负责拉取流媒体服务器的音视频数据到本地解码播放
流程:网络流数据->解协议->解封装->解码->音视频同步
功能:动态追帧、硬件加速、首屏秒开、高效解码
流媒体服务器:负责直播流的创建,分发到各个cdn节点,加快流的解析,以及各种流的管理统计等等
功能: CDN分发、实时转码、视频录制、Qos、自动鉴黄
一、推流端
★文末名片可以免费领取音视频开发学习资料
音视频采集
通过摄像头和麦克风获得实时的音频原数据,例如PCM数据。视频原数据,例如yuv420p,rgb数据。
注意:有关音频特效(变声)和视频特效(大眼瘦脸)就是对音视频原数据的处理
编码
音频编码:将音频采样数据(PCM等)压缩成音频码流,从而降低音频的数据量
视频编码:视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成视频码流,从而降低视频的数据量
封装
封装格式的主要作用是把视频码流(H264数据)和音频码流(AAC数据)按照一定的格式存储在一个文件中(FLV文件)
协议封装
对封装格式的文件(flv、mp4等)进行rtmp、http、hls等协议的封包过程
二、播流端
播流需要经过以下几个步骤:解协议、解封装、解码视音频、视音频同步。如果播放本地文件则不需要解协议。
解协议
就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。
解封装
就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。
解码
就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
视音频同步
就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。
三、流媒体服务器
下图是参加了业务相关
作者:靑笺画卿颜
★文末名片可以免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓