CAT表中EMM PID 和 PMT表中ECM 的解析

智能电视开发入门系列(一):机顶盒系统架构与技术精解 数字视频变换盒(英语:Set Top Box,简称STB),通常称作机顶盒或机上盒,是一个连接电视机与外部信号源的设备;它可以将压缩的数字信号转成电视内容,并在电视机上显示出来;信号可以来自有线电缆、卫星天线、宽带网络以及地面广播。机顶盒接收的内容除了模拟电视可以提供的图像、声音之外,更在于能够接收数据内容,包括电子节目指南、因特网网页、字幕等等;使用户能在现有电视机上观... 阅读详情

转载自:https://blog.youkuaiyun.com/kehyuanyu/article/details/22402497

直播中播放加扰节目时,常常启动播放流程(申请设备链,tuner,demux,audio decoder ,video decoder)之后,通常画面还是不能出来的。此时需要我设置当前节目的EMM PID,ECM PID到CA里面。解扰的大致流程是,第三方CA收到EMM PID之后,利用智能卡中的中固化的PDK(中间件层密钥)从EMM中解出 业务密钥SK ,然后在利用业务密钥从解出对应的ECM PID中解出对应的控制字CW ,最后将得到的控制字设置到解码芯片相应的寄存器即可完整解扰。

另外需要普及一下,ECM 控制加扰的信息可以是节目级别,也可以是流级别,也就是program level 或者是es level 级别,es 流可以是音频的,视频的,或者其他类型,也就是说可以整体加扰控制,也可以分开控制一个节目音频,视频等等。

借用网上剪辑的图加以说明:

                                       

对于CA厂商来说,通常只会提供几个接口给STB厂商来设置EMM PID ,CA system ID, ECM PID ,Service ID,当然这些参数也会根据大厂商定制化的需要发生一些变动。

EMM ,ECM ,CA system ID数据的来源

EMM ,ECM ,CA system ID 存在于CAT,PMT两个表中,这两个表一般都是通过设置filter向驱动请求CAT 表和对应PMT表,有个相同点是,这些信息都存在于CA_descriptor() 的描述字段中。

ca 描述字段的结构如下:

                                                  

解析的代码如下:

BOOL ca_descriptor_parse(BYTE* buf , int nlength,int *pnCAsysID ,int *pnEcmpid)
{
        int ndescriptor = 0;
        int ndes_length = 0;
        int nCASystemID = 0;
        int nelementPID = 0;
        BYTE *pByte     = NULL;
        
        if(buf == NULL || nlength <=  0)
        {
            printf("param error!\n");
            return FALSE;
        }
        
        pByte = buf;
        while(nlength > 0)
        {
            ndescriptor = pByte[0];
            ndes_length = pByte[1];
            if(ndescriptor == 0x09)
            {
                nCASystemID = (pByte[3]<<8 | pByte[4]);
            //  nelementPID = ((pByte[5]&0x1f)<<8 | pByte[6]);
                nelementPID = (pByte[5]<<8 | pByte[6]) & 0x1fff ;
            }
            *pnCAsysID = nCASystemID;
            *pnEcmpid = nelementPID;
            nlength -= ndes_length;
            printf("CA system ID : %d ,ECM/EMM PID : %d",nCASystemID ,nelementPID);
        }
        return TRUE;
}


CA_system_ID :表示适用于相关ECM和EMM流的相关的CA系统类型(CA厂家标识符)。

CA_PID : PMT表中的该描述信息为ECM的PID,CAT 表中的该描述信息为EMM的PID。

ca_descriptor描述符的值是0x09,也即descriptor_tag 的值,如图:

CAT:

                      

PMT:

                        

ECM 的解析

                                                                                

结合上面两张图来看,解析代码如下:

BOOL ECMParse(BYTE* pBuf , int nLen )
{
    int nTableID     = 0;
    int nSectionLen = 0;
    int nServiceID    = 0;
    int nProgramLen = 0;
    if(pBuf == NULL || nLen < 12 || nLen > 4096)
    {
        printf("param error!\n");
        return FALSE;
    }
    
    nTableID = pBuf[0];
    if(nTableID != 0x02)
    {
        printf("The Table is not PMT table!\n");
        return FALSE;
    }
    
    nSectionLen = ((pBuf[1]&0x0f) << 8 )| pBuf[2];
//    nSectionLen = ((pBuf[1]<< 8 )| pBuf[2])& 0x0fff;
 
    if(nLen != nSectionLen + 3 )
    {
        printf("section error!\n");
        return FALSE;
    }
    
    nServiceID  = (pBuf[3] << 8) | pBuf[4];// program number
    
    pBuf         = pBuf + 10 // move pointer to the second reserved field
    nLen        = nLen - 10;
    
    
    nProgramLen = ((pBuf[0]&0x0f) << 8 |pBuf[1]);// get the program info length 
    if(nProgramLen + 7 >= nSectionLen)
    {
        printf("Bad Data!\n");
        return FALSE;
    }
    
    pBuf        = pBuf    + nProgramLen;// move the pointer to the CA descriptor field
    nLen        = nLen    - nProgramLen;
    
    // TS level ecm parse
    int nTSCasysID = 0;
    int nTSEcmPID = 0;
    int noffest =  //the offest to the global ca_descriptor field
    ca_descriptor_parse(pBuf+noffest , nLen-noffest ,&nTSCasysID , &nTSEcmPID);
        
    //program level ecm parse 
    while(nLen >5) // make sure the ca_descriptor have data
    {
        int eStreamType = 0;
        int nEsPid         = 0;
        int nESInfoLen    = 0;
        int nLength        = 0;
        int nCAsysID    = 0;
        int nEcmPid        = 0;
        
        eStreamType = pBuf[0];
        nEsPid        = ((pBuf[1]&0x1f << 8) | pBuf[2]); // es stream pid ,audio pid ,video pid and so on
        nLength        = (((pcData[3] & 0x0F) << 8) | pcData[4]);
        
        if(wDiscriptorLen > nLen -5)
        {
            printf("data error!\n");
            return FALSE;
        }
        
        pBuf        = pBuf + 5; // move the pointer to the ca_descriptor field
        nLen        = nLen - 5;
        
        ca_descriptor_parse(pBuf,nLen,&nCAsysID,&nEcmPid);        
        
    }
    return TRUE;
}

CAT表中的EMM解析比较简单就不作解释了。


以上解析动作尽量不要在播放过程中去请求,会消耗一定的时间,如果在播放之前解析好缓存起来,对直播速度会有一定的优化作用。


--------------------- 
作者:Tony_ke 
来源:优快云 
原文:https://blog.youkuaiyun.com/kehyuanyu/article/details/22402497 
版权声明:本文为博主原创文章,转载请附上博文链接!

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析 本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。 阅读详情

相关推荐

PADS安装教程(超详细)

声明:个人实践 一、工具准备 pads9.5完整破解版百度网盘提取码【wjx9】 链接:https://pan.baidu.com/s/1pIP6BJO435ssmF7Hjwyz8A 提取码:wjx9 安装环境:win10 64位 二、开始解压安装 关闭杀毒,exe以管理员身份运行 点击【skip】,不然又得licese 点击【agree】 点击【modify】 设置安装的工具、路径及工程路径 设置完成后,开始【install】 在之后注册。 将Crack复制到PADS安装目录

qq_42057393的博客 5万+

CA_PID描述在的表示 CAT(EMM_PID)与PMT (ECM_PID)

节目流有条件接收系统相关的两个数据流是:授权控制信息(Entitle Control Message)和授权管理信息(Entitle Manage Message)。由SK加密算是后的CW在ECM中传送,ECM中还包括节目来源、时间、内容分类和节目价格等信息。对CW加密的SK在EMM中传送,SK在传送前要经过用户个人分配密钥(Personal Distribute Key)的加密处理,EMM中还包

kuikuitage的博客 2053

visual studio 2017编译Triangle库遇到的问题和解决办法

这段时间因为一个项目需要使用到Triangle这个三角剖分工具,需要在windows环境下进行对源码编译,中间踩了很多坑,特此记录下。 1、下载 下载链接是下边这个,需要翻墙 http://www.cs.cmu.edu/~quake/triangle.html 2、编译。。超。。。级。。。麻。。。烦。。。 在ubutu下安装一切顺利,完全没遇到什么麻烦,但是换到windows下就麻烦不断...

csubai07的博客 2438

cat /proc/pid/statm

cat /proc/pid/statmpid 为进程号输出解释第一列 size:任务虚拟地址空间大小第二列 Resident:正在使用的物理内存大小第三列 Shared:共享页数第四列 Trs:程序所拥有的可执行虚拟内存大小第五列 Lrs:被映像倒任务的虚拟内存空间的库的大小第六列 Drs:程序数据段和用户态的栈的大小第七列 dt:脏页数量

Jayson 博客 3738

Keil-C51 与 Keil -ARM 共存的方法

本篇为《嵌入式相关》系列博客的第五篇,该系列博客主要记录单片机开发及硬件设计的相关过程,方便以后查阅。 Keil-C51 与 Keil -ARM 共存的方法状况解决方案1测试解决方案2 状况 今天装完Keil-C51,然后又换装了Keil-ARM之后,可以正常编译STM32 的工程,但是无法编译C51的工程,并且出现了如下错误: *** Error: Project ‘template’ requires ‘C51’ Toolchain which is not installe 这种情况就是Keil-

梁小憨憨的博客 1万+

NVIDIA Jetson Xavier NX刷机教程

NVIDIA Jetson Xavier NX刷机教程,分别安装OS和SDK的经验分享

qq_68271367的博客 6957

Linux中查看进程占用内存的情况

概念: 虚拟内存(Virtual Memory): 首先需要强调的是虚拟内存不同于物理内存,虽然两者都包含内存字眼但是它们属于两个不同层面的概念。进程占用虚拟内存空间大并非意味着程序的物理内存也一定占用很大。 虚拟内存是操作系统内核为了对进程地址空间进行管理(process address space management)而精心设计的一个逻辑意义上的内存空间概念。我们程序中的指针其实都是这个虚拟内存空间中的地址。比如我们在写完一段C++程序之后都需要采用g++进行编译,这时候编译器采用的地址其实就是

hello_java_lcl的博客 2888

Python爬虫模拟登录京东并抓取商品数据

京东是一个拥有海量商品数据的电子商务平台。作为爬虫开发者,能够抓取这些数据将为我们提供很多机会进行数据分析、价格预测、市场调研等工作。然而,京东的反爬虫机制非常强大,包括但不限于验证码、动态加载页面、IP封禁等。因此,想要通过Python爬虫抓取京东的数据并不容易。在本文中,我们将从分析京东的登录机制开始,逐步介绍如何使用Python中的各种工具,如。

2201_76125261的博客 1827

查找EMM和ECM

CA_system_ID:表示适用于相关ECM和EMM流的相关的CA系统类型(CA厂家标识符). CA_PID:PMT表中的该描述信息为ECM的PID,CAT表中的该描述信息为EMM的PID. 一般来说,ecmtableid为0x80/0x81,emmtableid为0x82~0x8F这个值是由ca厂家决定的。 ca_descriptor描述字值为0x09,下面给

rell336的专栏 1908

【第一章】核心思维:那个在此刻“消失”的 CPU

摘要:RTOS本质是"有状态的抢占"而非"多任务",单核MCU通过时间片分时复用实现任务切换。裸机编程的线性思维在RTOS中不再适用,开发者需接受代码随时被打断的现实。RTOS通过保存/恢复CPU寄存器组(上下文)实现任务切换,每个任务拥有独立栈空间。非原子操作(如全局变量自增)会导致竞态条件,必须使用临界区或互斥锁保护。RTOS编程需要建立并发思维,关注代码原子性、可重入性和栈空间分配。

一路往蓝-Anbo 的博客 103

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

CAS解扰小结

1、每个ts数据包由:1、包头 2、包数据   包头有个字段 PID ,该字段指示包数据的类型。比如说:   PID 为 0x0000 包数据的类型就是 PAT表   PID 为 0x0001 包数据的类型就是 CAT表 2、PAT表定义了当前TS流中所有的节目,其PID为0x0000,要查寻找节目必须从PAT表开始查找。也就是说每个频点有且只有一个PAT表 3、当包数据为PAT表时...

diereng5160的博客 309

CT探测器普遍采用“星形拓扑+多ADC模组”架构的TDC(时间数字转换器)设计方案

本文提出一种基于TDC反馈机制的CT探测器时钟同步方法,通过延时测量、偏差计算和动态补偿三步硬件流水线,实现高精度同步。系统采用Xilinx Kintex UltraScale FPGA内置CARRY8进位链构建3.5ps分辨率的TDC,结合多级比较器和延迟单元,形成闭环反馈控制。实验表明,在512通道、1.28m传输距离下,同步精度稳定在10ps以内,较传统方案提升两个数量级,并能动态补偿干扰抖动。该方案解决了传统方法在CT旋转腔体环境下精度不足的问题,为下一代超高清CT提供了有效的时钟同步解决方案。

