一、背景介绍

笔者经历多个项目对接摄像头需求,不同项目具体要求又有所不同,碰到的摄像头对接开发问题,整理记录。此篇主要用于记录备用及给有缘人提供解决思路等。

1.   同一局域网对接(海康摄像头),如果有专线这种方式对接也是最简单的。

2.   互联网基于萤石云协议对接(支持萤石协议的),免费的有并发3个限制。

3.   互联网基于国标协议,解决内网传统问题。有技术难度,技术栈涉及较多。

主要介绍第三种情况GB28181协议对接开发,前面两种简单带过。海康、大华、宇视等主流摄像头都支持此协议,所以开发对接后市面上大部分摄像头都可以接入。

二、同网段或萤石协议对接

有互联网固定ip的参考同网段开发解决方案。

1.以海康为例局域网内可以通过对接摄像头sdk,根据摄像头对应web版sdk直接对接rtmp播放。Sdk有对应demo,输入摄像头ip,端口,用户名,密码登录可以测试。此方式有并发限制,这边测试的大概是10个,主要还要看关闭页面后是否能够及时回收占用资源。页面频繁调用同一摄像头会造成连不上摄像头,暂时没找到好的解决方案,有时候还需要重启一下摄像头才能访问。

这种模式基于互联网网络访问时就很难访问到了,如果项目摄像头与应用同在一个局域网内可以考虑使用最新的无插件sdk,“WEB无插件开发包 V3.2” 地址https://open.hikvision.com/fileserver/resourcedocsonline/Web3.2_控件开发包编程指南_20201102163345.pdf。摄像头与应用服务器不在同一ip段时要注意是否可以互相访问,建议用交换机。大华、宇视等自行查找官网解决方案。

2.萤石协议对接,根据appKey和secret获取accessToken接口,通过设备序列号、通道号获取单台设备的播放地址信息,无法获取永久有效期播放地址。官方对接文档:

https://open.ys7.com/doc/zh/book/index/user.html

萤石协议对接时注意多看官方文档。

优势:基于萤石可以快速开发对接,也能兼容到大部分摄像头,最优的还是海康的设备。

劣势:并发限制;一个开发号最多同时3个并发,如3个人访问同一画面,或一个人最多访问3个画面。个人版:设备接入能力: 10台;接口每日调用上限: 3并发/应用。不差钱的企业可以选择月套餐。

三、GB28181协议简单介绍

GB28181协议指的是国家标准GB/T 28181—2016《公共安全视频监控联网系统信息传输、交换、控制技术要求》。

GB28181协议会话通道实际上使用的是SIP协议,并且在SIP协议的基础之上做了些私有化处理。SIP是一个由IETF MMUSIC工作组开发的协议,作为标准被提议用于创建,修改和终止包括视频,语音,即时通信,在线游戏和虚拟现实等多种多媒体元素在内的交互式用户会话。

SIP中一个比较重要的概念是用户代理(User Agent),指的是一个SIP逻辑网络端点,用于创建、发送、接收SIP消息并管理一个SIP会话。

SIP用户代理又可分为用户代理客户端UAC(User Agent Client)和用户代理服务端UAS(User Agent Server)。UAC创建并发送SIP请求,UAS接收处理SIP请求,发送SIP响应。

SIP协议会与许多其它的协议协同工作,如SIP报文内容发送会话描述协议(Session Description Protocol,SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。

SIP的一个典型用途是:SIP会话传输一些简单的经过报文的实时传输协议流,RTP本身才是语音或视频的载体。在GB28181协议中,联网系统在进行视音频传输及控制时应建立两个传输通道: 会话通道和媒体流通道。会话通道用于在设备之间建立会话并传输系统控制命令; 媒体流通道用于传输视音频数据, 经过压缩编码的视音频流采用流媒体协议RTP/RTCP传输。会话通道中,注册、实时视音频点播、历史视音频的回放等应用的会话控制采用SIP协议IETF RFC3261中规定的REGISTER、INVITE等请求和响应方法实现, 历史视音频回放控制采用SIP扩展协议IETF RFC29765规定的INFO方法实现,前端设备控制、信息查询、报警事件通知和分发等应用的会话控制采用SIP扩展协议IETF RFC34287规定的MESSAGE方法实现。

1.该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiation Protocol)协议。

2.流媒体传输层面使用的是实时传输协议(Real-time Transport Protocol,RTP)协议。

3.因此可以理解为GB28181是在国际通用标准的基础之上进行了私有化定制以满足视频监控联网系统互联传输的标准化需求。

4.由于本次主要是要介绍开源项目akstream,相关协议底层对接这里不再做过多讲述,感兴趣的可以看开源项目底层处理代码;更多GB28181协议知识请自行学习,注册、保活等,学习参考:https://zhuanlan.zhihu.com/p/545703291

注意:GB28181要求传输的视频流格式为PS流,或者H264流,或者MP4格式。不同的模式视频直播延时时间不同,rtsp、rtmp、hls等延迟大部分为10秒左右,flv、mp4播放在3秒左右,可能与播放器或者其它配置有关系,暂未找到合适方案。

国标流媒体服务器其实就是负责将GB28181设备或者平台推送的PS流转成ES流,然后提供RTSP、RTMP、FLV、HLS等格式进⾏分发。也就是此篇文章的主线,基于akstream搭建国标流媒体服务。

