海康威视摄像机和录像机的监控与回放

文章目录

  • 海康威视摄像机和录像机的监控与回放
    • 1、海康威视监控设备简介
      • 1.1、摄像机二次开发
        • 1.1.1:协议选择
      • 1.2:web集成
      • 1.2:标准协议对接
        • 1.2.1:ffmpeg软件转流
        • 1.2.2:开源监控软件shinobi
        • 1.2.3:使用nginx的RTMP模块
          • 1:windows下实现rtsp流转rtmp和http协议的flv流媒体,实现vue播放
      • 1.3:海康SDK对接
    • 2、各种流媒体协议介绍
      • 2.1:流媒体协议介绍
        • 2.1.1:RTSP (实时流传输协议)
        • 2.1.2:RTMP (实时消息协议)
        • 2.1.3:FLV(Flash Video)
        • 2.1.4:HLS (HTTP Live Streaming)
      • 2.2:流媒体协议选择与适用场景
      • 2.3:推流和拉流
        • 2.3.1:推流
        • 2.3.2:拉流

海康威视摄像机和录像机的监控与回放

1、海康威视监控设备简介

由于我们项目需要引入监控,所有作为一个小白特此研究一下,将自己的实操分享发给大家。
海康的监控设备主要是摄像机搭配录像机NVR可以实现对监控的预览、回放、布放、告警等功能。

海康威视本身提供了非常多的方式可以进行查看监控和回放
1、比如iVMS-4200客户端、直接在浏览器输入摄像机的ip、萤石云。
2、合作伙伴后台服务(付费的):实现标准协议rtsp、hls、http-flv、rtmp取流

海康威视设备搜索:搜素局域网内在线的摄像机设备
海康威视官网工具包

由于我们需要集成到自己的系统中所以需要二次开发后集成到自己的系统中 ,且不想出钱买海康的后台管理平台,所以自己实现。

1.1、摄像机二次开发

主要流程是提供前端支持的协议进行播放,主要包括前端解决方案和后端解决方案。
若只是播放,回放等功能可以使用海康提供的前端web demo和后端解决方案

1、前端web集成
2、后端集成方案

  • 2.1 标准协议对接
  • 2.2 海康SDK对接
1.1.1:协议选择

**需求:**想要二次开发在自己的系统浏览器页面实现监控的播放需要集成播放插件。
**问题:**随着IE、Chrome、Edge等主流浏览器对flash播放插件的停止更新,目前二次开发时应该要摒弃rtmp协议,采用HLS、HTTP-FLV、WebRTC、WebSocket来传输直播视频流。(各种流媒体协议介绍参考第二章节)。浏览器原生不支持rtsp协议取流。
总结如下:

RTSP:浏览器原生不支持rtsp协议取流,需通过下载安装rtsp协议的取流插件实现视频取流业务
HTTP-FLV:在播放首屏、播放延迟方面表现较好。但不支持IOS safari
HLS:将浏览器缓存视频分片后播放,流畅性很好但存在3-4s左右的延时,且录像回放功能对存储要求高
RTMP:Adobe公司2021年已不再更新和分发Flash,不推荐浏览器视频播放采用此协议

前端的Video控件标签支持HLS协议播放,经测试确实支持m3u8的播放。主要支持,几种视频格式m3u8,ogg, mp4, webm。MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件

协议选择:浏览器原生不支持rtsp协议取流,所以需要进行协议转换,比如选择HLS协议

1.2:web集成

海康开发平台web集成文档
在这里插入图片描述
方案中建议一个tab页只启动一个播放插件,暂没有尝试播放多个监控

1.2:标准协议对接

可以实现rtmp到flv、hls等协议转换

1.2.1:ffmpeg软件转流

1、安装ffmpeg: ffmpeg官网
2、使用命令转流
-hls_time 10 代表每个片段的时长10秒
-hls_list_size 决定保留的ts片段个数。0代表全部

ffmpeg -i "rtsp://用户名:密码@IP地址:554/Streaming/Channels/101" -c copy  -hls_time 10 -hls_list_size 0 -hls_flags delete_segments+program_date_time -f hls G:\\yd\\word\\ip\\output.m3u8

3、播放该G:\yd\word\ip\output.m3u8流媒体文件即可。比如使用ffmpeg自带的播放器ffplay或者vlc播放器

ffplay G:\\yd\\word\\ip\\output.m3u8


4、优化。生产上可能有多个监控,可以使用脚本实现批量转换

#!/bin/bash

# 定义摄像头列表
CAMERAS=(
  "rtsp://admin:yd@2024@192.168.2.64:554/Streaming/Channels/101"
  "rtsp://admin:yd@2024@192.168.2.65:554/Streaming/Channels/101"
  # 添加更多摄像头
)

