您的位置 首页 新能源

机顶盒渠道的字幕数据格式剖析及其显现完成

本文通过对DVB 标准中的ETS 300 743 规范的字幕数据格式进行研究和分析,结合机顶盒平台的解复用滤波、图层处理和用户接口模块,给出一种能够正确、完整、及时的字幕显示实现方案。

1 导言

跟着数字电视的蓬勃开展,数字电视已逐步进入千家万户,除了传统的电视节目外,经过运用先进的数字电视技能为广阔用户供给更多的信息服务,是广播电视作业开展的必然趋势。字幕(subtitle)作为一种简洁而直观的信息供给途径,其重要性首要体现在两个方面。一是字幕可认为听力有妨碍的人供给另一个语音信息途径;二是字幕功用能够经过简略的后期制作(如多言语显现),合作电视节意图全球化推行供给快捷的渠道。DVB 作为全球运用最广泛的数字电视传输标准,也为多种言语的字幕供给了相应的标准,从而使字幕成为不同国家和地区电视节目沟通的杰出载体。

  2 DVB 数字电视字幕标准

2.1 字幕操控信息标准
操控信息的标准首要包括有用数据的加载和提取索引信息的寄存两个方面。DVB 中规则,字幕信息要以节意图私有数据包方法复用到节意图根本流中,与音视频数据加载方法相似。提取索引信息则是运用DVB 中的描绘符(descriptor)语法刺进到节目映射表(PMT)的私有数据段中。

流类型为0×06 的私有数据段,承载本节目私有数据提取的相关信息:私有数据包的PID 及其描绘符。字幕描绘符的标签值(descriptor_tag)为0×59,语法如下:
  
剖析字幕描绘子可得出该字幕的言语代码(ISO639_language_code)、字幕类型、组成页及可选的辅佐页。这些信息在字幕数据的提取中将作为数据提取的索引信息。

2.2 字幕数据编码标准

字幕显现在终端是以页的方法显现出来,每一页又分红多个区域,每一个区域里又相关着多个图形目标和区域的色彩。因而,字幕数据编码是依据这些需求来界说的。字幕数据承载在PES 包的负载中,结构如图1 所示。

图1 字幕数据的数据结构

  剖析字幕的数据结构可知,前两个字节是字幕数据的确认信息,包括一个数据界说字节(该字段界说该数据流为DVB 字幕,其值为0×20)和一个字节的字幕流辨认id(其值为0×00);最终一个字节为字幕数据完毕标志(其值为0×ff)。中心填充的数据则是字幕段数据。在字幕段数据中前6 个字节为字幕段的头信息,包括1 个同步字节(其值为0×0f)、1 个类型字节(用来确认data_field()里带着的是哪种类型的数据分段)、2 个字节的页ID (用来仅有标志一个字幕段)以及2 个字节的段长度标识(标识其后边带着负载的巨细)。

字幕段类型首要有以下四种:

页分段(page composition)。经过页id(page_id)界说了该页显现中止时刻、页的状况、该页中区域数、各区域号、各区域的水平及笔直方位。

区域分段(region composition)。用于界说该区域的宽高、水平笔直方位、所运用的CLUT 表的CLUT_id值、目标的id、区域背景色以及像素深度等信息。

CLUT 分段(CLUT definition)。用于界说色彩,以便把传输的虚色彩转换成实践色板中的色彩。
目标数据分段(object data)。用于界说目标的编码方法和编码数据。编码方法包括像素编码和字符编码。每一个目标能够看作是一个可显现的图画单元。

每一页数据的完好显现都至少需求这四个数据分段,所以在解析字幕流时,需求运用各种结构体及链表对这几个数据段数据进行解析并存储。

  3 机顶盒字幕解码显现体系规划

在STB 上完结字幕接纳和显现首要包括四大模块:数据提取模块、数据解码模块、图层显现模块和用户操控模块。各模块联系如图2 所示。

图中,用户操控模块用于响运用户按键,并发送音讯操控其它各模块;数据提取模块依据接纳操控模块发来的滤波发动、中止或提取字幕数据等操控音讯,并完结数据的提取作业;数据解码模块担任对数据提取模块送来的字幕原始数据进行解码,并将解码后的数据送到指定的缓冲区内供图层显现模块调用;图层显现模块用于完结字幕界面的各种OSD 显现操作。

图2 字幕体系模块联系图。

