数字电视应急信息广播系统发送端设计

2023-09-11 03:21:44潘明照贾大伟
西部广播电视 2023年13期
关键词:码流描述符码率

潘明照 贾大伟

(作者单位:平度市融媒体中心)

为了实现在突发公共事件中尽快发布群众所需信息,提升政府在处理突发性危机事件中的指挥调度能力,中国共产党的十七届六中全会就提出建立统一联动、安全可靠的国家应急广播体系,并致力于推动该体系的建设。随着数字电视技术、计算机技术在广播电视行业的普及和推广,利用数字电视广播业务发布应急信息成为应急广播体系建设的重要内容之一,引起相关领域专家与学者的广泛研究[1-2],如使用数字广播应急预警系统(DVB-EWS)等。进入数字时代,通过数字电视开展增值业务成为可能。

由于数字压缩技术的使用,数字电视可以在一个原模拟电视频道中播出6~8套高质量的标清电视节目(或者2套左右的高清电视节目),随着传输节目套数的增加,用户如何在众多电视节目中快速找到想要观看的电视节目就成为一个问题。为帮助用户了解相关的节目信息,DVB-C(有线数字视频广播)制定了相关的电子节目指南(Electrical Program Guide, EPG),即一种电视节目信息导航系统,我国也制定了相应的EPG标准[3]。通过EPG,用户可以了解待播或正在播出节目的相关信息,包括节目名称、时间、内容介绍等。EPG的播发需要在节目播出前端将符合数字视频广播(Digital Video Broadcasting, DVB)标准的业务信息(Service Information, SI)插入传送流(Transport Stream, TS)中。SI不仅携带了EPG所需的全部数据,还规定了一些可以由用户定义的结构。通过这些结构,就可以开发一些基于SI的增值业务。本文设计的应急信息广播系统就是一个基于SI的自定义结构开发的业务信息系统。

数字电视应急信息广播系统包括信息编辑、信息发送和信息接收三个部分。信息编辑指信息编辑工作站对各类应急信息进行编辑制作,并将编辑制作好的信息保存到数据库服务器中。信息发送是指信息播发服务器将编辑好的各种(应急)信息从数据库服务器中取出,并按照SI的自定义结构的要求进行打包,插入数字电视的播出码流中,经复用调制后送到数字发射机播出或者送入有线电视系统进行播出。信息接收是指数字电视机顶盒从解码后的TS流中取出相应的(应急)信息,在用户的电视机上进行显示、提醒。本文内容主要针对数字电视应急信息广播系统的信息发送端展开。

1 系统发送端的基本原理

发送端的任务是把需要播发的各种信息按顺序以一定的码率进行打包,然后发送出去。信息播发服务器能够定时查看数据库服务器要发送的信息,并将这些信息打包,借助码流播发卡输出,经异步串行接口(Asynchronous Serial Interface, ASI)智能切换器(冗余设计,防止某台信息播发服务器出现故障)后选择最优一路进入码流分配器,将打包的码流分配,然后送到要插入信息的复用器。各复用器从打包的码流中取出本复用器要插入的信息,与视音频节目等其他业务信息进行复用,形成复用的码流,进入加扰调制等后续处理部分。其基本原理如图1所示。

图1 数字电视应急信息广播系统发送端基本原理

进行发送端设计时,首先要确定需要发送的信息内容,明确这些信息在终端如何显示,并规划好这些信息是在全频点发送还是只在某些频点发送。确定了要发送的信息和所在的频点后,还需确定要发送的各类信息的码率。(有线)数字电视一般采用正交振幅调制(Quadrature Amplitude Modulation, QAM),分为16QAM、64QAM、256QAM等多种调制方式,数字越大,频带利用率越高,但抗干扰能力也随之降低。不同的QAM调制方式能够传输的码率是不同的,如64QAM的有效数据传输速率大约是38 Mb/s。除去音视频节目和其他业务占用的码率,剩余的才是可用于应急信息发布的码率。如果超过这个码率,就会出现丢包现象,造成音视频节目的卡顿。为不影响节目的正常播出,码率应小于该值,并留有一定余量。