# 输出目录
OUTPUT_DIR="G:\\yd\\word\\ip"

# 保留片段数量
RETAIN_COUNT=36

# 定期清理旧片段
cleanup_old_segments() {
  for i in "${!CAMERAS[@]}"; do
    CAM_ID=$((i + 1))
    M3U8_FILE="$OUTPUT_DIR/camera_$CAM_ID.m3u8"
    
    # 获取M3U8文件中的所有TS文件
    TS_FILES=$(grep -oP '#EXT-X-KEY:.*\n#EXTINF:[0-9.]+,\n(.*?)\n' $M3U8_FILE | cut -d'\n' -f3)
    
    # 删除多余的TS文件
    while [ $(echo "$TS_FILES" | wc -l) -gt $RETAIN_COUNT ]; do
      OLDEST_TS=$(echo "$TS_FILES" | head -n1)
      rm "$OUTPUT_DIR/$OLDEST_TS"
      TS_FILES=$(echo "$TS_FILES" | tail -n +2)
    done
    
    # 更新M3U8文件
    sed -i '/#EXT-X-ENDLIST/d' $M3U8_FILE
    echo "#EXT-X-ENDLIST" >> $M3U8_FILE
  done
}

# 启动FFmpeg进程
for i in "${!CAMERAS[@]}"; do
  CAM_ID=$((i + 1))
  OUTPUT_FILE="$OUTPUT_DIR/camera_$CAM_ID.m3u8"
  
  # 启动FFmpeg进程
  ffmpeg -i "${CAMERAS[$i]}" \
         -c copy -map 0:v:0 -map 0:a:0 -hls_time 10 -hls_list_size 5 \
         -hls_flags delete_segments+program_date_time \
         -f hls "$OUTPUT_FILE" &
done

# 定期清理旧片段
cleanup_old_segments

# 设置定时任务
(crontab -l ; echo "*/5 * * * * /path/to/cleanup_old_segments.sh") | crontab -
1.2.2:开源监控软件shinobi

shinobi官网
1、安装:支持docker安装

docker run -d  --name=shinobi1 --shm-size=2048m -p 8080:8080  registry.gitlab.com/shinobi-systems/shinobi:latest

首次登录管理员:http://ip:8080/super#
后续登录普通账号:http://ip:8080/

2、添加摄像头。每个摄像头默认会生成一个唯一ID
3、查看监控,复制stream流地址。查看监控时若无法播放,确保涉摄像头设置中的视频编码格式是H.264,海康有些会是H.265导致无法查看黑屏
在这里插入图片描述

利用shinobi可以播放rtsp流并可以将其转为m3u8的流。复制m3u8地址接口播放,下面是用vlc播放器播放的
在这里插入图片描述
4、缺点:其stream流的地址会变化,有时会导致前面的stream流失效无法查看监控内容。目前个人没有总结出让其stream流固定不变的方式,欢迎共享方案

1.2.3:使用nginx的RTMP模块

nginx默认不带RTMP模块的,需要下载和nginx源码一起自行编译。

1:windows下实现rtsp流转rtmp和http协议的flv流媒体,实现vue播放
  • 1、安裝nginx、ffmpeg
    下载nginx:下载链接: http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip,下载完成后解压, 将解压后的目录去除空格
  • 2、下载/nginx-rtmp-module流媒体转换module,此module非默认的,需要额外下载: 下载地址https://github.com/arut/nginx-rtmp-module/
  • 3、下载后解压放到nginx-1.7.11.3-Gryphon目录下,并将包名改为nginx-rtmp-module

修改配置文件
nginx-win.conf配置如下

worker_processes 1;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            hls on;
            hls_path "G:/yd/word/nginx-1.7.11.3-Gryphon/hls";  # 使用反斜杠或正斜杠
            hls_fragment 5s;
        }
    }
}

http {
    server {
        listen 880;
        server_name localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

        location /hls/ {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/MP2T ts;
            }
            add_header Cache-Control no-cache;
            alias "G:/yd/word/nginx-1.7.11.3-Gryphon/hls/";  # 使用反斜杠或正斜杠
        }
    }
}

4、启动和停止nginx
启动nginx:nginx -c conf/nginx-win.conf
停止:taskkill /f /t /im nginx.exe
在这里插入图片描述

4、安装ffmpeg实现推流到nginx
你可以使用FFmpeg或其他直播软件推送流到Nginx RTMP服务器:

ffmpeg -i "rtsp://admin:password@192.168.2.64:554/Streaming/Channels/101" -c copy -f flv rtmp://localhost:1935/live/test

在这里插入图片描述

5、获取flv流播放测试
在客户端,你可以使用VLC播放器或其他支持RTMP协议的播放器来观看直播:
vlc播放器测试
在这里插入图片描述
在这里插入图片描述

