机顶盒中demux的部分是相对复杂的部分,对于机顶盒软件开发的初学者来说通常在这里会遇到一些困难。 今天特意研究了一下驱动程序层代码,有点自己的理解,所以写下来并记录下学习过程。
机顶盒里的数据如何流动?
清流数据大致流向TS流--- tuner---demux---buffer---app
TS流中的数据为经过前一段编码、复用、调制后的数据,机顶盒通过tuner对TS流进行解调,demux解复用后将数据发送给buffer,最后机顶盒读取buffer
这个数据流是如何驱动的呢?
eg:广播节目:
软件在启动时创建许多任务。 其中之一是通过过滤不同的pSI、si表(例如pat/pmt ),循环地向demux请求PSISI表。 主要设定的参数是PID、data、mask。 由于demux的数据是从tuner发送的,所以在请求之前tuner需要锁定频率并进行解调。分析PMT表可以获取音频视频的pid,并将音频视频、PCR的pid发送给播放器进行播放。 当然,在播放过程中,您需要继续基于pid请求音频视频数据。
在demux中数据是如何过滤的?
demux的主要资源是插槽、过滤器和缓冲器
主要分为四个步骤:
1 .判断是否有空闲的过滤器,如果没有就直接退出。 每个数据请求需要占用一个过滤器。 例如,对PAT/PMT等表的请求通常必须始终占用过滤器。
2 .将APP中设置的PID设置在SLOT中,同时设置SLOT的数据输入端口、数据流类型等。 然后,基于该SLOT创建虚拟通道,并将SLOT、filter、buffer等联系起来。
slot.in=DMX_INPUT_PORT;
slot.pid=ReqPid;
slot.type=DMX_CH_TYPE_SECTION;
设置过滤器。 首先设定filter的buffer,然后将app设定的data、mask(datamask相与后面过滤数据)设定为filter,filter将过滤后的数据放入buffer。
4 .最后通过回调,将数据抛向APP层。