这是我参与「第四届青训营 」笔记创作活动的第5天 主要为思维导图大纲,收集课堂要点和一些补充知识 欢迎补充&指正
探索多媒体直播技术
1.视频的基本元素
1.视频基本要素
-
1.像素点
- 不同颜色的小点矩阵
-
2.RGB(三原色)
- 红、蓝、绿强度0~255
-
3.分辨率
-
纵横方向的像素数量
- 例如1080p
-
-
4.码率/比特率
- 单位时间内传送bit的数目,单位bps
- 高比特率需要高带宽,比特率太低则过度压缩,模糊不清
- 转码指令:ffmpeg -i input.mp4 -b:v xx output.mp4
-
5.帧/帧率
- 视频、动画中的每一张画面
- 帧率/刷新率:每秒传输帧数
- 卡顿、屏幕闪烁
-
6.视频数据封装
- 编码压缩好的视频轨与音频轨按照一定格式放入视频容器,交错摆放(为了音画同步,实现边下载边播放)
- 利用时间戳实现同步
-
7.视频轨道/流
- audio/video/subtitles(字幕)
-
8.YUV:颜色空间
- 带宽分给亮度Luma(黑白信号)、色度Chroma(彩色信号)
- 人眼对亮度更敏感
- YUV更易于RGB压缩
2.视频压缩
-
引入:GIF压缩成MP4
-
压缩:利用视频画面相关性减少数据量
-
1.帧内压缩/空间压缩
- 同一帧画面,划分小方格,相同方格直接引用同一个
-
2.帧间压缩/时间压缩
- 保留两帧相关性,即冗余信息,叠加新增差值
-
3.帧的编码类型
- 1.帧内帧:只依赖自己,可独立完成编码
- 2.前项预测帧:依赖前一帧画面(压缩比较高)
- 3.B帧(双向预测帧):解码参考某帧的前帧和后帧,再解码该帧
-
4.GOP(group of picture)
-
I帧为GOP的基础帧(第一帧)
-
场景设置
- 视频点播:节省带宽,高压缩率,会使用 B 帧
- 直播:低延迟,不使用 B 帧
- 视频编辑:提高响应,个别会使用全 I 帧
-
-
5.视频编码格式 H264 VS H265
- H265 压缩比更高,需要更多的算力
- H264 : AVC 更普及
- H265 : HEVC 更小体积
- google:vp9
- 网飞:AV1
-
3.直播推拉流协议
-
1.封装格式:MP4(表格)
- Moov:Movie Box,存储 mp4 的 metadata,一般位于mp4文件的开头。
- mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间、文件时长等
- trak:Track Box,一个mp4可以包含一个或多个轨道(比如视频轨道、音频轨道)
- Stbl:Sample Table Box包含了这些媒体数据的索引以及时间信息
-
2.封装格式:FLV(链式)
- FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。
- tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)
-
3.CDN:Content Delivery Network
- 建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。
- 边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储、计算、网络等资源,将部分关键业务应用下沉到接入网络边缘,以减少网络传输和多级转发带来的宽度和时延损耗
-
4.推拉流协议方案
-
RTMP : Real-Time Messaging Protocol实时消息协议
-
优势:
- •基于 tcp 协议
- •技术成熟,Ffmpeg 项目中有 rtmp 库
- •低延迟
-
劣势
- •停止更新
- •规范上没有支持 H265
- •使用 1935 端口,会被防火墙阻碍
-
-
HTTP-FLV:HTTP + FLV
- 协议友好,格式简单,便于分发
-
HLS : HTTP Live Streaming(APPLE)
- 把整个流分成一个个小的基于HTTP的文件 来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的 资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
- HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
-
-
5.推拉流
-
推流端
- 图像采集->图像处理->编码+封装->推流
- 采集方式:摄像头、屏幕、图像采集卡等
- 图像处理的场景:美颜、绿幕、头饰
-
拉流端
- 拉流->封装码+解码(RGB)->图像处理->渲染
-
视频工具
ffmpeg-视频处理工具
ffplay-视频播放工具
ffprobe-视频分析工具
名词解释
点播:视频播放
推流:主播将数据发送到CDN网络(HTTP-FLV)主播之间互动(WebRTC:低延迟)
拉流:观众从CDN拉取直播数据(MP4)
M3u8 一级请求返回
相对地址
自适应码率 根据不同的带宽决定使用合适的源