ffplay拉流播放测试:ffplay.exe rtmp://192.168.2.4:1935/live/test 说明推送到rtmp没问题
在这里插入图片描述

rtmp协议url: rtmp://192.168.2.4:1935/live/test
http协议url:http://localhost:880/hls/test.m3u8

总结:比shinobi有固定的url

1.3:海康SDK对接

海康硬件设备对接SDK
在这里插入图片描述
区分了不同的操作系统

2、各种流媒体协议介绍

常见的流媒体协议包括RTSP、RTMP、HLS、FLV等,它们在不同的应用场景中提供了各自的优势和特性。

2.1:流媒体协议介绍

在这里插入图片描述

2.1.1:RTSP (实时流传输协议)

RTSP(Real-Time Streaming Protocol)RTSP本身并不传送数据,而仅仅是是媒体播放器能控制多媒体流的传送,暂停播放,快进快退等。实际媒体数据的传输可以用RTP协议或其他专用协议。
RTSP以客户-服务器方式工作,它是一个应用层的多媒体播放控制协议。它和Http协议有些相似,但它不像Http,而是有状态的,而且可以在TCP和UDP上传输。

    默认端口554。
2.1.2:RTMP (实时消息协议)

RTMP(Real-Time Messaging Protocol)是Adobe开发的用于实时视频和音频流传输的协议。它最初是为Flash Video应用设计的,但现已被广泛用于各种直播和点播服务,如YouTube、Twitch等

2.1.3:FLV(Flash Video)

格式是一种面向Flash平台的流媒体格式。它被广泛用于Adobe Flash Player的内容播放,尤其在早期的互联网视频应用中非常流行。

2.1.4:HLS (HTTP Live Streaming)

HLS(HTTP Live Streaming)是一种通过标准HTTP协议动态传输实时音视频流的技术。它将视频和音频分段并使用HTTP进行传输,使得在不同的网络环境下都能提供流畅、质量可适应的流媒体体验。
hls存储的是.ts格式的视频片段,可以使用http协议存储成m3u8格式的视频
在这里插入图片描述
m3u8文件是动态更新的,里面存放了各种的.ts格式的视频片段。获取播放的视频流并不是直接播放.m3u8文件本身,而是通过.m3u8文件来索引和播放一系列的TS(Transport Stream)视频片段。.m3u8文件是一个文本文件,它包含了指向这些视频片段的链接列表,以及可能的其他元数据(如带宽信息)。HLS播放器(如Hls.js)会首先下载.m3u8文件,然后根据文件中的列表逐个下载TS片段,并将它们拼接起来播放

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXTINF:10.000,
http://username:password@yourserver.com/path/to/segment0.ts
#EXTINF:10.000,
http://username:password@yourserver.com/path/to/segment1.ts
...

2.2:流媒体协议选择与适用场景

在选择流媒体协议时,应考虑以下几个因素:

传输速度与稳定性:对于实时性要求高的场景,RTMP与RTSP可能更为合适。
平台支持:如果目标是跨平台应用,HLS因其基于HTTP的优势而更受欢迎。
压缩效率:FLV在Flash平台上的使用历史中表现出色,尤其在对压缩效率有较高要求的场景下。
版权保护与防盗链:HLS提供较好的版权保护机制,适合版权内容的分发。
流媒体协议的实现与设置
开发工具:对于开发者来说,使用如Python、Node.js、Java等通用编程语言搭配专门的流媒体框架(如FFmpeg、Nginx的RTMP模块)可以快速搭建流媒体服务。
在这里插入图片描述
其中的视频格式是支持的摄像机的视频编码格式,注意选择协议时进行摄像机的视频编码格式的设置

2.3:推流和拉流

2.3.1:推流

将直播的内容推送至服务器的过程,其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是糟糕。要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。常用的流传输协议有 RTSP、RTMP、HLS 等,使用 RTMP 传输的延时通常在 1–3 秒,对于手机直播这种实时性要求非常高的场景,RTMP 也成为手机直播中最常用的流传输协议。最后通过一定的 QoS 算法将音视频流数据推送到网络端,并通过 CDN 进行分发。

2.3.2:拉流

拉流:指服务器已有直播内容,用指定地址进行拉取的过程。即是指服务器里面有流媒体视频文件,这些视频文件根据不同的网络协议类型(如 RTMP、RTSP、HTTP 等)被读取的过程,称之为拉流,我们日常观看视频和直播就是一个拉流的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/879497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1123 标注数量(xml文件个数):1123 标注数量(txt文件个数):1123 标注…

ElK 8 收集 Nginx 日志

