推流端:主播使用的终端
- 通过摄像头进行视频采集,通常为YUV编码格式
- 通过话筒进行音频采集,通常为PCM编码格式
- 将视频数据从YUV编码为H264或H265
- 将音频数据从PCM编码为AAC
- 将视频与音频数据一起编码为多媒体容器格式,如H264与AAC组合编码为FLV或TS或RTMP Packet,根据传输协议来定
- 通过某种协议将数据推送到目标地址:
- 应用层协议:HLS、RTSP、RTMP
- 传输层协议:RTCP、RTP
- 网络层协议:RSVP
服务端
待学习
拉流端:用户终端
- 通过某种协议从目标地址拉取数据,同上
- 将多媒体容器格式的数据解复用为视频编码格式的视频数据如H264和音频编码格式的音频数据如AAC
- 使用硬解码(GPU解码+CPU辅助)或软解码(CPU解码)将H264视频数据和AAC音频数据解码为YUV和PCM数据
- 执行音话同步操作
- 将同步后的YUV数据传输给视频播放设备;将同步后的AAC音频数据传输给音频播放设备
相关协议
- HLS
苹果提出的基于HTTP的流媒体网络传输协议 - RTSP
流媒体协议;一般是ts或mp4格式,一般在2-3个通道上传输命令和数据 - RTMP
流媒体协议;一般是flv或f4v格式,一般在一个通道上传输命令和数据 - RTP
RTP标准定义了两个协议:RTP(数据传输协议)和RTCP(控制协议)
多媒体容器格式
一般情况下,用户不会直接拥有单独的视频和音频文件,而是同时包含两种数据的多媒体容器格式的文件,通过解复用剥离出视频和音频数据,传输给对应的硬件
- 多媒体容器格式:MPEG-4、AVI、FLV、TS、MKV、RMVB
- 解复用后的视频编码格式:H264(国际电联的命名)/AVC(ISO的命名)(这俩机构联合开发的,但是各自命了名,蛋疼)、MPEG2 Part2、MPEG2 Part4
- 解复用后的音频编码格式:AAC、MP3、FLAC、APE、WAVEPACK
- YUV:视频采集芯片直接输出的视频编码格式
- PCM:音频采集芯片直接输出的音频编码格式
编码格式
编码格式本身是一种压缩标准,而制作这个标准的机构主要有两个
- ITU-T:主要制定了H.261/H263/H263+/H263++等标准
- ISO:主要制定了MPEG-1/MPEG-4等
为了统一,目前比较通用的是双方共同制作的MPEG-2、H.264/AVC和H.265/HEVC等协议(各自命了名,但其实是同一个协议) - MPEG-1:最早的音视频压缩标准,被VCD标准采用,其中的Part3(Audio)中的Layer3,就是我们平常说的mp3,但有时候也可能是MPEG-2 Audio Layer Ⅲ
- MPEG-2:Part2被DVD标注采用
- MPEG-4:Part4就是常说的mp4,其中的Part10就是由ITU-T和ISO共同制定的H264/AVC编码格式