1、大概流程api
一、cable tside
信号(signel)--》tuner--》demux-》video,audio解码编码-》输出显示编码
二、本地ts视频
file--》demux-》video,audio解码编码-》输出显示内存
若是有解扰逻辑,则须要在demux后对video,audio包解扰处理。资源
三、对cable ts 的录制即同步
信号(signel)--》tuner--》demux-》磁盘--》demux--》video,audio解码编码-》输出显示,即多了一个步骤,须要将解扰的流保存到磁盘中,若是须要播放磁盘中的文件,则将磁盘中的文件数据传给demux,也就是一个逆向过程。固然demux的处理牵涉到section,filter另作讨论。it
2、如下将分节讨论io
一、TUNER 调谐器容器
通常有有线cable,卫星satellite,地面territory 3种type。tuner工做须要知道频率freq,符号率symb,QAM大小,tuner获取到的信号signel有信号强度,误码率,质量,等级等,主要就是锁住某个须要的频点去获取信息(模拟信号-》数字信号)。通常问题就是锁不住频点,拿不到signel。
目前通常是STB 的tuner某一时刻只能处理一个频点信息,也许之后会启动同时处理多个频点或多个tuner的双xx模式或多xx模式。终端屏幕的愈来愈大,彻底是能够在一个屏上显示多个流的。
二、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过滤的数据经过回调或其余方式给上层,上层拿到想要的数据再实现具体的应用。
三、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获取的时间参考系。