1、cable ts
信号(signel)--》tuner--》demux-》video,audio解码编码-》输出显示
2、本地ts
file--》demux-》video,audio解码编码-》输出显示
如果有解扰逻辑,则需要在demux后对video,audio包解扰处理。
3、对cable ts 的录制即
信号(signel)--》tuner--》demux-》磁盘--》demux--》video,audio解码编码-》输出显示,即多了一个步骤,需要将解扰的流保存到磁盘中,如果需要播放磁盘中的文件,则将磁盘中的文件数据传给demux,也就是一个逆向过程。当然demux的处理牵涉到section,filter另做讨论。
二、以下将分节讨论
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 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 编解码
一般来说解码后就可以输出output了。
目前常用的数据电视用到的制式有PAL,NTSC等
视频输出一般有CVBS,ypbpr,YUV,hdmi(高清用的多)等
视频输出一般用到视频层,静态层(still,IFRAME一般用到)
输出节目长度宽度比国内一般有4/3,16/9
常用支持的视频有:MPEG1,2,4;H264等
常用支持的音频有:MPEG1,2,ADTS,AC3,DTS等
一般对音视频会分配专门的固定的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获取的时间参考系。