机顶盒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层。
机顶盒demux的工作原理的更多相关文章
- Tuner工作原理详解
1.TV自动搜台原理:https://wenku.baidu.com/view/3b771f8b84868762caaed514 2.彩电自动搜台的原理与维修:http://tv.baoxiu.c ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
随机推荐
- php安装错误 (node.c:1953:error) 解决办法
CentOs安装PHP在make时报错: root@---- [/opt/php-5.2.17]# make /bin/sh /opt/php-5.2.17/libtool --silent --pr ...
- Navicat for mysql远程连接数据库详解(1130错误解决方法)
用Navicat for mysql连接数据库测试下连接 如果出现1130错误 错误代码是1130,ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to ...
- iOS开发ReactiveCocoa学习笔记(三)
RAC常用用法: 1.监听按钮的点击事件: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame ...
- ios MBProgressHUD 使用,及二次封装
MBProgressHUD是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显示一个表示进度的loading视图和两个可选的文本提示的HUD窗口.MBProgressHUD 二次封装 ...
- springMvc 添加定时任务
1.创建定时类 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stere ...
- Oracle数据的导入导出
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份. exp命令可以把数据从数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到数据库服务器中. 执行环境D ...
- 有些其他程序设置为从 Outlook 下载并删除邮件。为防止发生此意外情况,我们将这些邮件放入一个特殊的 POP 文件夹中
最近使用FOXMAIL接收MSN邮件时,发现有一些邮件收取不到,进到WEB页面,页面下方提示“你的邮件位于 POP 文件夹中!有些其他程序设置为从 Outlook 下载并删除邮件.为防止发生此意外情况 ...
- Html+css实现带图标的控件
</pre><pre name="code" class="html"><!DOCTYPE html> <html l ...
- pta 编程题15 列出连通集
其它pta数据结构编程题请参见:pta 题目 题目要求分别以深度优先搜索和广度优先搜索输出图的连通集. 广度优先搜索要用到队列,先回顾一下循环队列: struct QNode { int* Data; ...
- eclipse Indigo搭建SSH框架详解
SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程. 第一步:准备工作. 下载好eclipse,Struts2,Spring,Hi ...