其实一开始我把这里所说的表误认为是数据库中的表了,结果总是理解不来,的确我们用我们已有的理解去推断新鲜的事物确实很有帮助,但有时也会给你误导,引你走入岔路。
那么这里所说的表究竟是什么呢?
业务信息表SI,节目特定信息表PSI,这些表是确实存在的,只不过呢这些表放在传输流中会是另外一种形式而已。本质上都成为了二进制数,这些信息是以位而不是以字节来进行解读的,这就有了位操作的意义。
PSI,SI表的信息放在了TS包中的负载里。
寻找其本源就是:
基本流是什么东西呢?
音频基本流,视频基本流,服务信息基本流。
基本流,打包成为打包基本流,(打包就是加上包头,负载是从基本流中截取出来的),把打包基本流在打包一下,形成ts包,形成ts流。所以在ts流中很显然包含了许多信息,所以我们要把他们解析出来,我们回过头去看,这些信息在打包之前是什么样子,以及如何成为包的负载的。
PSI有四类表:
- PAT
节目关联表,在这张表中主要是节目号和对应的PID,但你不可能光秃秃的只有这两个信息啊,所以pat这个表上又多出了许多描述信息,当你读到这张表的内容的时候,你知道这张表就是pat表而不是其他表,当然了这张表有可能很大,或者为了提高容错性,所以把这张表分段处理,分成许多段,这些段再成为ts包的负载。
- CAT
- PMT
- NIT
既然已经知道了什么是表,那么我们就去看如何解表?
因为在ts的传输中,这些信息并非按着字节规规矩矩的传输的,而是在表中按着一定的位数传输的,而通过指针进行访问p[n]是没有办法访问到具体一位的,所以要进行位操作。
如何解表就是涉及到位操作运算。通过合理的位运算,把某几位数取出来放到单元中去,这就是所谓的解表。
SI表有9张