zoukankan      html  css  js  c++  java
  • 机顶盒demux的工作原理

    在机顶盒中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中主要的资源有slot、  filter和 buffer

    主要分为4个步骤:

    1. 判断是否有空闲的filter,没有的话就直接退出了。每一个数据请求需要占用一个filter,如PAT/PMT等表的请求,通常是需要一直占用filter的。

    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。

    3. 设置filter。首先设置filter的buffer,然后将app设置下来的data 、mask(data  mask相‘与’后来过滤数据)设置到filter中,filter将过滤后的数据放到buffer中。

    4. 最后通过回调,将数据抛向app层。

  • 相关阅读:
    Ros学习——Cmakelists.txt文件解读
    Ros学习——Movebase源码解读
    C++——STL之vector, list, deque容器对比与常用函数
    Ros学习——移动机器人Ros导航详解及源码解析
    C++——多线程
    C++——STL容器
    PHP对图片按照一定比例缩放并生成图片文件
    PHP二维数组排序
    PHP裁剪图片并上传完整demo
    [PHP] php实现文件下载
  • 原文地址:https://www.cnblogs.com/ThatsMyTiger/p/6905121.html
Copyright © 2011-2022 走看看