MPEG-2 TS学习(一)MPEG-2 TS格式解析

MPEG-2 TS格式解析


收集了一些大神们的博客:

ts文件格式解析

TS文件格式详解

白话浅谈MPEG2-TS之demux

TS文件解析流程

TS流的解码过程-ES-PES-DTS-PTS-PCR

MPEG-2 TS码流分析

多媒体文件格式之TS


本文来自上面几篇文章的整理分析


MPEG2-TS介绍


    TS:全称为MPEG2-TS。TS即"Transport Stream"的缩写。它是分包发送的,每一个包长为188字节(还有192和204个字节的包)。包的结构:包头为4个字节(第一个字节为0x47),负载为184个字节。在TS流里可以填入很多类型的数据,如视频、音频、自定义信息等。MPEG2-TS主要应用于实时传送的节目,比如实时广播的电视节目。
MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。

MPEG-2 TS学习(一)MPEG-2 TS格式解析_第1张图片


TS包头



MPEG-2 TS学习(一)MPEG-2 TS格式解析_第2张图片




TS负载的类型


   
    一个TS包的载荷中,可以包含PAT包、PMT包、多个音频包、多个视频包、多个PCR包、以及其他信息包。


    TS包负载部分可以分成两种类型:
        1、视频、音频的PES包以及辅助数据。其中音视频的ES需要被打包成为PES,而辅助数据不需要被打包成PES
        2、节目专用信息PSI,包括下面几种:
            PAT:节目关联表。提供了节目好和对应PMT表格的PID的对应关系
            PMT:节目映射表。定义了与特定节目相关的PID信息,例如:音频包的pid,视频包的pid、pcr的pid
            CAT:条件接收表。用于流加扰情况下配置参数。
            NIT:网络信息表。可选的,标准未详细定义
            TSDT:传输流描述表。可选的。



PAT


MPEG-2 TS学习(一)MPEG-2 TS格式解析_第3张图片



PMT


MPEG-2 TS学习(一)MPEG-2 TS格式解析_第4张图片



PES


MPEG-2 TS学习(一)MPEG-2 TS格式解析_第5张图片





获取TS包中的音视频数据



    如果给定一个TS文件,怎么去寻找解码音视频解码数据呢? 每个TS包的前4个字节的包头里都有一个PID

        1、首先,一个个遍历TS包,我们找到PID为0的TS包,这个包叫PAT,这个PAT包里包含了PMT的PID号

        2、遍历TS包又可以找到名为PMT的TS包,PMT里有什么呢?PMT里包含了video TS包的PID和它的codec,audio TS包的PID和它的codec 。有了codec我们知道要选择什么解码器,有PID我们就可以获得解码数据。

        3、我们先来说说video数据和audio数据是怎么分散在TS包里的。video和audio其实都是以一种叫PES(Packetized Elementary Stream)的形式组织的。一帧视频就是一个PES包。我们都知道一个TS包只有188个字节,除掉包头还剩184个字节,这是不可能放下一帧的。
        4、实际上一个PES包是分配在连续的几个TS包中,所以如果我们要获得一帧数据,那么我们需要把连续的几个TS包里的数据全部取出来才能组合成一个PES。
        5、那我们怎么知道一个PES的开始和结尾呢?那我们还是一个个遍历每一个TS包,寻找包头里payload_unit_start_indicator为1包,这个标志位代表着是一个PES的开始,那么我从这开始,一直到下一个payload_unit_start_indicator为1,这中间的TS包组成起来就是一个PES。




TS包的解析流程




    解析TS流数据的流程:

        1、查找PID为0x0的包,解析PAT,PAT包中的program_map_PID表示PMT的PID;

        2、查找PMT,PMT包中的elementary_PID表示音视频包的PID,PMT包中的PCR_PID表示PCR的PID,
        3、有的时候PCR的PID跟音频或者视频的PID相同,说明PCR会融进音视频的包

        4、有的时候PCR是自己单独的包;

        5、CAT、NIT、SDT、EIT的PID分别为: 0x01、0x10、0x11、0x12。


你可能感兴趣的:(MPEG-2,TS)