探索多媒体直播技术|青训营笔记

137 阅读11分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

8.5 android第四课——探索多媒体直播技术

一、视频的基本元素

1、像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素,通常表现为一个小方格。每个像素有自己的颜色值,一般为RGB三原色来表示

2、RGB三原色:

每种颜色都可用红绿蓝颜色的强度这三个变量来表示,记录及显示彩色图像时,RGB是最常见的方案,R、G、B取值分别从0到255,一共256个等级image-20220805192800926

3、分辨率:指的是纵横方向的像素数量,一般表示为:宽*高(or长 *宽),720 *1080等image-20220805193137120image-20220805193200983

4、码率/比特率:表示单位时间内传送bit的数目,单位bps,表示的是单位时间播放联系的媒体如压缩后的音视频的bit数量,也称为码流

这种bps的单位在电信领域表示速度,也就是网速,如100Mbps

越高的比特率,需要更高的带宽来支撑,否则会带来卡顿、成本等问题

太低的比特率,可能会导致视频画面过度压缩,模糊不清

5、压缩视频大小

ffmpeg -i input.mp4 -b:v xx output.mp4

6、帧(Frame)/帧率(Frame Rate):

帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面就是一帧

帧率:每秒传输帧数/每秒传输动画或视频的画面数

帧率越高,所显示的动作就会越流畅

FPS也可以理解为刷新率,当刷新率太低时我们肉眼都能感觉到屏幕的闪烁、不连贯,对图像显示效果和视觉感观产生不好的影响

7、轨道/流

视频流、音频流数据相互交错排列,形成混流

使用交错排列而不是前面全放视频数据,后面全放音频数据的原因:

虽然视频和音频数据是可以独立存在的,不过合并到视频文件后,我们的文件一般是顺序下载的,一个位置的音频数据相隔太远的话会造成卡顿、音画不同步

二、视频压缩

假如视频没有压缩,可能会造成一个视频大小好几个TB

1、帧内压缩(Intraframe)压缩也称为空间压缩(Spatial compression),当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息和静态图像压缩类似。帧内一般采用有损压缩算法,达不到很高的压缩比

无损图像压缩

原理:无损压缩的基本原理是相同的颜色信息只需保存一次。压缩图像的软件首先会确定图像中哪些区域是相同的,哪些是不同的。包括了重复数据的图像(如蓝天) 就可以被压缩,只有蓝天的起始点和终结点需要被记录下来。但是蓝色可能还会有不同的深浅,天空有时也可能被树木、山峰或其他的对象掩盖,这些就需要另外记录。从本质上看,无损压缩的方法可以删除一些重复数据,大大减少要在磁盘上保存的图像尺寸。但是,无损压缩的方法并不能减少图像的内存占用量,这是因为,当从磁盘上读取图像时,软件又会把丢失的像素用适当的颜色信息填充进来。如果要减少图像占用内存的容量,就必须使用有损压缩方法。

优点:无损压缩方法的优点是能够比较好地保存图像的质量,但是相对来说这种方法的压缩率比较低。但是,如果需要把图像用高分辨率的打印机打印出来,最好还是使用无损压缩几乎所有的图像文件都采用各自简化的格式名作为文件扩展名。从扩展名就可知道这幅图像是按什么格式存储的,应该用什么样的软件去读/写等等

2、帧间压缩/时间压缩

帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的,通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比,一般是无损压缩image-20220805202725846

B-frame:Bi-Directional frame

由于B帧可以参考和插入在它之前和之后发生的两个(或更多)帧(在时间维度上),所以它可以显著降低帧的大小,同时保持视频质量。B帧能够利用空间冗余和时间冗余(未来的帧和过去的帧),使得它在视频压缩中很有用image-20220805203112330

三种帧的对比:

image-20220805203203056

3、视频改变播放进度后,如果不在同一个GOP中,需要从新位置所在GOP的I帧开始解码,拖动后起播所需的耗时取决于位置在GOP中的位置,越靠前能越快响应image-20220805203854221

不同场景对GOP的设置也不一样

视频点播:节省带宽,高压缩率,会使用B帧

直播:低延迟,不使用B帧

视频编辑:提高响应,个别会使用全I帧

4、视频编码格式 H264 VS H265

H265压缩比更高,需要更多的算力

H264:AVC 更普及

H265:HEVC 更小体积image-20220805204428547

三、直播推拉流协议

