libdvbpsi 源代码学习(二)

本文介绍了在解析MPEG-2传输流(TS)时,如何处理section到packet的映射问题。通过分析libdvbpsi库的dvbpsi_PushPacket函数,解释了section可能对应一个packet、跨越多个packet或在一个packet中结束前一个section并开始新section的三种情况。理解这些对于正确解析PAT和PMT等关键表非常重要。
摘要由CSDN通过智能技术生成

        刚开始学习MPEG-2 TS流解析时,看ISO/IEC13818-1的文档上面的PAT,PMT表:program_association_section()和TS_program_map_section()时,很容易就以为可以直接从188字节的TS packet中取数据填到各个字段中,网上也可以搜到这样类似的程序:

    

        这样在解析PAT和PMT表时往往也能得到正确的答案,这是因为PAT,PMT表数据量比较小的缘故。其实在TS流中还有一个重要的概念——section。文档中program_association_section()和TS_program_map_section()指的就是PAT section和PMT section。它们中都有一个字段:section_length,文档告诉我们这个字段值的是此字段之后section的字节数,除了EIT section的最大字节数是4096外,其他section最大字节数是1024字节。 而TS packet最大只有188字节,因此这里需要考虑section到packet的映射问题,基本上存在三种情况:

1、section对应一个packet

2、section太长,在几个连续的packet中

3、在一个packet的负载中结束上一个section之后马上开始了一个新的section。

这三种情况可以在libdvbpsi源码的void dvbpsi_PushPacket(dvbpsi_handle h_dvbpsi, uint8_t* p_data)函数中找到。明白了这三种情况,再对照函数的注释,应该就不难看懂这个函数了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值