首页 > 其他分享 >ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍

ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍

时间:2023-04-20 19:46:40浏览次数:47  
标签:IPC Web 协议 RTSP RTP ONVIF 客户端

1.前言:

网上已经有很多关于ONVIF开发的资料,这里概括介绍一下ONVIF协议以及介绍一下我自己在开发ONVIF网络摄像头的一些流程和经验,做个开发记录和经验总结,以备将来查看,也可供他人参考。如有错误,欢迎你的留言纠正,让我们共同成长。系列博客包括:

《ONVIF网络摄像头(IPC)客户端开发—ONVIF介绍》
《ONVIF网络摄像头(IPC)客户端开发—最简RTSP客户端实现》
《ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流》
《ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载AAC音频流》

2.ONVIF:

ONVIF(Open Network Video Interface Forum,开放型网络视频接口论坛)以公开、开放的原则共同制定开放性行业标准。更多信息可以参考官方网站: Home - ONVIF Mandarin 。ONVIF标准的厂商覆盖芯片、视频前端设备、存储设备、系统平台、智能分析设备、门禁、传感设备等各个安防相关领域,IPC摄像头只是ONVIF标准里的一个分支而已。

3.技术框架:

ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。ONVIF中的其他部分比如音视频流则通过RTP/RTSP进行。

在ONVIF网络摄像头开发中,也就是包括了Web Server 和RTSP这两大部分,这两大部分的依赖不是非常大,在嵌入式设备中,可能没有足够的硬件资源来运行第三方多媒体处理库,比如FFmpeg,这时需要自己来封装RTSP流媒体传输协议。可以先从Web Server 中获取到了RTSP的URL之后,然后再通过这个URL来开发RTSP,这样可以去除对Web Server的依赖,简化程序的开发。
Web Server:

  • 获取IPC的基本信息(厂家信息、版本信息等);
  • 修改IPC的系统日期、时间;
  • 修改IPC的网络配置(IP、子网掩码等);
  • 获取/修改IPC摄像头的各种参数(视频分辨率、码率、帧率、OSD,云台控制等);

RTSP:

  • RTSP启动、停止音视频流等
  • RTP接收音视频流数据等
  • RTCP汇报RTP传输情况等

3.1Web Server

Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口。它能够让各个系统之间的对接变得:快捷、方便、廉价。

实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等,我们这里使用的SOAP框架。

3.1.1SOAP

SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。

SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的,这是它的优点:

  • SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。
  • SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。

使用ONVIF的缺点有:

  • HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。
  • HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。

3.2RTSP

RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似,它们同样属于应用层。

  1. RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。RTP和RTCP协议是基于TCP和UDP协议的基础上的一种协议,它们同样属于传输层的协议。
    RTP是实时传输协议(Real-Time Transport Protocol)的缩写。是针对多媒体数据流的实时传输协议。通常建立在UDP协议之上,也可以建立在TCP协议之上。有人将其归为应用层协议,也有人将其归为传输层协议,这都是可以的。
  2. RTCP是实时控制协议(Real-Time Control Protocol)的缩写。RTCP通常与RTP配合使用,用以管理传输质量在当前进程之间的交换信息。在RTP会话期间,各参与者周期性的传送RTCP包,RTCP包中包含已发送数据包的数量、丢失的数据包的数量等统计资料。服务器可以利用这些信息动态的改变传输速率,甚至改变有效载荷的类型。RTP和RTCP配合使用,可以有效且以最小的开销达到最佳传输效率,非常适合传送实时流。
  3. 用一句简单的话总结:RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。

致谢:

  1. 许振坪 对ONVIF中Web Server端的开发有非常详细的介绍 [https://blog.csdn.net/benkaoya/article/details/72424335]

---------------------------End---------------------------

长按识别二维码
关注 liwen01 公众号

标签:IPC,Web,协议,RTSP,RTP,ONVIF,客户端
From: https://www.cnblogs.com/liwen01/p/17337916.html

相关文章

  • ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载AAC音频流
    前言:RTSP,RTCP,RTP一般是一起使用,在FFmpeg和live555这些库中,它们为了更好的适用性,所以实现起来非常复杂,直接查看FFmpeg和Live555源代码来熟悉这些协议非常吃力,这里将它们独立出来实现,以便更好的理解协议。本文主要介绍RTSP,RTCP,RTP加载AAC音频流。说明:(1)大华IPC摄像头作为服......
  • ASP.NET Core MVC 从入门到精通之wwwroot和客户端库
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NETCor......
  • 基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
    2023年目前要说最热的点,肯定是ChatGPT了。ChatGPT官方提供的网页版本,还有需要科*上网,很多人都会基于此进行封装。现在是移动互联网时代,基于手机APP的需求还是很大的。所以,今天给大家推荐一个ChatGPT客户端开源项目,兼容苹果和安卓手机、PC。项目简介这是基于C#开发的客户端,兼......
  • webservice 客户端生成命令
    wsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:8893/Service.svc?wsdlwsdl2java-frontendjaxws21-client-pcom.creditease.webapp.webservice.voices-dd:/http://10.105.48.14:......
  • Linux 下 REST 客户端的新选择:Insomnia 3.0
    正在为 Linux 桌面端找一个免费的REST客户端?别睡不着觉了!试试Insomnia。这个应用是跨平台的,可以工作在Linux、macOS、Windows。开发者GregorySchier告诉我们他创造这个应用是为了“帮助开发者处理和RESTAPI的通信”。他还说,Insomnia已经有大约10000个活跃用户,9%......
  • Linux 下 REST 客户端的新选择:Insomnia 3.0
    正在为 Linux 桌面端找一个免费的REST客户端?别睡不着觉了!试试Insomnia。这个应用是跨平台的,可以工作在Linux、macOS、Windows。开发者GregorySchier告诉我们他创造这个应用是为了“帮助开发者处理和RESTAPI的通信”。他还说,Insomnia已经有大约10000个活跃用户,9%......
  • chatgpt-客户端实现
    packagemainimport( "context" "fmt" "github.com/sashabaranov/go-openai""github.com/chzyer/readline")funcmain(){ client:=openai.NewClient("") messages:=make([]openai.ChatCompletionMess......
  • 告别输入网址烦恼!ChatGPT不错开源客户端
    ChatBox是什么开源的ChatGPTAPI(OpenAIAPI)桌面客户端,Prompt的调试与管理工具,支持Windows、Mac和Linux。为什么需要它每次想访问ChatGPT时,都需要在浏览器中输入ChatGPT网址,然后点击登录,选择账号,整个过程中比较麻烦,该工具提供ChatGPT桌面应用版本,直接安装在桌面使用......
  • git客户端安装
    git客户端下载地址:https://git-scm.com/downloads    end.  ......
  • Spring 教程—REST 客户端详解
    Spring框架为调用REST端点提供了以下选择:WebClient -非阻塞、响应式客户端和fluentAPI。RestTemplate -带有模板方法API的同步客户端。HTTP接口 -注解式接口,并生成动态代理实现。一、 WebClientWebClient 是一个非阻塞的、响应式的客户端,用于执行HTTP请求。它在5.0中引......