欧洲采用的Teletext 标准叫做"ITU-R System B Teletext",标准文档是EN300472和EN300706.该标准支持以下特性: (1) 24X40的文本字符显示,也支持简单的图象信息的显示. (2) 支持多页码,应用程序可以自由切换到任意选定的页. (3) 支持多语言,可以在teletext中指定所使用的语言. (4) 文本支持自定义背景色,自定义前景色.支持长度,宽度加倍(double width,double height) (5) 所有数据采用了奇偶校验和汉明码编码,具有比较强的错误处理功能. (6) 格式基本兼容模拟TTX,支持VBI插入teletext数据. Teletext数据是在TS流中和Video,Audio数据一起传送的.EN300472规定采用以下方法识别teletext数据的PID:如果 PMT段中的stream_type==0xbd(private_stream_1),那么这个数据流就是teletext或者subtitle数据 (统称为VBI数据,具体区分还需要在teletext分析中处理),VBI数据开始于PES包的数据部分. Teletext在PES包中的格式如下: 各字段含义: data_identifier:数据标志符,如果是teletext必须等于0x10~0x1f. data_unit_id:用来标志是teletext数据还是subtitle数据.0x02表示是teletext,0x03表示是subtitle. data_field()是标准的teletext格式的数据包,参考下图.实际上,一个data_field就是teletext的一行数据. data_field()的格式如下: 各字段含义如下: reserved_future_use:2bits保留未来使用 field_parity:1bit的奇偶标志,'1'表示是偶数场(下半场),'0'表示奇数场(上半场) line_offset:5bits,在VBI插入时指定的场线数据.(以上两个参数在使用VBI硬件插入才需要使用) framing_code:8bits的帧同步代码,必须是0xe4. magazine_and_packet_address:16bits,指定当前传送的杂志号码和包号码,采用的是汉明8/4编码. 其中的包号码(Packet address)实际上代表的是TTX页面的行号码(0-24). data_block:320bits,40Bytes的数据块,全部采用奇偶校验,对应TTX页面的40列,范围是0x00-0x7f(最高位是奇偶校验位).把这部分的数据全部提取出来,就可以获得一个行的全部数据(TTX是24行X40列). 因此,解teletext的软件一般采用这样的流程: (1) 分析PMT表,获取代表teletext的PID,标注为TTX_pid; (2) 在解复用程序中过滤PID==TTX_pid的数据,解出PES的数据部分. (3) 把第二步得到的数据部分全部保存到一个缓冲区,直到所有的数据全部缓冲完毕. (4) 解出packet address,该数据代表当前的行号(0-24).如果是0,则本个data block包含的是主页面代码和子页面代码.如果不是0(1-24),则说明data block是对应页的列数据(40个字节的ASCII),把这些数据解出保存到缓冲区.(这里必须和PID过滤一样,过滤主页面号码和子页面号码,即没有选择的页面忽略掉) (5) 循环第(4)步直到所有的列数据全部解出. (6) 把缓冲区中的24X40的数据显示出来.一般是在RAM中定义一个unsigned char TTX_DATA[24][40]数组保存. Teletext是如何支持自定义前景色和背景色等特性的呢?实际上非常简单,就包含在每一行数据的40个字节中.我们知道可显示ASCII的范围是0x20~0x7f,小于0x20的代码在teletext中做为控制字符(需要在显示程序中处理),具体规定如下: 0x00-0x07:设置前景色,颜色分别是黑,红,绿,黄,蓝,洋青,洋蓝,白(设置后生效,也就是说,显示程序遇到这些代码,在随后的显示中必须改变前景色到对应的颜色) 0x08:开始闪烁功能,设置后生效. 0x09:结束闪烁功能,设置后生效 0x0a:BOX结束,设置后生效. 0x0b:BOX开始,设置后生效. 0x0c:正常象素大小,设置后生效. 0x0d:宽度加倍,设置后生效. 0x0e:长度加倍,设置后生效. 0x0f:宽度和长度都加倍,设置后生效. 0x10-0x17:设置马塞克颜色,颜色代码同0x00-0x07,设置后生效. 0x18:以后固定是显示空,直到遇到其他颜色属性.设置后生效. 0x19-0x1b:请参考EN300706标准. 0x1c:设置黑背景色.设置后马上生效. 0x1d:设置新的背景色,下一个字符指定背景颜色,代码同0x0-0x07. 0x1e:保持马塞克功能,设置后生效. 0x1f:取消马塞克功能,设置后生效. 以上所描述的控制字符作用范围仅仅是一行.也就是说如果遇到新行,则设置全部恢复默认设置,EBU teletext的默认设置是:黑背景色,白前景色,无闪烁,无BOX,正常的象素大小,无任何马塞克功能.因此,teletext的显示程序必须一个字 符一个字符的分析数据,直到所有的数据全部显示完毕. 实际上,EBU teletext使用了4个规格,包括V1.0,V1.5,V2.5,V3.5.V1.0只支持ASCII文本和基本属性,其他规格还支持简单图象和Objects,请参考EN300706获取更多的信息. EBU teletext格式使用了汉明编码方法,具体编码格式请参考EN300706. 下面可以参考一下<<Seekfor MPEG-2 decoder>>中处理teletext的效果: (1) 菜单上的数字是主页面,下一级菜单是子页面: (2)teletext文字叠加在Video上的透明显示效果: (3)teletext文字叠加在Video上不透明的显示效果: (4)切换到其他页面的显示效果:
|