网页实现无插件RTSP 摄像头在线播放

2023-05-16

网页无插件RTSP 摄像头在线播放

  • 为什么要求无插件
    • 1,flv.js实现
    • 2,flv.js的利弊
      • 延迟
      • 吃资源
      • 对网络要求高
      • 流可复用
      • 对声音处理比较麻烦
    • 3,webrtc的利弊
      • 网络相关的资料少
      • 延迟低
      • 不吃资源
  • 总结
  • 项目中两者的使用
  • 视频对比

为什么要求无插件

谷歌浏览器2020年12月将不再支持Flash(前不久…)flash插件已经逐步被替代,另外安装插件比较麻烦,用户体验其实不好,为了实现网页无插件播放ipc(网络摄像头)的视频该怎么办呢?我这里有两种方法:1,通过使用flv.js实现 2,通过使用webrtc实现 下面讲一下两种技术的利弊和实现的结果。网络上现在相关的资料不是很多,现在写一下分享一下经验(这里使用的是大华摄像头,大华一键报警,海康一键报警),文章最后有两种方案视频对比。

1,flv.js实现

这里指哔哩哔哩(Bilibili)开源的flv.js,后端使用ffmpeg将摄像头的rtsp流进行转码,然后将http-flv的链接返回给前端,前端通过使用开源的flv.js播放这个http-flv链接即可实现网页播放。

2,flv.js的利弊

延迟

flv,js目前使用的比较多,相关资料比较多,比较容易上手,但在搭建结束后发现延迟稍高(2s左右),实际这个延迟已经很不错了,但是和想要的效果还是有点差距,在控制球型摄像机转动时总是慢半拍的感觉(有点憨憨的感觉233)下面会有视频演示。

吃资源

这个不是最致命的,关键是,使用ffmpeg在进行转码时,比较吃cpu和带宽,我笔记本是8代i5,在对一个摄像头进行转码时,cpu就高达70%,虽然后面对命令进行了优化,但是一直比较高,摄像头比较多的情况下可能比较难顶

对网络要求高

另外,在我们实验室中,遇到下午网络使用比较多的情况下,拉出的流极易丢包(但其他时段网比较好的情况下,比较流畅,没有卡顿),在网页上的表现就是一卡一卡,然后转半天…,体验十分糟糕,虽然后面在ffmpeg转码加上了“-rtsp_transport tcp”,使得情况有些好转,但是还是非常的卡!一直在转圈圈。只能说非常不理想。这些迫使我们没法使用flv,js,必须尝试下其他技术。

流可复用

如果一用户正在设备上查看摄像头视频,另一用户也请求了同一摄像头的视频,这时程序应进行判断,不需重复推流,直接将flv链接返回即可,避免对计算机资源的浪费,另外,用户关闭视频页面时,后端也要将其推流进程结束。

对声音处理比较麻烦

视频方面直接将rtsp流进行转码,那么音频呢(一键报警需要音频)?这个在当时也比较棘手,处理这个用了很长时间,使用的是pipe,但网上资料少之又少,在对ffmpeg进行转码时,两端为pipe,延迟较小,但相比与fmpeg操作文件和rtsp流的这种情况要麻烦一些,不够实现后声音延迟很小。报警器的声音发到网页时,通过rtsp流携带,但网页端的声音发回报警器时,需要使用ffmpeg对其进行转码(前端发的是webm格式的数据包,后端在拿到数据包后进行转码,然后通过sdk发给报警器即可实现)

3,webrtc的利弊

网络相关的资料少

webrtc和flv.js相比,资料少的可怜,如果使用这一方案,有需要去钻研学习,消耗的时间成本较高,但是效果比较出众,网页上播放非常完美。

延迟低

使用webrtc,延迟极低,甚至比大华sdk中的demo还快。WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。 real-time即体现出他在延迟方面的表现。目前主流浏览器都支持,并且微信小程序中也可以使用webrtc。兼容性很不错。

不吃资源

使用webrtc,不需要对流进行转码,这点就很好的避免了以后请求过多服务器顶不住的情况。并且也支持网页在播放视频的同时播放音频(海康一键报警已测)体验很好。

总结

如果,项目要求不高的情况下,使用flv.js也可以,上手比较容易。若是在延迟,资源等几个方面要求比较高的情况下,建议使用webrtc。测试时可以下vlc,恒星播放器等进行测试。想知道推出的流能不能再在flv.js中播放,可以使用 **http://bilibili.github.io/flv.js/demo/**这个链接进行测试。

项目中两者的使用

关于flv.js我是使用了一个springboot项目,向前端透出接口
例如
flv.js接口
可以看到我写的接口中包含的一些参数,通过这些参数进行拉流转码。
而webrtc我是需要首先调用add/ip地址/@dh(或者@hk)这个接口先将这个摄像头添加进去,然后调用play/ip地址来进行播放
webrtc相关接口

视频对比

大华sdk,webrtc,flv.js三者延迟对比
webrtc和北京时间对比
flv.js和北京时间对比
通过上面对比可以发现webrtc甚至比大华sdk速度还要快,并且支持音频(视频中没有展示),至此,项目中的音视频拉流播放算是结束了,前端将其封装进组件里也测试通过了。总的来说webrtc的效果很惊艳,想想现在央视新闻在连线记者时仍需要很长时间才有回应,我认为像这样优秀的技术在音视频方面应该更快的得到推广和使用。
希望文章对也在做相关项目的你有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网页实现无插件RTSP 摄像头在线播放 的相关文章

  • docker运行ubuntu22.04出现异常(转载)

    原文链接 xff1a https xyz uscwifi xyz post PRTc2ZYZx 参考 xff1a docker Why I cannot run 96 apt update 96 inside a fresh ubuntu
  • 为什么执行同一个程序每次输出的变量地址是不一样的

    首先看一下下面的代码 include lt stdio h gt int main int a 61 1 printf 34 p n 34 amp a return 0 然后我就很疑惑 xff0c 为什么每次的地址都是不一样的 为什么会有这
  • 中断的基本概念

    异常和中断 概念 xff1a 程序执行过程中CPU会遇到一些特殊情况 xff0c 是正在执行的程序被 中断 xff0c cpu中止原来正在执行的程序 xff0c 转到处理异常情况或特殊事件的程序去执行 xff0c 结束后再返回到原被中止的程
  • 8086CPU结构与功能

    微处理器的外部结构 微处理器的外部结构如下图所示 8086CPU片有40个管脚 微处理器通过这些引脚与外部的逻辑部件连接 完成信息的交换 CPU的这些引脚称为微处理器级的总线 功能 与存储器之间交换信息 指令及数据 与I O设备之间交换信息
  • 8086微处理器的寄存器组织

    8086CPU内部有14个16位的寄存器 按功能可以分为8个通用寄存器 4个段寄存器和两个控制寄存器 通用寄存器 通用寄存器可以分为两类 数据寄存器 AX BX CX DX 和地址寄存器 变址寄存器 SI DI SP BP 8086CPU有
  • python dict setdefault()方法

    描述 Python 字典 setdefault 函数和 get 方法 类似 如果键不存在于字典中 xff0c 将会添加键并将值设为默认值
  • CPU原生支持的任务切换方式

    CPU 厂商原本计划的一种任务切换方法 xff0c 并不是操作系统实例中任务切换的方法 未采用的原因是此方法效率不高 xff0c 现代操作系统很少用这种方法切换任务 为了支持多任务 xff0c CPU 厂商提供了 LDT TSS 这两种原生
  • linux内核2.6.16版本启动分析(1)

    电脑的启动流程详见这篇博文电脑开机过程 简述一下就是按下电源键后 cs ip置位到0xffff0的位置 而这个位置是固化的 上面都刻录好了BIOS程序 BIOS执行基本的硬件自检以及建立中断向量表 初始化BIOS中断等 接下来会把第一块磁盘
  • linux内核目录分析

    最近准备开始研读linux的内核了 今天在deepin内核版本为4 8 15上编译安装了内核4 19 6 本来是先装2 6 16版本的 但2 6 16版本的内核版本要求gcc的版本为4 6之下 装4 6版本的gcc的时候出了点问题 还没解决
  • AT&T语法

    在linux内核编写中 为了维持与gcc输出汇编程序的兼容性 as汇编器使用AT amp T系统的V的汇编语法 下面简称为AT amp T语法 这种语法与Intel汇编程序使用的语法 简称Intel语法 很不一样 他们之间的主要区别有以下几
  • eBPF入门

    BPF和eBPF是什么 简单来说 BPF提供了一种在和各种内核和应用程序事件发生时运行一段小程序的机制 BPF是一项灵活而高效的技术 由指令集 存储对象和辅助函数等几部分组成 由于它采用了虚拟指令集规范 因此也可将它视作一种虚拟机的实现 这
  • make详解

    Make 1 学习make的必要性 在Linux中 有一个用来维护程序模块关系和生成可执行程序的工具 xff0d make 他可以根据程序模块的修改情况重新编译链接生成中间代码或最终的可执行程序 执行make 命令 xff0c 需要一个名为
  • Linux:网络编程——UDP代码及其封装

    Linux xff1a 网络编程 UDP代码及其封装 UDP代码封装UDP 前面我们了解了 UDP的编程步骤为 xff1a 客户端 xff1a 创建套接字 接收消息 发送消息 接收消息 服务端 xff1a 创建套接字 绑定地址信息 接收消息
  • 卷积神经网络CNN笔记(Tensorflow)

    卷积神经网络学习笔记 一 卷积神经网络相关定义二 基本步骤三 数据增强1 基本原理2 keras实现3 卷积神经网络中的应用 四 常用代码五 实验代码六 使用预训练的卷积神经网络结语 一 卷积神经网络相关定义 卷积层 xff08 Convo
  • 基于GTSRB数据集的交通标志识别实验(Tensorflow)

    基于GTSRB的交通标志识别实验 一 数据数据读取 二 搭建网络三 模型预测四 附录模块导入Code 结语 一 数据 官网下载太慢 xff0c 然后我找到了一个整理好的数据集 链接 GTSRB 德国交通标志识别图像数据 数据集很干净 xff
  • 贝叶斯分类器原理——学习笔记

    贝叶斯分类器原理 简介一 逆概率推理与贝叶斯公式1 确定性推理与概率推理2 贝叶斯公式 二 贝叶斯分类的原理三 概率估计1 先验概率的估计2 类条件概率的估计 四 贝叶斯分类的错误率五 常用贝叶斯分类器1 最小错误率贝叶斯分类器2 最小风险
  • python format

    str format 基本语法是通过 和 来代替以前的 位置 format 函数可以接受不限个参数 xff0c 位置可以不按顺序 gt gt gt span class token string 34 34 span span class
  • 钢材表面缺陷检测分类不同图像增强方式的对比研究

    带钢表面缺陷检测分类不同图像增强方式的对比研究 1 直接使用图像数据进行深度学习2 图像增强图像分析形态学top hat变换图像锐化 3 图像增强后的深度学习总结 基于钢材表面缺陷库进行多种缺陷检测分类实验 xff0c 对比分析了使用卷积神
  • YOLO系列论文精读

    YOLO系列论文精读 YOLOV11 xff09 实现2 xff09 详细解读总结 YOLOV2 90001 xff09 Better xff1a 2 xff09 Faster xff1a 3 xff09 Stronger xff1a 总结
  • Git使用技巧

    Git使用技巧 基本操作 1 版本控制 版本控制 xff1a 进入文件夹 xff0c 右键点git bash here初始化 xff0c 输入git init管理 xff0c git add 文件名生成版本 xff0c git commit