1. 说明 elk 版本:8.15.0 2. 启个 nginx 有 nginx 可以直接使用。我这里是在之前环境下 docker-compose.yml 中启动了个 nginx: nginx:restart: alwaysimage: nginx:1.26.1ports:- "80:80"- "443:443"volumes:#- ./nginx/html:/…

Datawhale X 南瓜书 task01学习笔记

机器学习三观 机器学习工程领先理论 what:什么是机器学习? 机器学习定义:研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科PS:深度学习指的是:神经网络那一类学习算法,因此是机器学习的子集把深度学习单列出来…

没有项目经验,如何快速转行 AI产品经理?

先上结论:要快速转行,需要了解AIGC,并丰富项目经验。 AIGC是什么 首先需要了解AIGC基本概念、涉及的技术基础、应用场景和局限性。之所以需要具备这些知识,是因为实现AIGC产品必然会涉及相应的AI技术,如果AIGC产品经…

C++函数在库中的地址

本文讲述C如何直接调用动态库dll或者so中的函数。 首先我们准备一个被调用库,这个库里面有两个函数,分别是C98 与 C11 下的,名称是run2和run1。 被调用库 相关介绍请看之前的文章《函数指针与库之间的通信讲解》。 //dll_ex_im.h #ifndef…

Stylized Smooth Clouds 卡通风格化云朵包

下载:​​Unity资源商店链接资源下载链接 效果图:

Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析

其实网上有大量讨论HTTP长连接的文章,而且Idle Timeout和KeepAlive Timeout都是HTTP协议上的事情,跟Vert.x本身没有太大关系,只不过最近在项目上遇到了一些问题,用到了Vert.x的HttpClient,就干脆总结一下,留…

Codes 开源研发项目管理平台——敏捷测试管理创新解决方案

前言 Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对30人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的…

计算机人工智能前沿进展-大语言模型方向-2024-09-13

计算机人工智能前沿进展-大语言模型方向-2024-09-13 1. OneEdit: A Neural-Symbolic Collaboratively Knowledge Editing System Authors: Ningyu Zhang, Zekun Xi, Yujie Luo, Peng Wang, Bozhong Tian, Yunzhi Yao, Jintian Zhang, Shumin Deng, Mengshu Sun, Lei Liang, Z…

【AI学习笔记】初学机器学习西瓜书概要记录(二)常用的机器学习方法篇

初学机器学习西瓜书的概要记录(一)机器学习基础知识篇(已完结) 初学机器学习西瓜书的概要记录(二)常用的机器学习方法篇(持续更新) 初学机器学习西瓜书的概要记录(三)进阶知识篇(待更) 文字公式撰写不易&am…

设计模式 享元模式(Flyweight Pattern)

享元模式 简绍 享元模式(Flyweight Pattern)是一种结构型设计模式,它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用,从而提高程序的性能。它特别适用于需要创建大量相似对象的场景&#…

基于web的工作管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …

C++ -命名空间-详解

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C -命名空间-详解 1.C语言缺点之一 -- 命名冲突2.命名空间2.1定义2.2使用访问命名空间中的变量展开命名空间域指定访问命名空间域 2.3其他功能 3.C 标准库中的命名空间指定展开…

【网络安全】一篇文章带你了解CTF那些事儿

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 一、什么是CTF&#xff1f; CTF&#xff0c;即 Capture The Flag&#xff0c;中文名为夺旗赛&#xff0c;是一种网络安全技术人员之间进行技术竞技的比赛形式。…

保护您的隐私:隐藏 IP 地址的重要性

在当今的数字时代&#xff0c;我们的在线隐私和安全变得比以往任何时候都更加重要。浏览互联网时保护自己的一种方法是隐藏您的 IP 地址。 但是为什么要隐藏您的 IP 地址以及如何有效地做到这一点&#xff1f; 隐藏您的 IP 地址有助于保护您的在线匿名性。您的 IP 地址就像您的…

高速数据转换器设计(一):简介

【注&#xff1a;本文基于《高速数据转换器设计》一书进行学习、总结编撰&#xff0c;适合新手小白进行学习】 目录 1.1 理想数据转换器 1.2 采样操作 1.2.1 冲激采样 1.2.2 采样-保持(S-H) 1.2.3 跟踪-保持 1.2.4 带通采样定理 1.3 信号重构 1.4 量化 1.4.1 量化器 …

SEO 和内容营销:吸引更多人阅读你下一篇文章的3个步骤

SEO和内容营销之间的界限模糊不清。它们显然不同&#xff0c;但很难确切指明其中的界限。 想一想&#xff1a;昼夜的差别是明显的&#xff0c;像白天和黑夜。 但对于昼夜交替的那一刻——究竟是什么时候呢&#xff1f; 你可能认为是在日落时分。但这忽略了市民黄昏&#xff…

【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显示网格与隐式网格(中)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…