上一回讲解的是examples/decode_pat.c,这一回讲解examples/decode_pmt.c。
ReadPacket上回已经讲过了。接下来看main
int main(int i_argc, char* pa_argv[]) { int i_fd; uint8_t data[188]; dvbpsi_handle h_dvbpsi; int b_ok; uint16_t i_program_number, i_pmt_pid; if(i_argc != 4) return 1; i_fd = open(pa_argv[1], 0); i_program_number = atoi(pa_argv[2]); i_pmt_pid = atoi(pa_argv[3]); h_dvbpsi = dvbpsi_AttachPMT(i_program_number, DumpPMT, NULL); b_ok = ReadPacket(i_fd, data); while(b_ok) { uint16_t i_pid = ((uint16_t)(data[1] & 0x1f) << 8) + data[2]; if(i_pid == i_pmt_pid) dvbpsi_PushPacket(h_dvbpsi, data); b_ok = ReadPacket(i_fd, data); } dvbpsi_DetachPMT(h_dvbpsi); return 0; }
看到跟上一个例子基本一致,都是读到一个pmt表,就把它给到dvbpsi_PushPacket,这里的pid需要自己指定,如果跟上一个例子结合起来就可以不用自己指定PMT表的pid。
接下来是对各种描述符进行解析:
static void DumpDescriptors(const char* str, dvbpsi_descriptor_t* p_descriptor) { int i; while(p_descriptor) { printf("%s 0x%02x : ", str, p_descriptor->i_tag); switch (p_descriptor->i_tag) { case SYSTEM_CLOCK_DR: DumpSystemClockDescriptor(dvbpsi_DecodeSystemClockDr(p_descriptor)); break; case MAX_BITRATE_DR: DumpMaxBitrateDescriptor(dvbpsi_DecodeMaxBitrateDr(p_descriptor)); break; case STREAM_IDENTIFIER_DR: DumpStreamIdentifierDescriptor(dvbpsi_DecodeStreamIdentifierDr(p_descriptor)); break; case SUBTITLING_DR: DumpSubtitleDescriptor(dvbpsi_DecodeSubtitlingDr(p_descriptor)); break; default: printf("/""); for(i = 0; i < p_descriptor->i_length; i++) printf("%c", p_descriptor->p_data[i]); printf("/"/n"); } p_descriptor = p_descriptor->p_next; } };
大概就这样,留着备忘。
VLC 软件下用于分析数字电视TS流PSI及SI信息的开源软件
我有一个语法,当解析在一次传递(整个文件)很好。 现在我希望将解析分解成组件。并在子库上运行解析器。我遇到了一个问题,我假设其他解析子库的人会看到下面的规则: 当上面的规则从一个顶级的开始规则解析到EOF时,一切都很好。当解析为子规则(而不是解析为EOF)时,解析器在没有thing子句时会感到不安,因为它希望看到“,”字符或EOF字符。 第8行:0不匹配的输入“%”应为{,“,”} 当我解析到EO
本文向大家介绍Python解析json代码实例解析,包括了Python解析json代码实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python解析json代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是json格式: JSON(JavaScript Object Notation):一种轻量级数据交换格式
本文档主要介绍一个基于 jraft 的分布式计数器的例子。 场景 在多个节点(机器)组成的一个 raft group 中保存一个分布式计数器,该计数器可以递增和获取,并且在所有节点之间保持一致,任何少数节点的挂掉都不会影响对外提供的两个服务: incrmentAndGet(delta) 递增 delta 数值并返回递增后的值。 get() 获取最新的值 RPC 请求 jraft 底层使用 bolt
OpenNLP是一个关于自然语言处理的Apache项目。NLP程序的目的之一是解析一个句子,给出其语法结构的树。例如,句子“天空是蓝色的”可能被解析为 其中是句子,是名词短语,是动词短语。等效地,上面的树可以写成一个带括号的字符串,如下所示: 我试图使用OpenNLP从句子中获取带括号的字符串,但我无法让示例代码正常工作。 特别是,我正在遵循本教程的最后一部分,我的代码在初始化时卡住了。 我已经从
本文向大家介绍Python猴子补丁Monkey Patch用法实例解析,包括了Python猴子补丁Monkey Patch用法实例解析的使用技巧和注意事项,需要的朋友参考一下 属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。 为什么叫猴子补丁 属性的运行时替换和猴子也没什么关系,关于猴子补丁的由来网上查到两种说法: 1.这个词原来为Guerrilla Patch,杂牌军、游击队,
本文向大家介绍JS解析XML实例分析,包括了JS解析XML实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS解析XML的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。
本文向大家介绍AngularJS中的JSONP实例解析,包括了AngularJS中的JSONP实例解析的使用技巧和注意事项,需要的朋友参考一下 概念 首先呢,Json和JSONP是不一样的哦。Json呢,是众多数据存储的其中一种格式,是数据书写方式的其中一种。好比是大中华众多诗体的一种(比如说是七言诗吧)。这种诗体规定了: 这种诗体要包含题目,每行诗句的字数(7个字) 等等的文本格式。