最近一家深耕于南方电网的科技公司同事找到我们,咨询关于调用海康HCNetSDK取流,并进行互联网转化的方案,经过反复的沟通以及自身在EasyDSSEasyNVR方面的经验,我们推荐了海康HCNetSDK+EasyRTMP推流到RTMP流媒体服务器,再由RTMP流媒体服务器同步输出RTMP/HTTP-FLV/HLS的方案。

一般情况下我们在对接一款设备,进行流处理和流转的大概流程分为:

  • 第一步:设备对接协议的选择

无论是以RTSP、Onvif协议从设备取流,还是国标GB/T28181向设备取流,都是根据设备所支持的协议,通过协议过程获取到设备回调的音视频数据,例如这里要说的海康HCNetSDK;

在取流协议的选择上,就看自身的应用需求,比如您的设备只有海康的,那么您完全可以用海康的SDK来取流,但是如果您的设备是各种厂家都有,而且不固定,建议采用的是RTSP这种国际标准的取流方式。

海康HCNetSDK是一套完全可以兼容海康几乎全部的IPC、DVR、NVR、NVS的客户端SDK,当现实场景中会不定存在很多款的设备型号,而且输出协议不一样,那么,海康的设备选择HCNetSDK是一个极佳的选择,因为海康已经将所有底层的兼容工作在HCNetSDK中完成了;

那么,以RTSP取流为例,我们在开源或者商用领域有很多可选的,比如ffmpeg、live555和EasyRTSPClient(https://github.com/EasyDSS/easyRTSPClient);

  • 第二步:数据处理与分析

从第一步取到音视频流后,我们需要将流统一Demux为ES流进行进一步的处理,例如海康SDK输出的大部分流为PS流,我们需要将PS解析成ES的音视频数据,再基于ES的音频、视频数据进行例如:快照、视频信息、转码、视频分析等多种操作。这里关于海康PS流的Demux操作以及相关的代码,我们会在下一篇博客中专门进行讨论。

  • 第三步:推流与分发

在第二步进行了初步的数据处理后,我们需要将ES音视频数据通过librtmp、ffmpeg 或者 EasyRTMP(https://github.com/EasyDSS/EasyRTMP)推送到nginx-rtmp 或者 EasyDSS 流媒体服务器进行高性能分发和存储,并提供一系列的对外管理接口;

  • 第四步:接口化处理

完成了以上3步,只能算是跑通了整个数据流程,我们还需要对整个流程进行控制,例如,当有客户端请求观看的时候,我们才启动取流、转码、推流、分发的过程,当用户停止观看或者一段时间内超时未进行服务端保活,服务端即停止整个流转的过程。

同时,我们需要将对某个设备的取流、取录像的过程均以接口的形式对外输出(参考EasyNVR的实现),这样一套底层可以提供给多个现场,多种项目使用。



为了帮助用户能够更好、更快地进行海康设备RTMP推流功能的开发,我们调试了一套示例代码:https://github.com/EasyDSS/EasyRTMP/tree/master/EasyRTMP_HIK ,功能流程非常简单,通过调用海康的HCNetSDK取流,再经过PS的Demux处理,转换成为ES流,再经由EasyRTMP推流到RTMP流媒体服务器或者CDN,实现安防互联网直播。

本文涉及的相关资源:

live555:www.live555.com

ffmpeg:http://www.ffmpeg.org/

HCNetSDK:https://www.hikvision.com/cn/download_61.html

EasyDSS:www.easydss.com

EasyRTMP:https://github.com/EasyDSS/EasyRTMP

示例代码:https://github.com/EasyDSS/EasyRTMP/tree/master/EasyRTMP_HIK

EasyRTMP结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)的更多相关文章

  1. EasyRTMP+EasyRTSPClient实现的多路(支持断线重连)RTSP转RTMP直播推流工具

    本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/73441405 介绍 EasyRTMP是Eas ...

  2. Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)

    http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Andr ...

  3. 【转】百度API获取城市名地名(附源码)

    在做一个软件时,用到了定位功能.网上有很多关于google 的GPS定位,但网上关于google定位都没有用, 搜索下原因:(这里建议大家在中国就尽量不使用系统自带的定位) 因为Google的服务器不 ...

  4. Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)

    项目地址https://github.com/979451341/RtmpSave 这个项目主要代码我是从雷神那弄过来的,不愧是雷神,我就配个环境搞个界面就可以用代码了. 这一次说的是将RTMP流媒体 ...

  5. 海康威视实时预览回调PS流用EasyRTMP向RTMP服务器推流中视频数据处理的代码

    在上一篇方案<EasyRTMP结合海康HCNetSDK获取海康摄像机H.264实时流并转化成为RTMP直播推流(附源码)>我们介绍了将海康安防摄像机进行互联网直播的整体方案流程,其中有一个 ...

  6. 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作 | 百篇博客分析OpenHarmony源码 | v43.02

    百篇博客系列篇.本篇为: v43.xx 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里 ...

  7. 将海康大华等网络摄像机RTSP流进行网页Flash rtmp和H5 hls直播的技术方案

    前言 再小的技术点也会有他的市场! 一直以来,都有一些不被看好,认为是成本太高,无法大规模展开的软件和产品形态,就好比每一座城市都会有他的著名小吃一样,即使是慕名而来的人源源不断,受众群体也总是有限, ...

  8. 曹工说Spring Boot源码(23)-- ASM又立功了,Spring原来是这么递归获取注解的元注解的

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  9. Java并发包源码学习系列:CLH同步队列及同步资源获取与释放

    目录 本篇学习目标 CLH队列的结构 资源获取 入队Node addWaiter(Node mode) 不断尝试Node enq(final Node node) boolean acquireQue ...

随机推荐

  1. python - Django 跨域配置

    一:settings 中间件配置路径 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.s ...

  2. python的优缺点。

    Python的定位是“优雅”.“明确”.“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序. 开发效率非常高,Pyt ...

  3. 四大网络之Alexnet

       本文主要介绍AlextNet的一些知识,这些知识经常被忽略 一.AlextNet的创新点 (1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Si ...

  4. learning java Random 和 ThreadLocalRandom类

    var rand = new Random(); System.out.println(rand.nextBoolean()); System.out.println(rand.nextInt()); ...

  5. Kibana 的安装(Windows版本)

    一.安装 安装条件 保证安装了JDK 保证安装node 保证安装了Elasticsearch 1.点击kibana官网下载  [kibana的版本和elasticsearch的版本和必须一致] 2.修 ...

  6. 桥接模式:探索JDBC底层实现

    一.目录概要 二.问题探究 需求:假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决? 按照初学者的思路,利用继承就能简单粗暴的实现,那我们来看下这种思路的设计 ...

  7. 10、spark高级编程

    一.基于排序机制的wordcount程序 1.要求 1.对文本文件内的每个单词都统计出其出现的次数. 2.按照每个单词出现次数的数量,降序排序. 2.代码实现 ------java实现------- ...

  8. P1057 传球游戏——小学生dp

    P1057 传球游戏 设f[i][j]为第i次传到j的方案数: f[0][1]=1; 单独处理开头和结尾: #include<cstdio> #include<cstring> ...

  9. 模板 - 数据结构 - 链表/LinkedList

    一个只供删除的双向链表,为了简单不再引入head节点,而且也不进行next的套娃操作.空间使用略微多了一些,但是无伤大雅. struct LinkedList { static const int M ...

  10. Docker 常用命令,自用,持续更

    1.进入容器 docker exec -it 容器id /bin/bash docker exec -it db30f533ee1b /bin/bash 2.复制文件到容器 docker cp 文件路 ...