3.1 字幕数据提取模块

字幕数据提取模块包括两部分:字幕操控信息的提取和字幕数据包的提取。

用户操控模块发送字幕发动恳求时,提取模块就发动SI 引擎。首要,发动本节意图PMT 表滤波作业,获取PMT 数据并进行剖析。若当时节目没有字幕信息,则发送无字幕音讯至用户模块;若当时节目带有字幕信息,则依据PMT 中的私有数据段和字幕描绘符,获取字幕数据对应的PID、字幕的言语代码、字幕类型、组成页及可选的辅佐页,并寄存到字幕索引信息表中。其次,依据字幕索引信息表发动字幕有用数据的PES 滤波,提取对应字幕数据包。字幕数据提取整体流程如图3 所示。

图3 字幕数据提取流程

当取得字幕的PID 及其它信息后,则按字幕言语的不同,把当时节目所带着的一切言语的字幕列表,供用户挑选。当用户挑选完一个条目后,可运用该条目相应的操控信息获取字幕PES 包,把字幕PID,组成页id 和辅佐页id 注册进滤波通道,并发动滤波器。

此刻,若滤波器接纳到相匹配的数据,则会发生相应的中止,告诉上层进程读取数据;当获取一个完好的PES 包后,就传送给字幕解码器进行解码显现。

3.2 字幕数据解码模块

字幕数据解码模块担任对字幕PES 包进行解码。

字幕PES 包解码流程如图4 所示。

图4 字幕PES 包解析流程。

字幕解码首要是对PES 包进行剖析,包括PES包头的检测,PES 包头信息的提取和字幕段的剖析。

滤波得到一个PES 包后,首要判别包头是否合法,包括判别前四个字节是否为0×000001BD 和PES包长度是否合法。

PES 包头信息提取包括提取PTS、PES 包头长度等。PTS 是该分组中承载的所要显现的数据的显现时刻。依据包头长度能够定位到PES 的负载方位,从而剖析PES 包的负载。

剖析PES 包的负载,首要判别前两个字节(界说字节和字幕流id)是否分别为0×20、0×00.若都契合,则能够确认这个包便是所要的封装有字幕数据的PES 包。然后进入字幕段剖析,字幕字段的内容有四种状况。先找到同步头字节0×0f,再往后剖析8bit 的段类型(segment_type),经过判别该字节值来确认data_field()带着的是哪种类型的数据。当segment_type为0×10 时[3],该段为页分段;当segment_type 为0×11时,则该段为区域分段;当segment_byte 为0×12 时,该段为CLUT 分段;当segment_byte 为0×13 时,该段为目标数据分段。最终,依据不同的类型调用不同的函数对各种类型的分段进行下一步的剖析。

在页分段的解析中找到该页的页id、显现中止时刻、显现状况、该页由几个区域组成、每个区域的区域id 和每个区域的水平笔直坐标,并把这些数据存储起来。然后,依据从页分段中获取的区域的id 找到相应的区域分段,获取该区域的宽高、像素深度、该区域填充的色彩、色彩表id(CLUT_id)、区域的数据目标个数、每个数据目标编号(object_id),并存储这些数据。

最终,经过CLUT_id 找到色彩表,得到色彩的Y、Cr、Cb、T 值。经过object_id 找到目标数据的内容,包括编码方法及编码数据。用相应的解码方法把这些相关的编码数据解码出来,并放入缓冲区。其间,在页剖析时,当解分出的该页的显现中止时刻现已过了,则并不需求剖析该页,把跟与该页相关的数据缓冲区进行清空操作。

因为一个PES 包或许包括多个字幕段(subtitling_segment),因而有必要循环剖析到最终一个字幕段。对每个字幕段剖析完后,都要判别下一个字节是下一个字幕段的同步头(0×0f)仍是字幕数据完毕标志(0×ff)。若是下一个字幕段的同步头则持续剖析,若是数据完毕标志则代表该PES 包带着的负载剖析完毕。最终,把得到的数据寄存到显现缓冲区,经过剖析得到的PTS 创立一个守时时刻,当时刻到的时分从缓冲区中把数据读出,并调用OSD 层驱动显现数据。

