Android-探索新媒体直播技术|青训营笔记
这是我参加「第四届青训营」笔记创作活动第四天
探索新媒体直播技术
1.视频的基本元素
像素:
是指在由一个数字序列表示的图像中的一个最小单位,称为像素,通常表现为一个小方格,每个像素有自己的颜色值,一般为RGB三原色来表示。
RGB三原色:
每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度,记录及显示色彩图像时,RGB是最常见的一种方案 它们的取值,R、G、B反别从0-255,一共266个等级 按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256256256=16777216.通常简称1600万色或千万色
分辨率:
指的是纵横方向的像素数量,一般表示为:宽高(or长宽)
码率/比特率
- 表示单位时间内传送bit数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流
- 这种bps的单位电信领域上表示速度,就是我们常说的网速了 100mbps
- 越高的比特率,需要更高的带宽来支撑,否则会带来卡顿,成本等问题
- 太低的比特率,可能会导致视频画面过渡压缩,模糊不清
- ffmpeg:视频处理工具
- ffplay:视频播放工具
- ffprobe:视频分析工具
帧&帧率
- 理解帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。
帧&帧率 帧率
- 每秒传输帧数通俗讲就是指动画或视频的画面数、帧率。每秒钟帧数越多,所显示的动作就会越流畅。FPS也可以理解为我们常说的”刷新率。当刷新率太低时我们眼肉都能感觉到屏幕的闪烁、不连贯,对图像显示效果和视觉观感产生不好影响。
2.视频压缩
颜色空间
简单来说,YUV就是另外一种颜色数字化表示方式。视频通信系统之所以要用YUV,而不是RGC,主要是因为RGB信号吧利于压缩,在YUV这种方式里面,加入了亮度这一概念。在最近十年中,视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度。
所以,工程师认为,在我们的视频存储中,没有必要存储全部颜色信号。我们可以把更多带宽带给黑一白信号(被称作“亮度"),将销少的带宽留给彩色信号(被称作“色度”),于是,就有了YUV。
YUV里面的“Y"就是亮度(Luma)"U”和“V”则是色度(Chroma)。
帧内压缩/空间压缩
- 帧内(lntraframe)压缩也称为空间压缩。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间冗余信息,这实际上与静态图像压缩类似。
帧间压缩/时间压缩
- 帧间压缩,也称为时间压缩,时基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的。
帧的编码类型
- l-frame:intra-frame 帧内帧
- P-frame:Predicted Frame 前内预测帧
B-frame:Bi-Directional frame
- 由于B帧可以参考和插入在它之前和之后发生的两个(或更多个)帧(在时间维度上),所以它可以显著降低帧的大小,同时保持视频质量,B帧能够利用空间冗余和时间冗余(未来的帧和过去的帧),这使得它在视频压缩中非常有用
视频改变播放进度后,如果不在同一个GOP中需要从新的位置所在的GOP的I帧开始解码拖动后起播所需要的耗时取决于位置在GOP中的位置。越靠前越能越快响应
不同场景对GOP的设置也不一样
- 视频点播:节省带宽,压高缩率,会使用B帧
- 直播:低延迟,不使用B帧
- 视频编辑:提高响应。个别会使用I帧
视频编码格式H264 VS H265
H264:AVC 广泛普及 H265:HEVC 逐渐推广 H266:VVC 未来可期
其他: Google:VP9 Netflix:AV1
压缩比越高的编码算法需要越高的算力来支持
3.直播推拉流协议
视频数据的封装
- 对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起就进行封装。
封装:就是封装格式,简单来说,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。再通俗点,视频轨相当于菜,封装格式就是一个饭盒,用来盛放饭菜的容器。
目前主要的视频容器有如下:
- MPG
- VOB
- MP4
- 3GP
- ASF
- RMVB
- WMV
- Divx
- MKV
- FLV
- TS/PS等。 封装格式:MP4
是只按照一定规则,将视频数据,音频数据等,放到一个文件中。 常见的MKV、AVl以及本介绍的MP4等,都是封装格式。
- Moov:Movie Box,存储MP4 的 metadata,一般位于mp4文件的开头。
- mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间,文件时长等
- trak:Track Box、一个mp4可以包含一个或多个轨道(比如视频轨到、音频轨道)
- Stbl:Sample Table Box 包含了这些媒体数据的引以及时间信息
封装格式:FLV
- FLV是一个二进制文件,由文件头和很多tag组成tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流
CDN:Content Delivery Network
建立并覆盖在Internet之上,由分布在不同区域的边缘点服务器群组成的分布式网络。通过智能调度将用户请求到最近接近用户的服务点,降低用户访问延迟,提升可用性。
边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储,计算、网络等资源,将部分业务应用下沉到接入网络边缘,以减少网络传输和多级转发带来的宽度和时延损耗
-
点播:视频播放
-
直播看播:观众观看直播
-
推流:主播将数据发送到CDN网络
-
拉流:观众从CDN拉取直播数据
推拉流协议方案
- RTMP:Real-Time Messaging Protocol
- HTTP-FLV:HTTP+FLV
- HLS:HTTP LIve Streaming
推流协议
- 实时消息协议:也称为实时消息传输协议,是最初由Macsromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体音频、视频和数据而开发的一个专有协议。后被Adobe公司收购
- 优势
- 基于TCP协议
- 技术成熟,ffmpeg项目中RTMP库
- 低延迟
- 劣势
- 停止更新
- 规范上没有支持H265
- 使用1935端口,会被防火墙阻碍
拉流协议
- HTTP-FV
- Flash Video 简称FLV 是一种网络视频格式,用作流媒体格式
- 协议友好,格式简单,便于开发,不转码的情况下直接转发即可,延迟较低
HLS:是由苹果公司提出基于HTTP的流媒体网络传输协议
- 工作原理:把整个流分成一个个小的基于HTTP的文件来下载,每次只允许下载一些,当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,只允许媒体会话适用不同的数据速率
- 在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展M3U播放列表文件,用于寻找可用的媒体流
对比
开播过程
看播过程
音画同步
对比推流和拉流
4.客户端工作及总结
flv和MP4的区别在于文件格式不同、解析方式不同
- 文件格式不同:flv是流式文件,mp4是容器式文件
- 解析方式不同:flv文件可以边传输边解析,mp4文件不行