其他分享
首页 > 其他分享> > 【网络】流媒体协议--直播

【网络】流媒体协议--直播

作者:互联网

文章目录

视频中的图片压缩

14

 

视频编码

  1. ITU(International Telecommunications Union)的VCEG(Video Codding Experts Group)。侧重传输。
  2. ISO(International Standards Organization)的MPEG(Moving Picture Experts Group)。侧重存储。

后来,ITU-T(ITU Telecommunication Standardization Sector)与MPEG联合制定了H.264/MPEG-4 AVC。

经过编码后 ,图像便成为二进制。

直播原理

 

过程详解

1. 编码:如何将丰富多彩的图片变成二进制流?

视频序列分3种帧:

压缩后帧的序列,应该是在 IBBP 的间隔出现的。

 

 

一个帧分成多个片,片分成多个宏块,宏分成多个子块,方便进行空间上的编码。

编码后,需压缩成流,是一个个的网络提取层单元(NALU,Network Abstraction Layer Unit),方便网络上的传输,因为网络传输默认是包。

 

 

NALU起始标识符标识NALU之间的间隔;NALU头里配置了类型;Payload里是承载的数据。

NALU头里,主要的内容是类型NAL Type。

传输视频流之前,先传输这两类参数,用于解密。为保证容错性,每个 I 帧前都会传输两类参数。

如果NALU Header里表示的类型是SPS或PPS,则Payload里就是真正参数集的内容;如果类型是帧,则Payload里是真正的视频数据。保存的是帧里的一片,每片是I帧还是P帧,在片结构里的Header里的类型说明,然后是片的内容。

2. 推流:如何把数据流打包传输到对端?

使用RTMP协议。RTMP基于TCP,双方需要建立一个TCP的连接。

RTMP为什么需要建立一个单独的连接?因为需要商量一些事情,保证之后传输的正常进行。主要商量版本号和时间戳。握手之后,双方传递一些控制信息,如Chunk块的大小 、窗口大小等。

真正传输数据的时候,还需要创建一个流Stream,然后通过Stream推流publish。

推流的过程,就是将NALU放在Message里传送,称RTMP packet包。Message的格式如下图所示。

 

发送时,去掉NALU的起始标识符。将SPS和PPS参数集封装称一个RTMP包发送,然后发送一个个片的NALU。

RTMP收发数据时,将Message拆分成Chunk发送,每个Chunk中带Message ID。

推流过程如下图所示:

 

3. 为降低服务器压力,需要有分发网络。

分发网络分为中心和边缘两层。边缘层离用户比较近。中心层时流媒体服务集群,负责内容的转发、转码。智能负载均衡系统,根据用户的地理位置信息,就近选择边缘服务器,为用户提供推/拉流服务。

 

4. 拉流:观众的客户端如何看到视频?

客户端通过RTMP拉流过程如下图所示:

 

先读到的是H.264的解码参数,如SPS和PPS,然后对收到的NALU组成一个个帧,进行解码,交给播放器播放。

 

 

*夜空中最亮的星* 发布了1 篇原创文章 · 获赞 6 · 访问量 4272 私信 关注

标签:编码,流媒体,视频,网络,传输,直播,RTMP,NALU,推流
来源: https://blog.csdn.net/weixin_38054045/article/details/103441577