在该解码中,关于组成页(composition_page_id)的处理分为两种,这是因为同一个PID 或许传送不同言语的字幕流,即言语不同的多个信息同享同一个PID流,所以在处理的时分能够把组成页设置为滤波器的深度。当一路数据流进来的时分,对契合该PID 的PES 包中对应的页ID 进行判别,与页ID 相同的就提取,不同的就丢掉,这是其间的一种解析提取方法。另一种方法是选用多种言语共用的PID 值去设置滤波器,把与该PID 值契合的字幕流提取出来,送去PES包解析。经过PES 解分出该页ID,这时再判别该页ID是否与在PMT 表解析得到的页ID 相同。假如相同的话,阐明正是要找的包,反之则阐明是一个无效的PES 包,则丢掉该包。

3.3 字幕图层显现模块

当用户在收看节目,发动字幕功用时,用户看到的是节目画面和字幕画面的叠加,OSD 界面显现技能是指在图画画面上叠加图文显现,使屏幕供给更多附加信息。

为了操控字幕在屏幕上的正常显现,需求运用OSD 驱动模块供给的区域操作功用。在该字幕显现完结中首要用到的OSD 函数接口有OSD 初始化函数、区域铲除函数、OSD 区域创立函数、OSD 区域显现函数和OSD 区域躲藏函数,在该体系中以回调函数的方法运用这些接口函数。在体系初始化中,有必要先初始化字幕OSD 区域,获取OSD 层的设备id,注册字幕区域创立回调函数、字幕区域显现回调函数、字幕清屏回调函数和字幕区域躲藏回调函数。把这些函数的地址加以保存,当需求相应的OSD 服务时,就经过函数指针调用相应的函数。

字幕显现能够依据剖析PES 包得到时刻信息,并经过这个时刻信息与音视频同步。在每区域数据解码完毕后,显现模块创立相关的OSD 区域,分配内存空间,把解析完的数据连同该数据要显现的时刻PTS 送到显现缓冲区。此刻,依据当时体系时钟STC 和存储的PTS 创立一个守时器,假如显现时刻现已超过了体系时刻,那么显现缓冲区的数据就要清空掉;反之,当显现时刻到的时分,守时器被触发,显现内容输出到OSD 缓冲区,并结合显现持续时刻来进行字幕的显现。显现状况流程如图5 所示。

图5 显现状况流程

因为字幕的显现和机顶盒菜单界面的显现都是依据区域的,关于不同的运用,不能一起往同一个方位填充不同的数据。因而,在字幕显现前要把菜单OSD 显现区域躲藏起来。当字幕正在显现又需求运用体系菜单时,调用字幕区域躲藏函数,设置显现标志为非需求显现状况。在菜单显现完毕后,调用字幕区域显现函数,康复字幕显现。选用这种方法能够处理字幕显现和界面显现的抵触。

3.4 字幕用户操控模块

操控模块是人机交流模块,首要担任用户恳求的处理。本模块的首要任务是将用户的恳求进行音讯分类,再依据不同的音讯与相关的模块进行通讯,音讯可分为以下几种:获取字幕操控信息音讯、发动及中止字幕数据滤波音讯、字幕数据解码及中止解码音讯、OSD 区域显现音讯、OSD 区域铲除音讯和OSD 区域躲藏音讯。

机顶盒体系软件中,字幕的创立经过遥控器上的字幕键(SUBT)触发,发送音讯发动数据操控信息提取模块,解析完毕后显现多言语字幕列表,供用户挑选所要接纳的言语(上下键挑选及OK 键触发)。用户一旦挑选后,发动字幕数据提取模块,进行字幕PES数据流的滤波和缓冲,一起发动显现模块,依据各种时刻进行显现或许清屏。字幕的封闭由遥控器上的退出(EXIT)键触发,从而操控中止滤波、中止数据解码,开释字幕功用创立的各内存空间,中止字幕显现。

在显现字幕的一起,进行界面菜单操作分红两种状况。一种是菜单操作进行了调台,用户操控模块发送音讯关掉字幕功用、中止滤波、开释字幕功用创立的各内存空间;另一种状况对错调台的其他菜单操作,当界面操作完毕后则发送字幕康复显现音讯给图层显现模块康复显现。

  4 完毕语

本文选用模块化的规划思路,依照功用将机顶盒字幕解码体系分为四个模块,即数据提取、数据解码、数据显现和用户操控模块。在各个模块的完结上依照中心件和驱动层两个方面进行程序规划,使得编写的代码便于了解阅览,一起又易于完结不同渠道间移植。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/xinnengyuan/198108.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部