视频直播的 推流是啥意思

昨晚和死党聊天的时候听他听到推流这个东西,然后就找了下资料了解了一下,这儿做个简单的随笔记录

         

推流

          推流:指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。所谓“采集阶段封包好”,我觉得应该是未解码的H264的NALU。

          我再直白点,推流就是把本地音视频数据(编码过的)通过网络上传到云端/后台服务器的过程

          流程大概是这样:原视频—>对音视频进行编码—>某种封装格式封装—>通过某种协议传输—>服务器

         

问题1

          这儿呢就有一个问题:“所有的视频都一定要编码吗?” 答案是肯定的。相信查看其他人的博客的理由是一样的:不经过压缩的视频太大!在网络传输时对带宽的要求和压力太大!

          视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成视频码流,从而降低视频的数据量。举个例子:比如当前手机的屏幕分辨率是1280 * 720(即我们平时在视频软件中可选的720P),假设一秒钟30帧(即1秒钟传输30张图片),那么一秒钟的数据为 1280 * 720(位像素)*30(张) / 8(1字节8位),也就是一秒钟的数据量为3.456M数据量,一分钟就是207.36M,那么我们平常看一部电影就是大约18G的流量,这样是很恐怖的一件事

         

问题2

          H264的NALU是个啥,这就需要涉及一点H264编码格式的知识

首先 H264 是一种编码格式,或者说编码算法,包含两个东西 VCL(视频编码层)和NAL(网络提取层),大概步骤可以这么理解

  • 压缩:预测(帧内预测和帧间预测)-> DCT变化和量化 -> 比特流编码;
  • 切分数据,主要为了第三步。这里一点,网上看到的“切片(slice)”、“宏块(macroblock)”是在VCL中的概念,一方面提高编码效率和降低误码率、另一方面提高网络传输的灵活性。
  • 打包封装成NAL。

NALU是NAL的组成单元, NALU由头和身体两个部分组成:

  • 头:一般存储标志信息,譬如NALU的类型。
  • 身体:存储了真正的数据。

更多H264的信息见 https://zhuanlan.zhihu.com/p/71928833

         

问题三

          所谓的封装格式究竟是啥?

         在日常我们一定见过很多后缀为avi, mp4, rmvb, flv等格式的视频文件。其实avi, mp4, rmvb, flv就是是所谓的封装视频的封装格式。

         

问题四

          从视频播放器播放一个互联网上的视频文件的过程

需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放下载好了的本地文件则不需要解协议,其他步骤相同。

在这里插入图片描述

  • 解协议:流媒体协议的数据,解析为标准的相应的封装格式数据
  • 解封装:将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。
  • 解码:就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。
  • 视音频同步:就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

更多信息见 https://juejin.im/post/6844903566209990669

猜你喜欢

转载自blog.csdn.net/qq_43657442/article/details/108360137