基础知识
- 帧率 : 单位时间内显示画面的帧数, 30是可以接受的, 到60 会有明显的交互感提升, 但是超过75, 就不会有明显的提升体验, 并且如果 (帧率 > 屏幕的刷新率) 是无用的, 反而浪费了图像的处理能力, 因为监视器不能以这么快的速度更新;
- 分辨率: 图像的大小或者尺寸
- 刷新率: 每秒钟屏幕的刷新频率, 即屏幕上的图像每秒重绘的次数. 刷新频率越高, 图像与稳定, 抖动越小, 图片越清晰.
- **码率:**就是比特率, 标识单位时间内连续播放的媒体的比特数量, 比特率越高, 带宽消耗越多. 文件大小(b) = 码率 (b/s) * 时长(s); 视频的质量和码率和编码算法都有关系;
- **DTS:**内存中的比特流送入解码器解码的时间
- PTS: 视频帧显示的时间
推荐码率
FFmpeg 中的名词解释
- 复用(muxing) : 将原始的数据包(AVPacket)合成指定的封装格式
- 解复用(demuxing) : 将编码好的数据通过FFmpeg的libavformat库和解复用器进行解复用, 分离出原始音频和视频数据(AVPacket)
- 解码(decoding) : 将解复用后的音频包和视频包(AVPacket)通过解码器解码成未压缩的音视频帧(AVFrame)
- 编码(encoding) : 通过编码器将未压缩的音视频帧(AVFrame)编码成成原始的音频包和视频包(AVPacket)
直播中的名词解释
- 音频采样率: 采样率越高,数据量越大, 音频质量越好;
- 位宽: 表示一次能传递的数据宽度, 位宽越大, 一次能处理的数据流就越多。
- 声道数: 录制时候的音频源数量
- 图像格式: 通常是YUV
- 传输通道: TCP 传输或者UDP 传输
- **分辨率:**表示图像中存储的信息量, 指每英寸图像内存中有多少个像素
- **采样率:**指每秒从连续信号中提取并组成离散信号的采样个数;
- **fps:**指画面每秒传输的帧数。
- **RTMP:**基于TCP的网络协议
- WebRTC 底层基于UDP和SRTP实现, 可以实现点对点的通信。
- **CDN:**内容分发网络, 通过在现有的网络中增加一层新的网络架构, 将网站内容发布到离用户最近的网络节点上,这样用户可以就近获取所需的内容,
- CDN的常用架构
1. 缓存服务器: 是直接提供给用户访问的站点资源, 由一台或者多台服务器组成,当用户发起访问时,其访问的请求被智能DNS定位到距离用户最近的缓存服务器,如果用户所访问的内容刚好在缓存里面,则直接把内容返还给用户, 如果用户访问的内容没有缓存,则缓存的服务器向邻近的缓存服务器或源站抓取内容返还给用户。
2. 智能DNS: 是整个CDN技术的核心,主要根据用户的来源,以及当前缓存服务器的负载情况 将用户的访问请求指向距离用户较近且负载较小的缓存服务器, 通过智能DNS解析, 让用户访问同服务商且负载较小的服务器。
流程描述 :
主播开播时向智能DNS发送解析请求, 智能DNS返回最优的CDN节点的IP地址, 主播采集音视频数据发送给CDN节点, CDN节点进行缓存等处理, 观众要观看这个主播的视频, 向智能DNS发起解析请求, 智能DNS返回最优的CDN节点的IP地址,观众向CDN节点请求视频数据,CDN节点同步其他节点的音视频数据,之后CDN节点将音视频数据发送给观众。
- 拉流:
- 解析二进制数据, 从中得到相关的流信息
- 根据不同的封装格式解复用
- 得到以编码的H.264视频数据和AAC音频数据
- 使用硬解码或者软解码来解压音视频数据
- 经过解码后得到原始的YUV数据和PCM数据
- 做音视频同步, 在FFmpeg中,使用音频作为参考时钟,视频比较当前的音频时钟,如果快了, 就增加延时, 如果慢了,就减少延时。