主要是实现简单的搜索,能获取到节目列表,点击列表内容实现播放,整个效果流程以下图所示:html
结合本身在相关项目中实现他人接口,对整个流程的理解给出下面流程图,可能存在缺陷,整体思路是这样实现的:java
整个搜索基于本地在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";// 搜索到的节目信息
上面给出的信息,能够直接拿去解码播放了,咱们经过如下各表的解释,看看以上数据是怎么来的。ide
一、NIT(Network Information Table)表:网络信息表,NIT传送本网络以及与此有关的其余网络的一些信息。每一个网络都有惟一的标识符(network_id)。NIT把一些节目集中在一块儿,提供调谐接收必须的转发器、频率、符号率、调制方式等参数,供接收解码的自动调谐接收。NIT中对该网络中全部的TS流都有描述,网络中的频点列表就从NIT中得到,每一个频点的频率、调制方式等都在该表中有说明。ui
transport_stream下描述了全部TS流,802频点下的相关参数,若是要搜索整个网络,下面的频点都要搜索到。这里咱们只去搜了570频点。spa
二、SDT(Service Description Table)表:业务描述表,SDT表给出了传送流中每一个节目或业务有关的其余节目的名称和参数,包含某节目属于哪一节目业务组、节目业务类型、节目业务提供者、业务运行状态等信息。code
做用:提供业务的相关信息,好比说名称、提供者名称、业务类型等,用户在收看某频道时能够根据须要随时查看这些信息。比较典型的是EPG中频道列表中各频道的名称即从SDT得到;当在收看某频道时,能够查看该频道的提供者名称等信息也是从SDT中得到。orm
咱们看到这个节目的名称是:电视指南,Service_id=450(0x1c2),这个要保存下来,后面会用到。视频
三、PAT(Program Association Table)表:节目关联表,PAT表主要包含频道号码和每个频道对应的PMT的PID号码,这些信息咱们在处理PAT表格的时候会保存起来,之后会使用到htm
SDT中Service_id=program_number=450(0x1c2),PMT的PID=0x0032,经过这个找到电视指南这个节目的PMT的PID。
四、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的时候进行过滤便可实现。
获取音视频相关信息,能够实现播放相关节目。
(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