确定好各类信息的码率,就可以进行打包播发了。打好包的数据的发送比较简单,使用无穷循环就可以实现连续不断地发送数据。但是,各类信息的播出码率是不同的,在打包各类信息时的数据量也是不一样的,因而打包过程比较复杂。

2 应急信息及其处理

2.1 应急信息的播发途径

应急信息既可以是文字形式也可以是图片形式,甚至可以是音频形式或视音频形式。本文设计的应急信息广播系统可以在数字电视显示终端上通过各种方式显示各种等级的应急信息。当应急信息等级较高时,可在显示画面的同时播出声音信号,甚至可以强制切换到应急频道进行信息播发。应急信息的播发途径分为以下几种:

(1)开机画面。这是机顶盒加电后显示的第一幅画面。在机顶盒加电启动过程中需要一定的时间,可以利用这段时间的开机画面进行应急信息的播发。

(2)EPG搭载。在显示主菜单、频道列表、频道导航条时,利用空余版面加载或叠加显示要播发的应急信息。此外,节目切换时一般会显示换台后节目的正播和待播信息,也可以同时加载要播发的应急信息。

(3)音量调整。利用调整音量时电视机上的音量显示的空余版面显示应急信息。

(4)游动字幕。这是应急信息播发最灵活、最有效的一种途径。比如在播发各类预警信息时,如果在每个频点都插入应急信息,则可以做到显示全覆盖,即所有收看电视节目的用户不论在收看什么节目都可以接收得到应急信息。

(5)基于特殊业务信息加载应急信息。比如利用天气预报显示界面加载应急信息,用户可通过遥控器按键,在查询天气预报的同时获取应急信息内容。

(6)其他途径。比如挂角信息发布,在数字电视终端画面的某角显示应急信息。

为了简单实用,将其做如下简化:

播发游动字幕时停止其他信息的播发。即游动字幕的播发具有较高的优先级,可用于重大应急信息的即时播发。此外,高级别的紧急信息可以强制在数字电视的所有节目中显示播出。而其他信息的更新播发只在每天的一个固定时间,比如每天晚上8点重新读取数据库服务器的记录,将查询更新后的记录重新打包播发。

由于这样的简化,系统需应对正在播发的信息中存在错误需要立即更新的情况。针对这种情况,编辑制作端将更正后的信息编辑好并存入数据库服务器后通知发送端,发送端接收到此信息后重新读取数据库服务器的记录,并重新打包播发。

2.2 应急信息的打包描述

信息的打包发布需要按照DVB-C的SI信息的标准,并最终打包成188字节的TS包。其中包含的信息图片、文字及与本信息相关的其他结构是其净负载。

在DVB-C中,所有的SI/节目特定信息(Program Specific Information, PSI)都以表的形式进行传输,表中包含了整个节目信息和业务信息,这些表在传输时,被封装在大小固定的被称为段(section)的数据块中。本系统的发送端采用私有段结构(见图2),即ISO/IEC 13818-1:2019规定的私有段结构中将section syntax indicator置为1时的结构[4],它包括段头(从table id到last section number)、私有数据(N privata data)和一个32位的循环冗余校验码(CRC32)。

图2 私有段结构示意图

除了封装要发布信息的私有段外,还有一种私有段表,称为描述符私有段表。本系统设计了缺省信息版本号描述符、天气预报描述符、取消描述符、游动字幕属性描述符等各种描述符。

每一个具体的信息基本上是以图片的形式进行发布的。在封装这种私有段时,需在段头后加入一个描述该图片的相关描述符,如图片类型描述符(这个描述符是必有的)、链接描述符(这个描述符是可选的)等。图片类型描述符能够描述该图片属于哪个类型的信息、图片本身的文件类型(如png、jpg、gif等)信息,以便接收端解码。在这些描述符之后是该图片的具体数据。

