第四章 Teletext原理

来源:百度文库 编辑:神马文学网 时间:2024/04/30 02:52:52
欧洲采用的Teletext 标准叫做"ITU-R System BTeletext",标准文档是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,则本个datablock包含的是主页面代码和
子页面代码.如果不是0(1-24),则说明datablock是对应页的列数据(40个字节的ASCII),把这些数据解出保存到缓冲区.(这里必须和PID过滤一样,过滤主页面号码和子页面号码,即没有选择的页面忽略掉)
(5) 循环第(4)步直到所有的列数据全部解出.
(6) 把缓冲区中的24X40的数据显示出来.一般是在RAM中定义一个unsigned charTTX_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:取消马塞克功能,设置后生效.
以 上所描述的控制字符作用范围仅仅是一行.也就是说如果遇到新行,则设置全部恢复默认设置,EBUteletext的默认设置是:黑背景色,白前景色,无闪烁,无BOX,正常的象素大小,无任何马塞克功能.因此,teletext的显示程序必须一个字符一个字符的分析数据,直到所有的数据全部显示完毕.
实际上,EBUteletext使用了4个规格,包括V1.0,V1.5,V2.5,V3.5.V1.0只支持ASCII文本和基本属性,其他规格还支持简单图象和Objects,请参考EN300706获取更多的信息.
EBU teletext格式使用了汉明编码方法,具体编码格式请参考EN300706.
下面可以参考一下<>中处理teletext的效果:
(1) 菜单上的数字是主页面,下一级菜单是子页面:
(2)teletext文字叠加在Video上的透明显示效果:
(3)teletext文字叠加在Video上不透明的显示效果:
(4)切换到其他页面的显示效果: