海康威视监控web实时预览解决方案
海康威视摄像头都试rtsp流,web页面无法加载播放,所以就得转换成web页面可以播放的hls、rtmp等数据流来播放。
一:萤石云
使用萤石云平台,把rtsp转化成ezopen协议,然后使用组件UIKit
最佳实践 · 萤石开放平台API文档
UIKit Javascript · 萤石开放平台API文档
文档概述 · 萤石开放平台API文档
二:
使用海康威视官网插件,或无插件版
海康开放平台
三:使用安防平台预览url接口
根据不同的数据流返回不同的直播流,这里我主要用的hls的流来播放。hls取流有一个坑的就是摄像头编码得设置264.音频选择acc。
海康接口调用封装的是用php写的。
<?php
namespace App\Model;
header('Content-type:text/html; Charset=utf-8');
date_default_timezone_set('PRC');
class Haikang
{public $pre_url = "https://host:443"; //安防平台故武器地址protected $app_key = "appkey"; // keyprotected $app_secret = "secret";public $time ;//时间戳public $content_type="application/json";//类型public $accept="*/*" ;//acceptpublic $person_list_url = "/artemis/api/resource/v1/encodeDevice/get";//人员列表urlpublic $equipment_view_url = "/artemis/api/video/v1/cameras/previewURLs";//获取监控点预览取流URLpublic function __construct($app_key='', $app_secret=''){if($app_key!='') $this->app_key = $app_key;if($app_secret!='') $this->app_secret = $app_secret;$this->charset = 'utf-8';list($msec, $sec) = explode(' ', microtime());$this->time = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);}function getViewUrl($cameraIndexCode){//请求参数$postData['cameraIndexCode'] = $cameraIndexCode;$postData['streamType'] =0;$postData['protocol'] = 'hls';$postData['transmode'] = 1;$postData['videotype'] = 'h264';$sign = $this->get_sign($postData,$this->equipment_view_url);$options = array(CURLOPT_HTTPHEADER => array("Accept:".$this->accept,"Content-Type:".$this->content_type,"X-Ca-Key:".$this->app_key,"X-Ca-Signature:".$sign,"Date:".$this->time,"X-Ca-Signature-Headers:"."x-ca-key",));$result = $this->curlPost($this->pre_url.$this->equipment_view_url,json_encode($postData),$options);return json_decode($result,true);}/*** 获取人员列表*/function get_person_list($response){//请求参数$postData['pageNo'] = isset($response['pageNo']) ? intval($response['pageNo']):"1";$postData['pageSize'] = isset($response['pageSize']) ? intval($response['pageSize']):"1000";$sign = $this->get_sign($postData,$this->person_list_url);$options = array(CURLOPT_HTTPHEADER => array("Accept:".$this->accept,"Content-Type:".$this->content_type,"X-Ca-Key:".$this->app_key,"X-Ca-Signature:".$sign,"Date:".$this->time,"X-Ca-Signature-Headers:"."x-ca-key",));$result = $this->curlPost($this->pre_url.$this->person_list_url,json_encode($postData),$options);return json_decode($result,true);}/*** 以appSecret为密钥,使用HmacSHA256算法对签名字符串生成消息摘要,对消息摘要使用BASE64算法生成签名(签名过程中的编码方式全为UTF-8)*/function get_sign($postData,$url){$sign_str = $this->get_sign_str($postData,$url); //签名字符串$priKey=$this->app_secret;$sign = hash_hmac('sha256', $sign_str, $priKey,true); //生成消息摘要$result = base64_encode($sign);return $result;}function get_sign_str($postData,$url){$next = "\n";$str = "POST".$next.$this->accept.$next.$this->content_type.$next.$this->time.$next;$str .= "x-ca-key:".$this->app_key.$next;$str .= $url;return $str;}public function getSignContent($params) {ksort($params);$stringToBeSigned = "";$i = 0;$len = count($params);foreach ($params as $k => $v) {if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {// 转换成目标字符集$v = $this->characet($v, $this->charset);if ($i == 0) {$stringToBeSigned .= "?$k" . "=" . "$v";}else {$stringToBeSigned .= "&" . "$k" . "=" . "$v";}$i++;}}unset ($k, $v);return $stringToBeSigned;}function get_message($postData){$str = str_replace(array('{','}','"'),'',json_encode($postData));return base64_encode(md5($str));}/*** 校验$value是否非空* if not set ,return true;* if is null , return true;**/protected function checkEmpty($value) {if (!isset($value))return true;if ($value === null)return true;if (trim($value) === "")return true;return false;}/*** 转换字符集编码* @param $data* @param $targetCharset* @return string*/function characet($data, $targetCharset) {if (!empty($data)) {$fileType = $this->charset;if (strcasecmp($fileType, $targetCharset) != 0) {$data = mb_convert_encoding($data, $targetCharset, $fileType);}}return $data;}public function curlPost($url = '', $postData = '', $options = array()){if (is_array($postData)) {$postData = http_build_query($postData);}$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数if (!empty($options)) {curl_setopt_array($ch, $options);}//https请求 不验证证书和hostcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$data = curl_exec($ch);curl_close($ch);return $data;}
}
前端video-js插件就可以播放hls的视频流
四:ffpemg
下载并安装FFMPEG
随便找的一个安装教程:https://blog.csdn.net/weixin_44704985/article/details/109532224
安装后需配置到环境变量
下载并安装mediamtx
https://github.com/bluenviron/mediamtx/releases
要是打不开自己想办法
开启mediamtx
如果不进行配置文件修改,使用默认配置,双击mediamtx.exe打开执行文件
使用FFMPEG进行视频推流
打开cmd 运行以下命令
ffmpeg -re -i 你的视频.mp4 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
这句的含义是:输入流为你指定的视频,可以是本地的文件,也可以是海康的rtsp视频流,如
ffmpeg -re -i rtsp://admin:hik12345@10.16.4.25:554/Streaming/Channels/101 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
输出流是 rtsp://127.0.0.1:8554/stream
将原视频格式重新编码为libvpx(p8)格式
使用http方式播放视频
在网页中运行以下url
http://127.0.0.1:8889/stream/h1
如果不出意外现在能够进行视频播放
mediamtx部分
我们可以看见,开启软件后会对RTSP、RTMP、HLS、WebRTC、SRT这几种协议类型输入流进行监听
可以通过ffmpeg将视频推送到对应协议的端口
使用FFMPEG进行视频推流(重点)
ffmpeg -re -i 你的视频.mp4 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
编码时可以设置参数,vcodec:视频编码格式,acodec:音频编码格式
格式有很多,可以使用以下方式查看具体编码格式
ffmpeg -encoders
这里我把输入视频转换为libvpx格式是因为我想直接使用http方式播放视频,而WebRTC只能支持几种格式视频播放
如果你想同时推送多个相机或视频源,可以修改输出路径,如:
rtsp://127.0.0.1:8554/stream/h1
rtsp://127.0.0.1:8554/stream/h2
rtsp://127.0.0.1:8554/stream/h3
。。。
如果是需要推送其他协议视频,请参考ffmpeg的命令行说明
相关文章:
海康威视监控web实时预览解决方案
海康威视摄像头都试rtsp流,web页面无法加载播放,所以就得转换成web页面可以播放的hls、rtmp等数据流来播放。 一:萤石云 使用萤石云平台,把rtsp转化成ezopen协议,然后使用组件UIKit 最佳实践 萤石开放平台API文档 …...
ubuntu运行qq音乐闪退
ubuntu运行qq音乐闪退 修改/usr/share/applications中的qqmusic.desktop,在Exec后加上 --no-sandbox,如下图所示: 该文件有可能是只读,权限不够的话用sudo vim qqmusic.desktop...
人脸检测(Python)
目录 环境: 初始化摄像头: 初始化FaceDetector对象: 获取摄像头帧: 获取数据: 绘制数据: 显示图像: 完整代码: 环境: cvzone库:cvzone是一个基于…...
Offer150-23:链表中环的入口节点
题目描述:如果一个链表中包含环,找了环的入口节点。例如,在下图所示的链表中,环的入口节点是节点4。 分析:第一步需要确定一个链表中是否包含环,可以用快慢指针来解决这个问题。定义两个指针,同时从链表的头…...
【linux】服务器创建RAID1
【linux】服务器创建RAID1 文章目录 【linux】服务器创建RAID1一、配置介绍raid介绍raid类型RAID 0:RAID 1:RAID 5:RAID 6:二、配置RAID硬件RAID:软件RAID:三、软件配置RAID1(以linux为例)1.先进入管理员模式2.安装mdadm工具3.创建raid1数组4.查看RAID数组状态5.格式化和挂载…...
记录自己Ubuntu加Nvidia驱动从入门到入土的一天
前言 记录一下自己这波澜壮阔的一天,遇到了很多问题,解决了很多问题,但是还有很多问题,终于在晚上的零点彻底放弃,重启windows。 安装乌班图 1.安装虚拟机 我开始什么操作系统的基础都没有,网上随便搜了…...
基于现有Docker镜像构建新的Docker镜像
1.拉取ubuntu 22.04的系统镜像 docker pull ubuntu:22.04 拉取成功后在DockerDesktop中可发现该镜像 2.启动刚才接取的ubuntu镜像 docker run --name Ubuntu22.04 -it -d -p 22:22 -p 80:80 -p 443:443 340d9b015b194dc6e2a13938944e0d016e57b9679963fdeb9ce021daac430221 启…...
Java 静态变量、静态代码块、普通代码块、构造方法的执行顺序
今天碰到这个问题,看了课程以及资料,做出解答。这是我自己绘制的图,按从上到下,从左到右的顺序执行。如有问题请联系我修正。 要点: 1、执行顺序分为两步,类加载和初始化阶段。 2、因为静态变量和静态代码块…...
计算机网络性能指标概述:速率、带宽、时延等
在计算机网络中,性能指标是衡量网络效率和质量的重要参数。本文将综合三篇关于计算机网络性能指标的文章,详细介绍速率、带宽、吞吐量、时延、时延带宽积、往返时延(RTT) 和利用率的概念及其在网络中的应用。 1. 速率(…...
众所周知沃尔玛1P是怎么运营?
沃尔玛的1P模式,即第一方供应商模式,是其独特的采购策略。在这种模式下,供应商先将商品卖给沃尔玛,由沃尔玛负责库存管理和销售。沃尔玛通过强大的采购和物流能力控制库存,确保商品品质,为客户提供更加…...
【Linux】静态库的制作和使用详解
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
2.贪心算法.基础
2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列2.1.思路二:动态规划法 3.最大子序和4.买股票的最佳时机24.1.思路二:动态规划法4.2.买股票的最佳时机 5.跳跃游戏5.1.跳跃游戏2 6.K次取反后最大化的数组和7.加油站8.分发糖果 总结 基础知识 什么是贪…...
用Python轻松转换PDF为CSV
数据的可访问性和可操作性是数据管理的核心要素。PDF格式因其跨平台兼容性和版面固定性,在文档分享和打印方面表现出色,尤其适用于报表、调查结果等数据的存储。然而,PDF的非结构化特性限制了其在数据分析领域的应用。相比之下,CS…...
关于微信支付-商户平台:查询订单提示“查询失败:操作失败,请稍候重试”的分析
目录 引子 分析 应对 小结 引子 在开发和实施微信 JSAPI 支付的应用后,我们遇到了一些问题,订单的状态更新不正常,当然我们首先需要从自身寻找原因和完善解决问题的办法和方案。在支付的过程中,客户会给我们一些反馈…...
掌握【Python异常处理】:打造健壮代码的现代编程指南
目录 编辑 1. 什么是异常? 知识点 示例 小李的理解 2. 常见的内置异常类型 知识点 示例 小李的理解 3. 异常机制的意义 知识点 示例 小李的理解 4. 如何处理异常 知识点 示例 小李的理解 5. 抛出异常 知识点 示例 小李的理解 6. Python内置…...
STM32点灯闪烁
stm32c8t6引脚图 开发板引脚图 GPIO端口的每个位可以由软件分别配置成 多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 配置GPIO端口步骤:开启时钟->使用结构体设置输出模式…...
Java-01-源码篇-04集合-05-SortedMap NavigableMap TreeMap
目录 一,SortedMap 二,NavigableMap 三,TreeMap 3.1 TreeMap 继承结构 3.2 TreeMap 属性 3.3 TreeMap 构造器 3.4 TreeMap 内部类 3.4.1 Values 3.4.2 KeySet 3.4.3 EntrySet 3.4.5 相关集合迭代器 3.4.5.1 PrivateEntryIterato…...
拥抱 AGI:PieDataCS 引领云原生数据计算系统新范式
自2023年后,人工智能技术进入了一个更为成熟和广泛应用的阶段,人工通用智能(AGI)这一概念也成为了科技界和产业界热议的焦点。本文将结合 AGI 时代背景,从架构设计到落地实践,详细介绍拓数派云原生数据计算…...
开放式耳机哪个品牌好?开放式耳机推荐
开放式耳机因其独特的设计,提供了更自然的听音体验和更好的环境声音感知,尤其适合长时间佩戴和户外运动使用,下面来推荐几款表现出色的开放式耳机: 悠律ringbuds pro凝声环(499元):凭借时尚潮流…...
kubernetes dashboard安装
1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 对应版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改对应的yaml,…...
Wan2.2-I2V-A14B部署教程:适配CUDA 12.4与驱动550.90.07的关键步骤
Wan2.2-I2V-A14B部署教程:适配CUDA 12.4与驱动550.90.07的关键步骤 1. 镜像概述与核心特性 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,针对RTX 4090D 24GB显存显卡和CUDA 12.4环境进行了深度适配。这个镜像最大的特点是开箱即用&#…...
突破QQ音乐格式限制:QMCFLAC2MP3的音乐自由解决方案
突破QQ音乐格式限制:QMCFLAC2MP3的音乐自由解决方案 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件,突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 QMCFLAC2MP3是一款专为破解QQ音乐格式限制设计…...
Qwen3.5-9B应用场景:开发者日常——Stack Overflow式问答+Debug辅助
Qwen3.5-9B应用场景:开发者日常——Stack Overflow式问答Debug辅助 1. 开发者新利器:Qwen3.5-9B大模型 作为一名开发者,你是否经常遇到这样的场景:深夜调试代码时遇到报错,Stack Overflow上找不到满意答案࿱…...
免费开源的质谱分析革新工具:从数据到发现的完整路径
免费开源的质谱分析革新工具:从数据到发现的完整路径 【免费下载链接】OpenMS The codebase of the OpenMS project 项目地址: https://gitcode.com/gh_mirrors/op/OpenMS OpenMS作为一款免费开源的质谱数据分析平台,为科研人员提供了从原始质谱数…...
ASLR:现代操作系统中的内存安全守护者
1. ASLR:现代操作系统的内存安全基石 想象一下你家的门锁每天都会自动更换位置——这就是ASLR(地址空间布局随机化)对计算机程序做的事。作为现代操作系统最基本的安全机制之一,ASLR通过打乱程序在内存中的"居住地址"&…...
SPSS加权处理实战:广告效果分析中的权重设置技巧(附详细步骤)
SPSS加权处理实战:广告效果分析中的权重设置技巧(附详细步骤) 当市场部门拿着厚厚一叠广告效果调研数据来找你时,最头疼的往往不是分析本身,而是那些看似简单却暗藏玄机的原始数据。上个月我就遇到这样一个案例&#x…...
Z-Image-Turbo镜像实战教程:开箱即用,9步生成高清图片
Z-Image-Turbo镜像实战教程:开箱即用,9步生成高清图片 1. 为什么选择Z-Image-Turbo镜像 如果你正在寻找一个能快速生成高质量图片的AI工具,Z-Image-Turbo镜像可能是目前最省心的选择。这个镜像最大的优势在于它已经预置了完整的32GB模型权重…...
Anaconda3 2025 安装教程【附安装包】快速安装下载
安装包https://qqstone.top/blog/anaconda3-2025 安装步骤 1. 解压压缩包 下载完成后,鼠标右击【Anaconda3 2025】压缩包,选择【解压至此处】。 2. 以管理员身份运行安装程序 打开解压后的文件夹,鼠标右击【Setup】选择【以管理员身份运行…...
LeaguePrank终极指南:免费打造个性化英雄联盟界面体验
LeaguePrank终极指南:免费打造个性化英雄联盟界面体验 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 还在为英雄联盟千篇一律的客户端界面感到乏味吗?LeaguePrank这款免费开源工具让你轻松自定义游戏中…...
YEDDA中文文本标注工具:零基础快速上手的高效标注解决方案
YEDDA中文文本标注工具:零基础快速上手的高效标注解决方案 【免费下载链接】yedda-py3 项目地址: https://gitcode.com/gh_mirrors/ye/yedda-py3 在人工智能和自然语言处理领域,数据标注是构建高质量模型的基础。YEDDA中文文本标注工具是一款专为…...