也就是说,系统发送端会将每一个信息封装成一个段或多个段。对每一个段都要计算其循环冗余校验码CRC32。

将各信息封装到段后,就可以进入TS打包环节。TS包的大小固定为188字节,TS层分为三个部分:TSHeader(TS包头)、Adaptation Field(调整字段)、Payload(负载)。其中,包头结构中的有效净荷单元开始指示为payload_unit_start_indicator,标志此TS包中带有SI数据分段的第一个字节,即这个包是一个段的起始包。

在循环播出时,虽然根据业务信息封装生成的段是不变的,但是在每次定时处理时根据段生成的TS包却是不同的,这是因为TS包中有连续计数(continuity_conunter)字段。为保证连续计数器的连续,需要在每次播发时将生成的TS包的continuity_conunter字段重新修改,以保证continuity_conunter字段的连续。

也就是说,打包有两个层次:第一个层次是先把净负载封装成多个段,第二个层次是将生成的段打包成一个个的TS包。

将所有的业务信息都打包成连续的TS包后,还需要生成一个具有一定时间间隔(如0.5 s)的总的数据包,按照各业务信息设定的发送速率,计算在这个时间间隔内各业务信息需要发送的TS包的数目,并按一定顺序将其插入缓冲区(TS Buffer)中,利用定时函数将此缓冲区的内容通过播发卡发送出去。

2.3 应急信息数据和辅助信息的读取加密及打包成段

制作完成的应急信息或者从上级部门传送过来的应急信息通过制作端上传到服务器的数据库中,发送端定时读取要播出的应急信息。

应急广播信息事关人民生命财产的安全,因此必须采取措施保证信息内容的真实性、完整性、权威性[5]。为保证应急信息的安全,需要对业务(应急)信息进行加密、数字签名等处理,实现应急广播消息和指令的安全。假定这些处理已经在编辑制作端完成,发送端负责这些已经完成处理的信息的发送。本系统应急信息的存取采用ADO编程方式。通过数据库,选出要播发的数据记录,对每一条这样的记录,通过其组ID找出其组ID此时对应的版本号gidvernum,并更新其下一个数据记录对应的版本号。再根据这条记录的包ID找到对应的连续记数(continuity_conunter)信息。有了这些信息就可以生成一个针对此记录的InfoGroupDataRecord对象。根据InfoGroupDataRecord中的一个类InfoContentSectionTable的指针对象pinfopicture,在类InfoContentSectionTable中封装各种与段生成相关的函数和信息,在makeupsections函数中将本数据记录的应急信息封装成段。

需注意正确设置最后一个段的大小。在生成段时,要设置段头信息。如果段表有描述符,则要首先封装描述符,描述符之后才是含有加密后的业务图片的信息结构数据。在每个段的最后计算其CRC32。生成段表之后就可以进行TS包的打包了。

2.4 打包信息的发送

以一定速率重复发送这些信息的基本方法是利用定时器。只需要注意发送的速率不要太高使得复用器的码率超载,定时器的精度倒不是特别重要。当然作为系统来说,应尽可能地让码率精确一些。对本文设计的系统来说,可以考虑使用多媒体定时器。即用timeSetEvent函数,该函数可以达到1 ms的分辨率。

本系统假定游动字幕形式的应急信息在一个固定的时间点(如每晚8∶00)进行播发(不太紧急的应急信息的播出,如天气灾害预报等),需在定时器的回调函数中设置一个变量m_loop,在每次调用时其值增加1,以此模拟回调函数调用的次数。通过监视这个变量,看是否到达预定的时间,到时间后即启动游动信息的播发。如果没有到达预定的时间,则回调函数更新将要播发的数据的continuity_conunter字段,并将此数据发至播发卡播出。

用比较m_loop的次数来判断是否到达定时时间,是因为定时间隔是一个常数(如0.5 s一次)。通过当前时间与下次定时时间的差就可以知道要循环多少次能够到达下次定时时间,该方式可能不太精确,但对于本文设计的系统来说是足够的,因为不太紧急的应急信息并不一定需要太精确的定时播出。