篇幅原因更多内容可以参考https://mp.weixin.qq.com/s/gYS4W8HBsPYw2lQfEs7Y7Q

Windows下Net6开源akstream项目vs2022调试GB28181协议对接摄像头全流程的更多相关文章

  1. windows下使用vscode编写运行以及调试C/C++

    未经允许,禁止转载,唯一出处:tangming博客园 最后更新于2019年4月4日: 多次更新,内容较多,篇幅较大,但如果是喜欢visual stdio code这款编辑器的话建议仔细阅读,有疑问的地 ...

  2. Windows 下 pycharm 创建Django 项目【用虚拟环境的解释器】

    1.  背景 我在 Windows 下的 pycharm  直接创建 全新 Django  项目 会  pip 和其他报错 ,暂时解决不了,另外后续的多个项目只需要一套python 环境, 所以可以 ...

  3. 解决windows下eclipse中android项目关联android library project

    关于 在项目中导入 关联 library project 的问题,有时候会出现如下状况 在windows系统下,library project必须和project处于相同的盘符中 如果在不同盘符,pr ...

  4. Windows下快速建立cocos2d-x项目

    准备工作     1.根据当前系统版本,下载对应版本的Python         32位下载地址:http://www.python.org/ftp/python/2.7.5/python-2.7. ...

  5. windows下使用vscode编写运行以及调试Python

    更新于2018年10月: 首先去python官网下载python3  地址:https://www.python.org/downloads/windows/ 下载好后直接安装 记得勾选添加环境变量 ...

  6. 转:解决windows下eclipse中android项目关联android library project失败问题

    近日,在做一个人人的第三方小项目.打算直接使用renren 的sdk 进行开发.因为renren的sdk是以android library project 形式发布的(关于这种project的内容可以 ...

  7. windows下resin的配置部署与调试

    配置 从Resin官网(http://www.caucho.com)下载Resin解压后,启动Resin,运行resin根目录下的resin.exe文件,运行期间将出现下图所示的命令提示符窗口. 表示 ...

  8. windows下 maven+selenium+testng项目搭建(七)

    Selenium2.47.1 + Maven3.3.9 + TestNG6.8.8 windows准备好以下环境 1. Jdk,环境变量配置 2. maven环境3. eclipse 开发工具 ,ec ...

  9. 在打开Dreamweaver软件情况下,vs2010 asp项目无法调试

    会出现以下情况,只要关闭Dreamweaver就可以正常调试vs2010 asp项目.

  10. windows下为qt msvc版本配置调试器

    原文:https://blog.csdn.net/whatnamecaniuse/article/details/80716616 根据开发机的环境,下载 我的机器是win10,因此下载win 10 ...

随机推荐

  1. SwitUI初次体验

    序言 开年的第一篇文章,今天分享的是SwiftUI,SwiftUI出来好几年,之前一直没学习,所以现在才开始:如果大家还留在 iOS 开发,这们语言也是一个趋势: 目前待业中.... 不得不说已逝的2 ...

  2. ABP开发需要用到的命令

    0.命令行在哪里执行? 在Visual Studio的"解决方案资源管理器"的解决方案或者项目上点鼠标右键,选择"在终端中打开". 1.安装abp的命令行 官网 ...

  3. 【Azure API 管理】APIM服务资源删除后,为什么不能马上创建相同名称的APIM服务呢?

    问题描述 使用Azure APIM服务,在删除旧资源准备新建相同名称的新APIM服务时,尝试多次都是出现"指定的服务名称已正在使用"错误.但实际上同名称的服务已经被删除.为什么多次 ...

  4. 为SQL Server配置连接加密

    前言 很多客户在对数据库做安全审计时要求配置连接加密,本文就如何配置加密以及使用证书做一个系统的整理. 连接加密 首先,连接加密不是透明数据加密,很多人经常把两个概念混淆.连接加密是指客户端程序和SQ ...

  5. Jetpack Compose(3) —— 状态管理

    上一篇文章拿 TextField 组件举例时,提到了 State,即状态.本篇文章,即讲解 State 的相关改概念. 一.什么是状态 与其它声明式 UI 框架一样,Compose 的职责非常单纯,仅 ...

  6. 20个Python random模块的代码示例

    本文分享自华为云社区<Python随机数探秘:深入解析random模块的神奇之处>,作者:柠檬味拥抱. 标准库random函数大全:探索Python中的随机数生成 随机数在计算机科学和数据 ...

  7. iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案

    iview table 左侧固定列 右侧固定列 滚动的时候 表格错位 解决方案 iview table 滚动条位置重置 https://www.jianshu.com/p/32fcd50489ff

  8. 补日志log chrome Sources snippet

    补日志log chrome Sources snippet var addWindows =$("#table1").children(); var temp = addWindo ...

  9. k8s创建Pod的流程

    Kubernetes(k8s)中Pod的创建过程是一个涉及多个组件协作的复杂流程,下面将详细描述这个过程,确保内容的详尽性和深度. 一.用户提交创建请求 Pod的创建始于用户通过kubectl命令行工 ...

  10. pcm5102芯片解析之基本概念

    一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...