1、CDN:Content Delivery Network

建立并覆盖在Internet之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性

边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储、计算、网络等资源,将部分关键业务应用下沉到接入网络边缘、以减少网络传输和多级转发带来的宽度和时延损耗image-20220805204920884

不同场景的视频通信方案image-20220805205018295

2、封装格式:是指按照一定的规则,将视频数据、音频数据等,放到一个文件中。常见的封装格式有MKV、AVI、MP4

需要注意的是,这里提到的封装格式是对前面提到的视频编码后的数据进行封装,也就是说,大部分格式都是支持H264或者H265编码的

MP4是结构化的封装格式,数据的位置会记录到索引,不可随意修改

Moov:Movie Box,存储MP4的metadata,一般位于mp4文件的开头

mvhd:Movie Header Box,MP4文件的整体信息,比如创建时间、文件时长等

trak:Track Box,一个MP4可以包含一个或多个轨道(比如视频轨道、音频轨道)

stbl:Sample Table Box,包含了这些媒体数据的索引以及时间信息image-20220805205620367

FLV:也是一种封装格式

FLV是一种二进制文件,由文件头(FLV header)和很多tag组成,tag又可分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)image-20220805205949980

image-20220805210016031

3、推拉流协议:

RTMP:Real-Time Messaging Protocol

HTTP-FLV:HTTP+FLV

HLS:HTTP Live Streamimage-20220805212216727

流媒体接入:也就是推流,应该使用RTMP协议,流媒体系统内部分使用RTMP协议,因为网络状况好,使用RTMP更能发挥它的高效本领。在PC上,尽量使用RTMP协议,因为PC基本都安装了Flash播放器,直播效果要好很多,移动端的网页播放器最好使用HLS协议,IOS要使用HLS协议,因为不支持RTMP协议,点播系统最好使用HLS协议。因为点播没有实时互动需求,延迟大一些是可以接受的,并且可以在浏览器上直接观看。

首先,与HLS技术相比,RTMP在传输时延上要比HLS小得多,主要原因在于HLS是基于切片(几秒钟视频的小文件),然后缓存的技术,这种技术从原理上就比直接进行数据传输慢得多,事实也证明了这一点,其次,相对于RTP协议,RTMP底层是基于TCP协议的,所以它不用考虑数据丢包、乱序、网络抖动等问题,极大地减少了开发人员的工作量,而使用RTP协议,网络质量的保障都需要自己来完成

4、推流协议

实时消息协议(Real-Time Messaging Protocol,缩写RTMP)也称为实时消息传输协议,是最初由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流美体音频视频和数据而开发的一个专有协议,后被Adobe公司收购

优势:

  • 基于tcp协议
  • 技术成熟,ffmpeg项目中有rtmp库
  • 低延迟

劣势:

  • 停止更新
  • 规范上没有支持H265
  • 使用1935端口,会被防火墙阻碍image-20220805212840893

5、拉流协议

1)HTTP-FLV

Flash Video(简称FLV),是一种网络视频格式,用作流媒体格式

协议友好,格式简单,便于分发,不转码的情况下直接转发即可,延迟较低

FLV文件是一个流式的文件格式,该文件中的数据部分是由多个“Previous TagSize+TAG”组成的,这样的文件结构有一个天然的好处,就是可以将音视频数据随时添加到FLV文件的末尾,而不会破坏文件的整体结构,像MP4、MOV等媒体格式都是格式化的,也就是说音频数据和视频数据是单独存放的,当服务端接收到音视频数据后,如果不通过MP4的文件头,根本就找不到音频或视频数据保存的位置

2)HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议,是苹果公司QuickTime X和Phone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率,在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展M3U播放列表文件,用于寻找可用的媒体流

HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器,也很容易使用内容分发网络来传输媒体流image-20220805214920701image-20220805214941137

image-20220805215014782

对比:image-20220805215049451

四、客户端工作及总结image-20220805215112000

开播过程:

图像采集->图像处理(可选)->编码+封装->推流

图像采集:image-20220805215528268

图像处理:image-20220805215551848

看播过程:拉流->解封装+解码->图像处理(可选)->渲染image-20220805215633356

对比:image-20220805215744637

课程总结:

flv和MP4的区别在于文件格式不同、解析格式不同

  1. 文件格式不同:flv是流式文件,MP4是容器式文件
  2. 解析方式不同:flv文件可以边传输边解析,而MP4文件则不行