TS的接收,解码,播放 流程:

流程:

1.cable ts

信号(signel)--》tuner--》demux-》video,audio解码编码-》输出显示

2.本地ts

file--》demux-》video,audio解码编码-》输出显示

如果有解扰逻辑,则需要在demux后对video,audio包解扰处理。

1.TUNER 调谐器

一般有有线cable,卫星satellite,地面territory 3种type

tuner工作需要知道频率freq,符号率symb,QAM大小,tuner获取到的信号signel有信号强度,误码率,质量,等级等,主要就是锁住某个需要的频点去获取信息(模拟信号-》数字信号)。一般问题就是锁不住频点,拿不到signel。

目前一般是STB 的tuner某一时刻只能处理一个频点信息,也许以后会启动同时处理多个频点或多个tuner的双xx模式或多xx模式。终端屏幕的越来越大,完全是可以在一个屏上显示多个流的。

 

2.Demux

终端主要是解复用,也就是解析自己想要的数据,并分类的处理。这块需要专业的MPEG/DVB相关协议知识,主要是PSI/SI。

一般牵涉到的概念有filter,channel,section,pid等,一般来说一个Channel对应一个PID,对应多个Filter。

首现要知道频点,需要tuner到某个频点上去锁频,将模拟数据转换为数字信号。

然后数字信号会送到Demux解复用,这一坨数据很多,你需要通过一定的规则去获取你想要的数据。

       filter过滤用,就是tuner拿到的数据有很多,但只需要将你想要的数据过滤出来。怎么过滤?一般我们要知道我们想要的数据在哪个PID,对应的段数据可能还需要再细分类,那你还需要将section前几个字节(byte)传下去,让demux只过滤出PID下同时匹配section前几个字节数据对应的包数据。比如。。。xx xx xx 01(PID)xx 02 03 04 05 06 07 xx 。。。当前频点拿到的数据很多,但我只需要PID为0x, section前3个字节为02.03.04的表的数据,首先filter会过滤出pid为0x01的所有的数据,然后在这些数据中过滤出前3个字节为02 03 04 的那些数据。再细化分类的话拿到这些数据你就要按SI/PSI协议或你自己私有的协议来了。

     channe通道l我们可以认为是一个容器,或再简单点就认为它是一块内存。这块容器就是用来装我们filter出来的数据的,所以一般channel是挂在filter上的。一个filter可以有多个channels,或一个channel有多个filter,具体要看平台实现需要。

     当然由于硬件特性,signel环境,参数情况,可能获取不到我们想要的数据,不可能一直让filter,channel一直去那那个不存在或有问题的数据的,就需要有一个超时机制:在这个时间段无法拿到数据,通知上层,demux拿不到你想要的数据,你改干嘛干嘛去吧。同时demux释放filter,channel等相关资源。

 demux处理后,filter过滤的数据通过回调或其他方式给上层,上层拿到想要的数据再实现具体的应用。

 

3.video,audio 编解码

一般对音视频会分配专门的固定的filter,channel。要播放某个节目,必须通过SI/PSI获取到,freq,vpid,apid,pcrpid等。

播放音视频就是让tuner锁对应freq的频点,demux去过滤出vpid,apid的数据包。其中通过pcrpid可以获取一个时间参考系。vpid拿到视频包,其中有I,P,B帧;

apid拿到音频包,其中有I,P,B帧。音视频同步就是通过I,P,B帧的PTS去同步pcrpid获取的时间参考系。

猜你喜欢

转载自blog.csdn.net/datamining2005/article/details/80526138
今日推荐