TS码流解析-4-解析PMT表

本文详细介绍了如何解析TS流中的PMT表,通过PMT_PID列表获取节目信息,包括音频和视频的PID。内容涵盖PMT表的结构、解析流程、数据结构定义以及运行结果,旨在帮助读者深入理解解码流任务。
摘要由CSDN通过智能技术生成

任务四

根据解析PAT表的PMT_PID列表,获取所有的相关的PMT表,并且解析出包含的节目信息,主要是指音频和视频的pid。

相关知识

相信解码流解到这一步的人,对表的解析多多少少有一些了解,在这先放张PMT表的结构图,方便大家了解。PMT表示的是节目映射表的简称,可由PAT表查找到相应的PID,里面存储着音频、视频以及其他一些与节目相关的信息。解到这一步后,可以尝试着把音频视频的PID对应的ts_package找出来,并且另存一个文件,用播放器打开,可以看到对应的节目,会对解码流的任务有更深的理解,知道我们的目的是什么。
在这里插入图片描述
前八个字节就不用赘述了,descriptor对目前阶段来说,用处不大,也用不着管,知道它占多大空间就行了,我们要关注的字段有
program_info_length->后面描述子的总长度,stream_type前面的那个描述子
stream_type->媒体流的类型,判断是音频还是视频的重要标志
elementary_PID->媒体流类型对应的PID,可通过此PID找到对应的信息
ES_info_length->后续descriptor的长度

解析过程

这里的解析过程会比较麻烦,因为pmt的table有很多个,每解一个节目需要获取一遍table

1 流程图

在这里插入图片描述

2 数据结构定义

typedef struct stream_message
{
   
    unsigned int stream_type    :8;
    unsigned int elementary_pid :13;
    struct stream_message *next;
}STREAM_MESSAGE;

typedef struct pmt_info
{
   
    unsigned short program_number;
    STREAM_MESSAGE *stream_message;    
    struct pmt_info *next;
}PMT_INFO;

typedef int(*CHECK_TYPE)(STREAM_MESSAGE message_node);

3 解析代码

/*****************************************************************************
*   Function Name: check_stream_type_callback
*   Description  : according the condition then get the specify message
*   Parameters   : STREAM_MESSAGE message_node  
*   Returns : static int
*               -1      check error
*               other   check success 
*****************************************************************************/
static int check_stream_type_callback(STREAM_MESSAGE message_node)
{
   
    if (0x0b == message_node.stream_type)
    {
   
        return 3;
    }
    if (0x06 == message_node.stream_type)
    {
   
        return 2;
    }
    if ((0x03==message_node.stream_type
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值