PS

PS #

Program stream

PS 流的包结构是可变长度的, 一旦某一 PS 包的同步信息丢失,接收机无法确定下一包的同步位置,就会造成失步,导致严重的信息丢失。

信道环境较好,传输误码较低时,一般采用 PS 码流。


TS #

MPEG transport stream (MPEG-TS, MTS)

传输流,是由固定长度为 188 字节的包组成, 含有一个或多个 program, 一个 program 可以包含多个视频、音频、和文字信息的 ES 流; 每个 ES 流会有不同的 PID 标示。

而又为了可以分析这些 ES 流,TS 有一些固定的 PID 用来间隔发送 program 和 ES 流信息的表格:

  • PAT
  • PMT 表

TS 流的包结构是固定长度的, 当传输误码破坏了某一 TS 包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。

信道环境较为恶劣,传输误码较高时,一般采用 TS 码流。

TS 流解码过程 #

  1. 获取 TS 中的 PAT
  2. 获取 TS 中的 PMT
  3. 根据 PMT 可以知道当前网络中传输的视频(音频)类型(H264),相应的 PID,PCR 的 PID 等信息。
  4. 设置 demux 模块的视频 Filter 为相应视频的 PID 和 stream type 等。
  5. 从视频 Demux Filter 后得到的 TS 数据包中的 payload 数据就是 one piece of PES, 在 TS header 中有一些关于此 payload 属于哪个 PES 的 第多少个数据包。 因此软件中应该将此 payload 中的数据 copy 到 PES 的 buffer 中,用于拼接一个 PES 包
  6. 拼接好的 PES 包的包头会有 PTSDTS 信息,去掉 PES 的 header 就是 ES
  7. 直接将被拔掉 PES 包头的 ES 包送给 decoder 就可以进行解码。 解码出来的数据就是一帧一帧的视频数据,这些数据至少应当与 PES 中的 PTS 关联一下,以便进行视音频同步

ES #

Elementary Stream

基本码流,包含视频、音频或数据的连续码流。

ES -> PES -> PS/TS


PES #

Packet Elementary Stream

打包的基本码流

将基本的码流 ES 流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流 PES 流。


本文访问量

本站总访问量

本站总访客数