DVB开发之节目搜索

    一、搜索实现目标

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

DVB开发之节目搜索_第1张图片

    二、整个实现流程

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

DVB开发之节目搜索_第2张图片

    三、搜索中的相关表

    整个搜索基于本地在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中获得,每个频点的频率、调制方式等都在该表中有说明。

DVB开发之节目搜索_第3张图片

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

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

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

DVB开发之节目搜索_第4张图片

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

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

 DVB开发之节目搜索_第5张图片

    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的时候进行过滤即可实现。

DVB开发之节目搜索_第6张图片

DVB开发之节目搜索_第7张图片

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

    四、节目搜搜总结

    (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设入接收机的解码器中,即可完成视频的播放。

    五、参考文献

    http://www.360doc.com/content/11/1223/17/7399771_174513153.shtml

 

你可能感兴趣的:(DVB搜索,搜索流程)