博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DVB开发之节目搜索
阅读量:7100 次
发布时间:2019-06-28

本文共 2243 字,大约阅读时间需要 7 分钟。

hot3.png

    一、搜索实现目标

    主要是实现简单的搜索,能获取到节目列表,点击列表内容实现播放,整个效果流程如下图所示:

170925_F3NJ_1999544.jpg

    二、整个实现流程

    结合自己在相关项目中实现他人接口,对整个流程的理解给出下面流程图,可能存在缺陷,总体思路是这样实现的:

173917_MfYq_1999544.jpg

    三、搜索中的相关表

    整个搜索基于本地在570频点上播放的一个码流 ,播放需要的码流信息如下:

private static final long freq = 570000000; private String freqInfo = "frequency://" + freq   + "?symbol_rate=6875000&delivery=cable&modulation=qam64&frequency=" + freq;// 频点相关信息 private String promInfo = "program://450?audio_stream_pid=52&audio_stream_type=audio_mpeg1&video_stream_pid=51&video_stream_type=video_mpeg2&pcr_stream_pid=51&ca_required=false";// 搜索到的节目信息

    上面给出的信息,可以直接拿去解码播放了,我们通过以下各表的解释,看看以上数据是怎么来的。

    1、NIT(Network Information Table)表:网络信息表,NIT传送本网络以及与此有关的其他网络的一些信息。每个网络都有唯一的标识符(network_id)。NIT把一些节目集中在一起,提供调谐接收必须的转发器、频率、符号率、调制方式等参数,供接收解码的自动调谐接收。NIT中对该网络中所有的TS流都有描述,网络中的频点列表就从NIT中获得,每个频点的频率、调制方式等都在该表中有说明。

174534_aaqJ_1999544.png

    transport_stream下描述了所有TS流,802频点下的相关参数,如果要搜索整个网络,下面的频点都要搜索到。这里我们只去搜了570频点。

    2、SDT(Service Description Table)表:业务描述表SDT表给出了传送流中每个节目或业务有关的其他节目的名称和参数,包含某节目属于哪一节目业务组、节目业务类型、节目业务提供者、业务运行状态等信息。

作用:提供业务的相关信息,比如说名称、提供者名称、业务类型等,用户在收看某频道时可以根据需要随时查看这些信息。比较典型的是EPG中频道列表中各频道的名称即从SDT获得;当在收看某频道时,可以查看该频道的提供者名称等信息也是从SDT中获得。

174936_Wnlv_1999544.png

    我们看到这个节目的名称是:电视指南,Service_id=450(0x1c2),这个要保存下来,后面会用到。

    3、PAT(Program Association Table)表:节目关联表,PAT表主要包含频道号码和每一个频道对应的PMT的PID号码,这些信息我们在处理PAT表格的时候会保存起来,以后会使用到

 175152_9jPd_1999544.png

    SDT中Service_id=program_number=450(0x1c2),PMT的PID=0x0032,通过这个找到电视指南这个节目的PMT的PID。

    4、PMT(Program Map Table)表:节目映射表,PMT表中包含的数据如下:

    (1) 当前频道中包含的所有Video数据的PID

    (2) 当前频道中包含的所有Audio数据的PID

    (3) 和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)。

    只要我们处理了PMT,那么我们就可以获取频道中所有的PID信息,例如当前频道包含多少个Video,共多少个Audio,和其 他数据,还能知道每种数据对应的PID分别是什么. 这样如果我们要选择其中一个Video和Audio收看,那么只需要把要收看的节目的Video PID和Audio PID保存起来,在处理Packet的时候进行过滤即可实现。

175429_KOzA_1999544.png

175429_pS23_1999544.png

    获取音视频相关信息,可以实现播放相关节目。

    四、节目搜搜总结

    (1) 搜台:一般来说, 接收机开机之后的第一件事件是:搜台。

     目前关于搜台过程很多, 但是最重要的当然是: 找到一个承载数字节目的频点. 

    一般运营商都会在接收机上设定一个初始频点,(叫主频点,或中心频点),接收机可以根据这个频点的网络参数,如频点,符号率,调制方式,去锁定此频点。

    (2) 获得nit:一般情况下,由于nit里的信息是关系到整个网络的,因此,接收机先从该表入手,获得nit后,这个网络中有多少流,每个流的物理参数等都已获得。之后的其他频点锁定就可以依靠这些信息进行。

    (3)获得sdt:依靠sdt,接收机可以知道频道名,频道类型等信息,可以构建出EPG应用的频道列表。

    (4) :如果这时候,用户选定一个频道进行播放,接收机会根据此频道的service_id,判断其所在的ts流,之后切换到此流中。

    (5): 切换过来之后,寻找PAT, 获得此流所有的PMT,由于serice_id一定和PAT中的progrma_number一样,因此,很容易找到相应的pmt。

    (6) :获得pmt, 从pmt中获得pcr_pid,auido_pid,vidoe_pid之后,将这三个pid设入接收机的解码器中,即可完成视频的播放。

    五、参考文献

 

转载于:https://my.oschina.net/u/1999544/blog/368912

你可能感兴趣的文章
如何让win10实现关机确认-暂没确认
查看>>
李洪强漫谈iOS开发[C语言-036]-C语言前四天学习小结
查看>>
JQuery使用deferreds串行多个ajax请求
查看>>
常用js函数整理--common.js
查看>>
java内存泄漏与内存溢出
查看>>
分布式与集群
查看>>
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
查看>>
LeetCode Add Two Numbers
查看>>
sql server2008给数据表,字段,添加修改注释
查看>>
meta标签清理缓存
查看>>
【数据结构】二叉树
查看>>
onvif开发之设备发现功能的实现--转
查看>>
虚拟机下linux迁移造成MAC地址异常处理办法
查看>>
数据库事务原子性、一致性是怎样实现的?[转]
查看>>
“营改增”后你该知道的…代开发票需要知道的16个事项
查看>>
arcgis10.1连接sqlserver数据库常见问题(转载)
查看>>
动态设置js的属性
查看>>
Fragment的setUserVisibleHint方法实现懒加载,但setUserVisibleHint 不起作用?
查看>>
@responsebody注解的作用就是让viewresolver不起作用,不返回视图名称而是直接返回的return object...
查看>>
lodash(二)对象+循环遍历+排序
查看>>