音视频基础之复合流解析:TS流格式的讲解

2022-11-28 17:27:00 浏览数 (1)

一、复合流的概念,什么是复合流?

复合流简单地说,就是一条流包含视频和音频。如果一条流只包含音频或者视频的话,我们称之为裸流,比方说H264裸流、aac裸流等。在音视频中,TS流(全称是:MPEG2-TS)是一种常用的复合流(目前属于最常见的复合流)。几乎所有的流媒体协议都支持TS流,如:RTSP、UDP、SRT等等(RTMP属于FLV流媒体协议,下一篇会详细介绍)。

二.TS流的结构介绍:

2.1.TS流支持的三层结构:

他分别是:

  • Transport Stream层
  • Pes层(Packet Element Stream)
  • ES流层(Elementary Stream)

2.2.Transport stream层的讲解:

TS层的大小固定在188个字节,并且TS内部也分成三个部分:分别是TS Header、Adaptation Field、Payload。其中TS Header指的是TS的头部,固定四个字节。Adaptation Field没有特别的意义,主要是补充188个字节的。payload指的是pes的具体数据。

  • TS头部的结构:
  • Adaption的结构:

Transport stream层的主要内容包括了:PAT表、PMT表、音频流、视频流。PAT表的主要功能是通过PMT找到对应的音视频流。PAT表的PID值一般为0,而PAT和PMT需要不定时插入TS流。所以,我们总结一下PAT表、PMT表的具体作用:

  • PAT表:最主要功能是通过此表找到PAT表的PID值,下面这个是PAT表的内容
  • PMT表:最主要功能是找到音视频的PID值,下面是PMT表的具体内容
  • 音视频流:就是用户插入的具体音视频数据

2.3.PES层结构的讲解:

我们介绍完Transport Stream层之后,我们再来看看PES层的内容。PES层的主要功能是在每一个音视频流上添加时间戳。这就是我们经常在ffplay或者vlc播放器看到有PTS、DTS的信息。我们先来看看PES的结构:

PTS指的是显示时间戳,DTS指的是解码时间戳。在绝大部分情况下,PTS和DTS的值都是相同的,但如果编码器引入B帧的话,PTS和DTS就要根据B真的间隔去计算DTS。

音频的PTS则永远等于DTS

2.4.ES层结构的讲解:

ES层就是我们常说的视频裸流,音频裸流。比方说:H264/HEVC码流 AAC码流。在TS流的ES层里面,所有的视频裸流和音频裸流都需要进行打包操作。比方说以H264码流为例,所有的H264裸流都遵循NALU格式,这其中包括SPS、PPS、I帧。

这里由于是ES流的结构,在上一几篇文章已经介绍过了,所以这里不做过多介绍

0 人点赞