先介绍NIT,NIT描述如下:
有一点要注意,NIT是对大网的描述,即NIT并不是描述当前的流,而是描述大网的某些或者全部流。如下图,TS流描述1-6共对6个频点不同的TS流进行了描述,具体对哪一个流进行描述,使用“transport_stream_id”作为区分。所以对多个流进行描述时,要结合当前PAT->transport_stream_id做匹配,下图,当前transport_stream_id=0x200f,所以对应的描述为NIT->TS流描述2:
NIT协议如下:
支持的描述符如下:
LCN存在于NIT表中,描述符TAG=0x83,不过version2.0 好像TAG=0x87,并且语法结构也做了修改。
描述符基本结构如下:
logical_channel_desciptor
{
descriptor_tag //8bit , 0x83
descriptor_length // =8bit
for(i=;i<N;i++)
{ service_id //16bit 对应PMT的program_number visible_service_flag //1bit reserved //5bit logical_channel_number //10bit
}
}
不同版本的LCN差异体现在logical_channel_number比特位的不同,NORDIG-Unified_ver_2.1版本中LCD V1的描述子结构为:
logical_channel_desciptor {
descriptor_tag //8bit , 0x83
descriptor_length // =8bit
for(i=;i<N;i++)
{ service_id //16bit 对应PMT表的program_number visible_service_flag //1bit reserved //1bit logical_channel_number //14bit
}
}
当然,还有其他描述,此处不一一列举。以上两种TAG是一样的,都是0x83
下面看一张,带LCN的实例Svt_1.ts,这是一张NIT表,LCN就在transport_streams里,展开如下
找到transport_descriptors里的descriptor_tag==0x83 这个描述的就是LCN
把descriptor_data 数据放大:leng为32字节如下:
03 f2 c0 01 13 c4 c0 02 03 66 c0 62 11 a8 40 00 11 9e 40 00 11 c6 40 00 14 32 c0 63 03 70 c0 61
根据描述符的基本结构如下:一个LCN应该占4字节32bit
那么就根据结构来分析一下吧:这里的N==8
在分析之前,看看它的PAT表吧
根据PAT可以看出总共8个节目
1.
03 f2 c0 01
03 f2 c0 01
service_id //16bit 是 03 f2 这个不正好是上面的program_number=0x03f2吗
visible_service_flag//1bit 1
reserved //5bit
logical_channel_number//10bit LCN = 0x001
2.13 c4 c0 02
service_id //16bit 是 13 c4 这个不正好是上面的program_number=0x13c4吗
visible_service_flag//1bit 1
reserved //5bit
logical_channel_number//10bit LCN = 0x002
3.03 66 c0 62
service_id //16bit 是 03 66 这个不正好是上面的program_number=0x0366吗
visible_service_flag//1bit 1
reserved //5bit
logical_channel_number//10bit LCN = 0x062
4. 11 a8 40 00
service_id //16bit 是 11 a8 这个好像没有0x11a8这个台,所以LCN也没有,可能也正常吧
visible_service_flag//1bit 0 难道visible_service_flag 可以控制是否有台?
reserved //5bit
logical_channel_number//10bit LCN = 0x0
5. 11 9e 40 00
service_id //16bit 是 11 9e 这个好像没有0x11 9e这个台,所以LCN也没有,可能也正常吧
visible_service_flag//1bit 0
reserved //5bit
logical_channel_number//10bit LCN = 0x0
6.
11 c6 40 00
11 c6 40 00
service_id //16bit 是 11 c6 这个不正好是上面的program_number=0x11 c6吗
visible_service_flag//1bit 0 但是这个台RTK没有搜到
reserved //5bit
logical_channel_number//10bit LCN = 0x0
7.
14 32 c0 63
14 32 c0 63
service_id //16bit 是 14 32 这个不正好是上面的program_number=0x14 32吗
visible_service_flag//1bit 1
reserved //5bit
logical_channel_number//10bit LCN = 0x63
8.
03 70 c0 61
03 70 c0 61
service_id //16bit 是 03 70 这个不正好是上面的program_number=0x03 70吗
visible_service_flag//1bit 1
reserved //5bit
logical_channel_number//10bit LCN = 0x61
例如泰国的LCN,注意一下几点:
1、泰国LCN,original_network_id = 0x22fc,标识泰国运营商的流。
2、NIT descriptor_tag = 0x83,为LCN描述符,DVB标准。
3、LCN描述符中的service_id=program_number(PAT/PMT),以此对应LCN是与哪一个节目关联。
4、不是每个国家都要求LCN,但要求LCN的国家规则不一定相同
如符合“0x22fc”则为泰国运营商,LCN分布在1-800,否则分布为800+LCN
5、排序:LCN开关为“ON”,则按LCN排序,否则为“OFF”按program_number排序。
LCN的国家及频道表: