TS码流解析-5-解析SDT表

任务五

解析SDT表,解出相关的节目信息,主要是service_id和节目名字以及供应商的名字等

相关知识

SDT是服务描述表的简称,描述了业务内容及信息,连接了NIT、EIT和PMT(PSI),所谓业务也就是我们所理解的频道。
SDT:
PID = 0x0011
TABLE_ID = 0x42 (discribe actual TS,现行TS)
TABLE_ID = 0x46 (discribe not actual TS,非现行TS)
SDT表结构
在这里插入图片描述
在SDT表中,我们主要关注的是
service_id->节目的唯一标识号
descriptors_loop_length->当前service_id所有描述子的长度
除以上这两个外,我们还需要关注是什么描述子,在这个任务中,我们主要解析的是Service descriptor,下面是Service descriptor的结构图
在这里插入图片描述
描述子里面的所有内容,我们都需要去关注并且了解,找到对应的位置。当我们找到第一个Service descriptor后,后续的描述子就不用管了。

解析过程

我这里只是解析了TABLE_ID = 0x42的SDT表

1 流程图

在这里插入图片描述

2 数据结构的定义

#define SDT_PID                0x11
#define SDT_ACTUAL_TABLE_ID    0x42
#define SDT_SECTION_HEAD_LEN   11
#define SDT_CRC_LEN            4
#define SERVICE_DESCRIPTOR     0x48

typedef struct sdt_info
{
   
    unsigned short service_id;
    unsigned char service_type;
    char *service_provider_name;
    char *service_name;
    struct sdt_info *next;
}SDT_INFO;

3 相关代码

/*****************************************************************************
*   Function Name: add_sdt_info_to_link
*   Description  : add the sdt node to the sdt link
*   Parameters   : SDT_INFO *sdt_info_link_head  
*                  SDT_INFO node            
*   Returns : static SDT_INFO *
*               return the sdt_info_link_head node
*****************************************************************************/
static SDT_INFO *add_sdt_info_to_link(SDT_INFO *sdt_info_link_head, SDT_INFO node)
{
   
    SDT_INFO *new_sdt_info_node = NULL;

    new_sdt_info_node = (SDT_INFO*)malloc(sizeof(SDT_INFO));
    if (NULL == new_sdt_info_node)
    {
   
        log("malloc memory error!\n");
        return sdt_info_link_head;
    }

    new_sdt_info_node->service_id = node.service_id;
    new_sdt_info_node->service_type = node.service_type;
    new_sdt_info_node->service_name = node.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值