游动字幕的播出与其他应急信息的播出不同,它不需要一直循环播出,其在显示端的游动一般只需要两次即可。也就是说,发送端的一条游动字幕信息只需播发2~3次即可(多播发几次可以保证接收端软件能够完整收到此信息)。在所有游动字幕信息播发完成后就可以重新读取其他应急信息进行播发了。

2.5 紧急信息的播发

除上述应急信息的播发外,对某些紧急消息必须实现即时播发。这意味着对紧急信息需要立即响应。为此,在发送端和编辑制作端需使用网络编程。在编辑制作端将需要即时播发的信息编辑好后通知发送端,发送端接收到有紧急信息需要播出的消息后,停止当前信息的播发,转为播发此紧急信息。紧急信息既可以设定播出次数或到期时间,也可以设置为无穷(即一直播出)。若为一直播出,则需要通过制作端发送停止紧急信息播发的消息以停止此紧急信息的播发。

3 调试

调试是编程开发重要的一个方面,通过调试找出并改正编程错误是开发人员的一项基本技能。本系统需要通过网络传输,因此要注意字节序问题。字节序错误,就会产生错误的结果。所以,如果接收到的数据有问题,就要查看字节序是否存在问题。另外,系统对每一个段都要计算循环冗余校验码CRC32,在计算CRC32时需注意段长的计算问题。

除开发环境提供的调试手段外,程序开发人员还可以将打包数据写入文件进行分析,看数据是否正确及哪里出了问题。同时,还可以写出相应的解析程序,对打包的数据进行分析。解析程序既可以用于打包数据的测试,也可以直接用于接收端软件,或者使用接收端的解析软件对打包的数据进行解析,两者可互相验证。

然而,打包数据正确、接收解析正确也并不意味着所有都正常。在测试调试过程中发现,如果每个PID(Packet ID,包ID)只在有应急信息图片数据的时候才发送数据,反之不发送数据,则如果某个PID不存在应急信息数据,在刚没有数据时,接收到的码流中其他PID的码流也会出现错误,TS计数不连续,即会出现丢TS包的情况,一般每个PID会丢一个包。出现这种现象的原因没有得到解释,但估计很大程度上与复用器有关。所以让每个PID在没有数据时发送缺省的应急信息数据,以免引起丢包。以上是在播出码流中随时添加、删除应急信息时可能发生的情况,如果规定播发时不在播出的码流中添加、删除应急信息则不会存在上述问题。

4 结语

发送端软件是一个打包程序,它将打包的数据通过播发卡发送出去。这是一个循环播发的系统,应急信息播发完一遍后从头继续重新播发。发送端对定时精度要求并不严格,只需注意发送的速率不要超过其上限即可。如果某个频点的总码率超过了上限,则有可能引起该频点的节目出现马赛克的现象。一般说来,开机画面、节目指南附加信息等在主频点播发时使用的码率较大,所以电视系统在主频点的节目安排应该使其码流有较大的余量。

猜你喜欢
码流描述符码率
基于结构信息的异源遥感图像局部特征描述符研究
测绘学报(2022年12期)2022-02-13 09:13:01
分布式码流实时监控与录制系统的设计与实现
电视技术(2021年8期)2021-10-21 08:19:48
数字电视TS码流协议简要分析
视听(2021年8期)2021-08-12 10:53:42
基于状态机的视频码率自适应算法
计算机应用(2018年7期)2018-08-27 10:42:40
Linux单线程并发服务器探索
利用CNN的无人机遥感影像特征描述符学习
基于场景突变的码率控制算法
X264多线程下码率控制算法的优化
计算机工程(2015年8期)2015-07-03 12:19:56
多光谱图像压缩的联合码率分配—码率控制方法
宇航学报(2014年2期)2014-12-15 02:49:06
一种比较ASN.1码流差异的方法