我对此并不陌生,如果使用任何不正确的缩写,我感到抱歉。我正在尝试使用C ++从mpegts文件解析SDT表。流包含9个程序(频道)。这是我正在采取的步骤:
- 从文件获取188字节缓冲区
- 检查标题并通过PID = 0x0011识别SDT表
- 解析SI标头和表内容
- 遍历描述符并获取有关服务的信息(FreeCa,提供者名称,服务名称...)
但是在执行这些步骤时,当我到达数据包的末尾(188字节数据包的最后一个字节)时,并不是所有服务信息都包含在其中。只有7个频道信息可用。似乎已分裂。
在首先确定RecyclerView
之后,其后是另一个带有标头SDT table
和SDT 188 byte packet
的{{1}}。因为PID = 0x0011
是payload-flag = 0
,所以我无法解析内容,但是在调试器中,它向我显示了其余的服务信息在缓冲区中可用(我用其余的服务名称识别了它),但是不知道如何解析,并且{文件{1}}的sdt表的重复在ts文件中是相同的。
我使用this MPEG-TS parser/analyzer代码来解析传输流。
我的主要问题是,当一个188字节的数据包无法容纳所有服务信息时,该如何收集所有信息?
我在payload-flag
软件中扫描了此0
,它显示了所有服务信息。
非常感谢有关mpegts SI数据流的一些很好的文档。