随机推荐

  • Aruco检测Marker原理及代码详解(c++)

    Aruco检测Marker原理及代码详解 xff08 c 43 43 xff09 detectmarker主要流程 这个函数写在aruco cpp里 detectMarkers convertToGrey detectCandidates
  • pytorch学习

    Pytorch学习 一些简单记录 一 基本语法 1 Tensor 创建Tensor xff1a 创建未初始化矩阵 x 61 torch empty 5 3 创建零初始化矩阵 x 61 torch zeros 5 3 dtype 61 tor
  • 卡尔曼滤波及数据融合:PX4-EKF源码分析

    卡尔曼滤波及数据融合 xff1a PX4 EKF源码分析 卡尔曼滤波PX4 EKF predictState 状态预测L 259calculateOutputStates xff1a L 323存进Buffer的内容 xff1a 修正算法
  • Ubuntu18.04安装Gazebo并与ROS连接

    Ubuntu18 04安装Gazebo并与ROS连接 Gazebo安装Gazebo与ROS连接 Gazebo安装 注意 xff1a Ubuntu18 04需要下载Gazebo9这个版本 xff0c Gazebo的版本不要弄错 如果已经下载了
  • Tiva C(TM4C)的bootloader和启动过程与stm32对比

    gossip 最近在咸鱼捡了个123GXL的板子 xff0c 板子没到就先装好了环境 xff0c 然后看了看资料 xff0c 前天板子到了 xff0c 先点了个灯 xff0c 然后把板子扔到一边又继续看资料去了emmm 看资料的时候发现有些
  • 科学计数法e/E?计算机?表示?

    计算机表达10的幂是一般是用E或e xff0c 即 1 03乘10的9次方 xff0c 可简写为 1 03E 43 09 的形式 1 03乘10的9次方 xff0c 可简写为 1 03E 43 09 的形式 1 03乘10的 9次方 xff
  • vscode - 添加新项目到远程仓库(gitee)

    本篇文章介绍使用VScode 把新的项目推送到远程仓库的操作 前提 xff1a 1 xff0c 一个新的项目 xff08 我这里用的是vue的项目 xff09 2 xff0c 一个新的远程仓库 xff08 我这里用的是Gitee xff09
  • vscode跳转返回快捷键

    windows系统 Alt 43 navigate back Alt 43 navigate forward Mac系统 Ctrl navigate back Ctrl 43 Shift navigate forward On Ubuntu
  • Windows和Linux之间如何传递数据|两台Linux之间如何传递数据

    摘要 xff1a 我们租用了一台服务器 xff0c 然后我们想要把我们写的项目上传到自己的Linux服务器中 xff0c 那么我们应该怎么上传呢 xff1f 如果我们想要从服务器中下载一些资料 xff0c 那么又该如何进行呢 xff1f 看
  • 【C++】多态及原理

    多态及原理 一 多态的实现1 多态的概念2 构成多态还有两个条件 xff1a 3 虚函数4 override和final关键字 二 抽象类三 多态的原理 一 多态的实现 1 多态的概念 多态是在不同继承关系的类对象 xff0c 去调用同一函
  • 【排序算法】桶排序算法原理

    桶排序 条件适用场景算法描述算法实现 桶排序又叫箱排序 xff0c 是计数排序的升级版 xff0c 它的工作原理是将数组分到有限数量的桶子里 xff0c 然后对每个桶子再分别排序 xff08 有可能再使用别的排序算法或是以递归方式继续使用桶
  • FreeRTOS(二)创建任务

    任务 一 任务的基本概念 FreeRTOS的任务可以认为是一系列独立的任务的集合 每个任务在自己的环境中运行 xff0c 并且每个时刻只有一个任务在运行 xff0c 但从宏观上看 xff0c 所有的任务都在同时执行 xff1b 不同任务的切
  • FreeRTOS(三)启动流程

    启动流程 FreeRTOS的主要两种启动流程 在 main 函数中将硬件初始化 xff0c RTOS 系统初始化 xff0c 所有任务的创建这些都弄好 最后启动 RTOS 的调度器 xff0c 开始多任务的调度 xff08 先创建 xff0
  • echarts参数详细介绍

    文章目录 title xff1a 标题grid配置项 xff1a 图标离容器的距离tootip xff1a 提示xAxis xff1a x轴yAxis xff1a y轴legend xff1a 图表旁边的文字series xff1a dat
  • 微信云开发报错(Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。 (9f4aff33-7528-43e2-b0db-d273d)

    在微信小程序云开发时 xff0c 上传login的时候报错 Error ResourceNotFound FunctionName FunctionName 指定的资源不存在 9f4aff33 7528 43e2 b0db d273d0d6
  • 在阿里云搭建CENTOS7系统以及图形界面

    1 搭建CentOS7操作系统服务器 首先要购买服务器 xff0c 推荐学生认证可以获得好几个月的免费服务器 略去具体的过程 阿里云默认的系统不是CentOS7 xff0c 所以需要先将操作系统改成CentOS7 在实例的基本信息中 xff
  • VSCode 配置git 环境

    VSCode 配置git 环境 安装插件 查询Git 安装路径 配置json 文件 安装插件 git history 打开 git bash 下面展示一些 内联代码片 查询git 路径 where git where git 配置json
  • 模拟实现trim 方法,去除字符串两端的空格

    思路 从字符串的两端分别遍历 xff0c 找寻第一个非空字符记录非空字符的索引截取头部第一个非空字符到尾部第一个非空字符串之间的内容 span class token keyword function span span class tok
  • git token使用

    2021年8月13日 xff0c git不再支持密码方式验证 xff0c 而是建议使用token token生成 个人设置 gt Settings gt Personal access tokens gt Generate new toke
  • 网页实现无插件RTSP 摄像头在线播放

    网页无插件RTSP 摄像头在线播放 为什么要求无插件1 xff0c flv js实现2 xff0c flv js的利弊延迟吃资源对网络要求高流可复用对声音处理比较麻烦 3 xff0c webrtc的利弊网络相关的资料少延迟低不吃资源 总结项