机顶盒中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;
pid唯一地标识软件包数据,同一类型的软件包只有一个pid。 pid是demux的安装基础,如果不设定demux就无法实现过滤。
slot将此视为一个管理对象,能够管理PID、filter、buffer,一个slot对应一个PID,但能够对应一个filter。
设置过滤器。 首先设定filter的buffer,然后将app设定的data、mask(datamask相与后面过滤数据)设定为filter,filter将过滤后的数据放入buffer。
4 .最后通过回调,将数据抛向APP层。
转载于:https://www.cn blogs.com/thatsmytiger/p/6905121.html