whm128的博客 274

机顶盒加密系统流程 ECM EMM CW SK

随着数字视频广播(DVB)的发展,观众会面对越来越多的数字电视节目的选择。而广播业者由于投资成本的增加,则要求对用户收取一定的收视费用。条件接收系统(Conditional Access System)就是为了满足对某些广播服务实施接入控制的系统。它的主要功能就是确保只有支付了或者即将支付费用的用户才能收看所选择的电视节目。 1 CA系统的关键技术 在CA系统中,有两项最为关键的技术:一是加扰

zhangliang_571的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CA解扰 数字电视加密技术(EMM ECM)

ECM以及EMM      摘要:详细信论述了CA条件接受系统的原理以及关键技术,并针对实际情况给出了在数字电视系统中条件接收的实现方法。       关键词:条件接收、 数字电视、 控制字、 程序映射表(PMT)、条件访问表(CAT)、 授权控制信息(ECM)、 授权管理信息(EMM)        随着数字视频广播(DVB)的

yiwuxue的专栏 2824

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TS各个表 与 SECTION 的解析 CAS原理

转自:http://blog.sina.com.cn/s/blog_6b94d5680101r5l6.html TS各个表 与 SECTION 的解析 CAS原理     TS流,通过一个个的TS包来传送;TS包可以是传送PSI SI等各表的数据包,也可以是传送节目音视频数据(携带的PES包:音视频基本流包)的包;TS携带 PSISI等表的数

皓月的博客 1775

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数字电视常用表总结

1, 一些定义ES:由编码器输出,可以是编码过的视频数据流,音频数据流,或其他编码数据流。ES流经过PES打包器之后,被转换成PES包。PES包由包头和payload组成。 PSI:MPEG-2中定义了PSI(Program Specific Information)信息,其作用是从一个携带多个节目的某一个TS流中正确找到特定的节目。 PSI表:PSI表包括节目关联表(PAT)

小宋的专栏 2867

ECM & EMM

随着数字视频广播(DVB)的发展,观众会面对越来越多的数字电视节目的选择。而广播业者由于投资成本的增加,则要求对用户收取一定的收视费用。条件接收系统(Conditional Access System)就是为了满足对某些广播服务实施接入控制的系统。它的主要功能就是确保只有支付了或者即将支付费用的用户才能收看所选择的电视节目。 1 CA系统的关键技术 在CA系统中,有两项最为关键的技术:一是加扰

昵称~的专栏 1647

【PSI/SI学习系列】2.PSI/SI深入学习2——PSI信息解析(PAT,PMT,CAT)

PSI/SI深入学习 BASICKNOWLEDGELEARNINGOFPSI/SI PSI信息 INFORMATIONOFPSI "PSI是对单一TS流的描述,是TS流中的引导信息" PSI信息由节目关联表PAT、条件接收表CAT、节目映射表PMT和网络信息表NIT组成。这些表会被插入到TS流中。PSI信息是对单一TS流的描述,它是TS流的引...

weixin_30888413的博客 113

CA解扰的那点事

1、名词概念: 接收控制系统/条件接收系统 :该系统的任务是保证DVB业务仅被授权接收的用户所接收,其主要功能是对信号加扰,对用户电子密钥的加密以及建立一个确保被授权的用户能接收到加扰节目的用户管理系统 控制字或密钥:CW (Control Word ) 节目映射表:PMT (Program Map Table ) 条件接收表:CAT (Conditional Access Table )

GUOYIHONEY的博客 3393

c语言解析ts流文件,TS流解析

1. 介绍:​TS即是"Transport Stream"的缩写。他是分包发送的,每一个包长为188字节或者是204的字节(204字节的就是在后面添加了16字节主要用于高清解码),在TS流里可以填入很多类型的数据,如视频、音频、自定义信息等。他的包的结构为,包头为4个字节,负载为184个字节(这184个字节不一定都是有效数据,有一些可能为填充数据),废话我就不多说了,一些表的结构每个字段表示的意义...

weixin_35674742的博客 3881
上一篇: cat /proc/$PID/status进程状态
下一篇: 【PSI/SI学习系列】2.PSI/SI深入学习1——预备知识
chilv
博客等级 码龄14年 20粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值