本文主要是介绍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 0x48typedef 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
这篇关于TS码流解析-5-解析SDT表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!