探索多媒体直播技术

256 阅读5分钟

视频的基本元素

介绍视频分辨率、码率、编码格式、轨道等知识,基本了解一下视频文件

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

RGB三原色:每种颜色都可以由红绿蓝三原色来表示。R、G、B的取值分别从0-255,一共有256个等级。

分辨率:指的是纵横方向的像素数量,一般表示为:宽*高

码率/比特率:表示单位时间内传送bit的数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流。电信领域尚可以用来表示网速,例如100Mbps。

【注】越高的比特率,所需要的宽带就更高,否则会带来卡顿、成本问题;比特率太低也会造成视频画面过度压缩、模糊不清。

帧/帧率:帧就是视频或者动画中的每一张画面,视频和动画也是有无数张画面组合而成,每一张画面都是一帧;

帧率是每秒传输帧数,也就是指动画或者视频的画面数、帧率。每秒帧数越多,所显示的动作就会越流畅。

视频压缩

介绍GOP、IPB 帧的特点以及解码特点,对比视频、直播、视频编辑不同场景对该特性的灵活运用H264、H265编码的特点

视频播放的本质就是将视频画面从封装文件中进行解码、渲染。

GIF VS MP4: GIF 图与 MP4 有点相似,都是包含了一组会动态图像的文件

但是相同内容的 GIF 和 MP4 文件体积相差非常大,GIF 会比 MP4 大上好几倍,主要原因是 GIF 缺少帧间编码,无法有效地利用图像间的相关信息

帧内压缩/空间压缩:当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。帧内一般采用有损压缩算法,达不到很高的压缩比。

帧间压缩/时间压缩:这是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的。

通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比,一般是无损压缩。

帧类型对比

image.png

来源:青训营课件

视频编码格式H264 VS H265

H265压缩比更高,需要更多的算力
H264:AVC更普及
H265:HEVC更小体积

直播推拉流协议

对比不同场景的视频方案选取
对比FLV和MP4的封装特点
介绍RTMP/HTTP-FLV/HLS的特点和选择

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

  • MP4

     Moov:Movie Box,存储 mp4 的 metadata,一般位于mp4文件的开头。
    
     mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间、文件时长等
    
     trak:Track Box,一个mp4可以包含一个或多个轨道(比如视频轨道、音频轨道)
    
     **Stbl:Sample Table Box**
     包含了这些媒体数据的索引以及时间信息
    
  • FLV

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

推拉流协议

  • RTMP: Real-Time Messaging Protocol:推流协议

    实时消息协议,最初由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体音频、视频和数据而开发的一个专有协议。后被Adobe公司收购。
    

优势:

•基于 tcp 协议

•技术成熟,Ffmpeg 项目中有 rtmp 库

•低延迟

劣势:

•停止更新

•规范上没有支持 H265

•使用 1935 端口,会被防火墙阻碍

image.png

来源:青训营课件

  • HTTP-FLV: HTTP+FLV:拉流协议,这是一种网络视频格式,用作流媒体格式。协议友好,格式件单,便与分发。

不转码的情况下直接转发即可,延迟较低。

  • HLS: HTTP Live Streaming:拉流协议,由苹果公司提出基于HTTP的流媒体网络传输协议。

     它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。
     当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,
     允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,
     客户端会下载一个包含元数据的扩展M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
     HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,
     HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。
     它也很容易使用内容分发网络来传输媒体流。
    

image.png

来源:青训营课件

客户端工作及总结

开播:图像采集。图像处理、编码、推流
看播:拉流、解码、图像处理、渲染

客户端工作

image.png

来源:青训营课件

  • 推流端——开播过程

    采集方式:摄像头。屏幕、图像采集卡等
    图像处理的场景:美颜、绿幕、头饰
    

image.png

来源:青训营课件

  • 拉流端——看播过程

image.png

来源:青训营课件

课程总结

FLV和MP4的区别在于文件格式不同,解析方式不同

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