onvif与directshow 2

来源:互联网 发布:流星网络电视apk安卓 编辑:程序博客网 时间:2024/05/24 05:03

关于onvif的部分,我放弃了使用gsoap,原因有三个,第一是因为它根据特定版本的wsdl生成代码,那么对不同版本的onvif没法兼容,看过其代码的都知道,想要更改,是不容易的。第二在于onvif中的许多接口都有鉴权,而wsdl中并没有完整格式,譬如说它会在文档中告诉你鉴权使用UserName Token的格式,但是wsdl中并没有体现出来;第三是因为我觉得协议和通讯应该是分开的,而gsoap揉到了一起。所以不妨按照wsdl和协议文档,自己定义接口。

关于xml解析,我没有使用COM,而是使用了tiny_xml,主要是因为调用不方便。

关于soap,我也没有使用Soap Toolkit的COM,而是自己写了一套,当然是以上面的xml解析为基础的。

关于rtsp,我使用的是jrtplib,不过它只支持udp,需要自己添加tcp的代码。

关于directshow,刚开始的时候找到了一套Splitter和Decoder的Filter,但是有商标,效果不好。现在的方式是推模式的Source Filter 直接连Decoder Filter,再连Renderer,这样的好处是省去了Spilitter的开发量。Decoder Filter是自己开发的,对于MPEG-4视频格式,可以使用xvid或者ffmpeg直接解码,至于选择什么样的解码视频格式,和你的显卡有关,一般来说RGB32都是支持的。而对于H.264来说,则首先需要先解析RTP载荷的NAL层,再用ffmpeg解码。

最近没有再碰onvif了,一些邮件中有onvif的相关内容,这里补充一下。

原创粉丝点击