周沫 汪波 江苏省广播电视总台发射传输台
江苏省地面数字播出网按省域单频网、市域单频网、全省各县多频网的组合方式建设,播出中央、省、市、县节目。信号前端系统分省前端、各地市前端、各县前端三级结构,各前端按IP方式进行分级复用。与传统的ASI复用方案相比,全网IP架构结构清晰、集成度高、信号调度快捷。
施工过程需要对前端编码器、复用器、交换机、单频网适配器、发射机输入端等各节点进行码流分析比较,确定信号完好、定位故障节点。但在实际工程中发现常用的码流分析系统,功能都不够完善,如TS-Reader能实现码率监控、节目列表扫描,但是不能实现AVS+/DRA的节目解码;TeleSight能实现AVS+的节目解码,但不能实现码流的自动探测。未发现一款码流分析系统,能实现地面数字电视信号调试必须的SIP包分析功能。因此,需要一套码流分析系统,既有便携性,又具备地面数字电视系统需要的码流分析和调试功能。
按照实际工程需要,本项目开发的码流探测分析系统,至少具备以下基本功能:
(1)TS流自动探测:不需要手动填写目的地址、源地址、组播地址等信息,能自动获取所有传入数据包并筛选出TS流,详细显示流列表。
(2)TS流手动探测:具备组播组加入申请功能。
(3)码率监控和报警:监测TS流总码率及所有PID的传输码率,显示所有PSI/SI信息。
(4)节目列表扫描:不论是SPTS还是MPTS,都能实现节目扫描。
(5)TR101-290错误检查:支持实时监测错误信息。
(6)TSoIP流错误检查:具备基本的IP层错误检查功能。
(7)AVS+/DRA节目解码预览:支持AVS/AVS+/H.264视频解码,DRA/MP2/AAC等音频解码,可根据读取的节目表选择节目,也可以指定PID解码视音频。
(8)单频网SIP包分析:地面数字电视单频网信号中SIP包信息的检查和分析。
系统使用Microsoft Visual Studio开发工具以C#编写,窗体部分使用Windows Forms设计,共两个应用窗体界面: 码流探测、码率监控、节目信息显示、错误记录、节目解码预览在一个界面,SIP分析在另一个界面。
工程施工过程中发现,码流分析系统需要具备自动探测功能,一是为了方便操作,不需要每个节目手动扫描,二是实现查看某端口的所有节目,确保节目没有变多或遗漏。但是常见的TS码流分析系统在TS组播码流获取时,需要手动输入组播地址,并不能实现自动探测的功能。本系统根据使用需求,支持自动探测所有传入组播流,同时也支持手动输入组播地址加入组播组。码流探测界面如图1所示。
图1 码流探测界面
自动探测功能(节目左下角):用户选择绑定本机某个网卡即可探测所有传入的TS流,包括推送的组播流。主动加入组播组功能:也可通过自行添加组播地址加入组播组以获得组播码流。界面中每一行均为一个获取的TS流信息,左边为数据包源地址、端口,右边为目的地址、端口。
TS流是基于Packet的位流格式,每个包是188个字节(或204个字节,在188个字节后加上了16字节的CRC校验数据,其他格式一样)。一个TS包的格式见图2。
图2 TS包格式
具体实现搜索TS流的方法为建立.net中socket对象绑定指定的本地地址并探测传入的所有数据。根据上述TS流特征过滤收到的数据包中的TS流并将基本信息显示在界面中。部分代码见图3。
图3 TS流绑定代码
在探测界面中选择某个TS流并点击开始分析后,软件将对该TS流进行详细分析、监控。本程序中设计一个TS_Deal类来完成所有TS码流信息的监测、分析功能。该类的实例绑定一个TS流后,便会持续收取码流,在TS_Deal实例中,每隔一定时间对已获取的所有数据包进行分析,内容包括:(1)分析TS包头:根据上一节TS_header的结构,解析每个TS包的包头,解析后即得到该TS包对应的PID、同步字节、包递增计数器、加密标志等信息。
(2)计算总码率:在一定时间后计算缓存中的TS包个数,算得总码率。
(3)统计PID信息:每个PID码率与计算总码率类似,每隔一定时间计算每个PID包个数,从而得到每个PID码率,核心代码如图4。
最后,将上文所述的计算总码率和每个PID码率信息实时展示到窗口界面。
图4 PID统计代码
解析SDT、PAT、CAT、PMT表并分析错误信息,通过PID判断表类型,根据每个表结构进行解析。首先解析PAT表,获取码流中所有节目列表,PAT表结构如图5所示。图5中,程序在解析到N环部分的时候,会读取并保存节目列表及其PID。PAT表列出了TS流中所有的节目列表,以及节目对应的PID值,这个PID值表征的是该节目对应的PMT表的PID值。
图5 PAT表结构
PMT提供一路节目包含的所有原始码流的PID映射表,程序在读取N环的时候会读取该节目所有的码流列表及其PID,解析的时候可以根据PID来分离。节目时钟参考PCR的PID和视频的PID是相等的。由PAT得出所有的节目列表,根据一个节目筛选出等于该节目PID的TS包,就可以得到该节目的所有码流的PID映射表。最后,通过SDT表的解析获得所有节目的节目名称、服务名称等信息。
以PAT表为例,解析代码如图6所示。
最后,将PAT、PMT、SDT表解析后将节目信息整理并通过界面右侧treeview显示出来。
图6 PAT表结构解析代码
根据上文获取节目列表后提供节目选择界面,将对应节目视音频PID的TS包发送给解码模块并将视音频解码展示在界面中,也支持指定PID进行指定格式的音频或视频解码。
错误变量使用TR101_Status结构体定义,记录错误状态及错误发生的次数,在使用中需检测的错误内容见图7。
图7 TR101-290错误分析代码
根据TR101-290,在上文搜索SDT、PAT、PMT等表时分析码流中的错误信息,错误解析后,将错误内容和错误个数展示在界面下方,当发生错误时对应项目显示为红色以及错误个数,软件中提供了6个一级错误及传输错误、CAT错误,两个二级错误的检测。在IP传输层面,按照IP包的时间间隔计数并做统计报警。
以连续计数错误代码举例见图8。
图8 连续计数错误分析代码
图9 SIP包分析模块
为了地面数字电视单频网测试需要,加入了单频网 SIP包分析模块,功能界面如图9所示。
图10 SIP表结构
在地面数字电视单频网中,适配器每1秒钟向输入的TS码流中插入1个SIP,插入时刻与GPS的1pps对齐,SIP包的格式与MPEG2-TS包格式相同,由4字节的包头和184字节的数据字段组成,SIP表结构见图10。
程序对其中SI_SIP中包含的信息进行解析,展现在界面中,并将每个参数错误记录次数展现在参数右侧,方便工程中进行阐述核对和分析。
同时程序中实时统计SIP包间隔并计算SIP偏差,由于网络传输中可能有误差,程序提供SIP累计偏差调整统计精度。计算部分代码见图11。
最后在界面中展示每次SIP间隔、偏差和累计偏差并以图表形式展现间隔分布。
该系统是在江苏省地面数字电视施工阶段,按照实际需求进行的研发,并进行了多次修改,操作简便、功能完善。应用该系统,技术人员能快速测试到所有传入的TS流、监测所有PID的传输速率、实时显示TR101-290错误信息,并能提供声音、画面实时播放功能。对于单频网信号,能进行SIP包的检测和分析。在快速定位信号故障节点方面,系统得到了广泛应用,极大地提高了施工的效率。
图11 SIP分析代码