浏览器播放rtsp视频流:4、jsmpeg+go实现局域网下的rtsp视频流web端播放

article/2025/9/13 9:43:21

文章目录

    • 1.前言
    • 2.资料准备
    • 3.兼容性及适用性说明
    • 4.jsmpeg架构
    • 5.基于以上架构的go方案可行性分析
    • 6.编译和结果展示(编译坑点)
    • 7.最后

1.前言

之前的rtsp转webrtc的方案存在如下缺陷:1.只支持h264;2.受限于webrtc的理解难度以及搭建turn/stun的p2p服务等问题,对于局域网下的业务需求来说有些杀猪用牛刀的意思;3.ios不支持webrtc。

基于以上原因,我又找到了一些其它的方案进行了测试,目前看jsmpeg的方案更加适合我们的需求,而且普通压缩大小为135kb,gzip方式压缩后仅仅42kb,在嵌入式场景下也可以使用。只是转码服务需要ffmpeg,在不进程裁剪开发的情况下,需要在设备或者PC或者局域网路由器设备等上安装的该插件服务会比较大。

2.资料准备

官网:https://jsmpeg.com/

https://blog.csdn.net/a843334549/article/details/120697574

https://segmentfault.com/a/1190000040622805

https://juejin.cn/post/7057406701565116452

https://github.com/vCloudSail/jsmpeg-player

https://studygolang.com/articles/25474

3.兼容性及适用性说明

  • 这种方案适合局域网使用,目前测试实时性也非常不错,就像jempeg官网说的最低可达50ms,我测试下来对实时性是很满意的。
  • 此外,这种方案的视频编码和浏览器的兼容性非常棒,支持h264/h265,支持目前市面上的很多浏览器,我测试过Chrome浏览器、QQ浏览器、360浏览器、搜狗浏览器、Firefox浏览器、UC浏览器、Opera浏览器、Microsoft Edge浏览器、Safari 浏览器等都是可以运行的。

4.jsmpeg架构

  • jsmpeg比较重要的两个技术点:webgl、wasm,只需大致了解即可,若不对这两个模块进行二次开发,则无需深究
  • jsmpeg.js采用软解码方式,仅支持mpeg1格式视频、mp2格式音频!!! ,将视频流解码成图片并渲染到canvas上,并且可在源码基础上二次开发

在这里插入图片描述

根据这个架构我们的想法是jsmpeg客户端使用前端开发,该客户端唯一比较大的就是jsmpeg.js,不压缩也就100k多一点,压缩后更小,这样就可以放到很多设备中了,甚至很多嵌入式设备都都可以,然后我们将http、websocket服务端使用后端语言来开发,比如node.js、Java、Go、c++等,ffmpeg转码这里快速开发可以直接用ffmpeg,要再裁剪的话可以自己用C再开发一下,我们只需要转H264/H265到mpeg1,AAC到mp2,然后将对应的音视频格式的流通过websocket分发到jsmpeg客户端就可以了。

5.基于以上架构的go方案可行性分析

本来想自己开发的,结果随便搜了一下,已经有人用go的gin框架写了,互联网和开源拯救了大家,直接参考一下:https://studygolang.com/articles/25474

代码我整体看了一下,也跑了一下,修改了三个部分:

  • 1.一分钟后就会自动断开,这里注释就可以了(这里过一分钟就发送q主动断开了);
case <-time.After( 60 * time.Second):_, _ = stdin.Write([] byte ( "q" ))err := cmd.Wait()if err != nil {util.Log().Error( "Run ffmpeg err %v" , err.Error())} 

在这里插入图片描述

  • 2.ffmpeg调用使用当前路径的ffmpeg,否则如果你设备上安装了ffmpeg的话可能路径会乱
util.Log().Debug("FFmpeg cmd: ./ffmpeg %v", strings.Join(params, " "))
cmd := exec.Command("./ffmpeg", params...)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cwQNq0I1-1667219726107)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4f8be20a05d4fab9f93cc33960bc92f~tplv-k3u1fbpfcp-zoom-1.image)]

  • 3.html的js中增加了主动发送http请求获取ws地址的response处理部分,方便测试
<!DOCTYPE html>
<html>
<head><title>JSMpeg Stream Client</title><style type="text/css">html, body {text-align: center;}</style></head>
<body><canvas id="video-canvas"></canvas><canvas id="video-canvas1"></canvas><script type="text/javascript" src="jsmpeg.min.js"></script><script type="text/javascript">var request = new XMLHttpRequest();var url = "http://127.0.0.1:3000/stream/play"; //接口url
request.open("POST", url, true);request.setRequestHeader("Content-type", "application/json");request.send('{"url": "rtsp://192.168.31.204/main_stream"}'); //传入的数据,不同摄像头修改这里的rtsp地址即可
request.onreadystatechange = function(){//若响应完成且请求成功
if(request.readyState === 4 && request.status === 200){//do something, e.g. request.responseText
console.log("response:"+request.responseText)const resObj = JSON.parse(request.responseText);if (resObj['data']) {if (resObj['data']['path']) {console.log("ws path:"+resObj['data']['path'])var canvas1 = document.getElementById('video-canvas1');// var url = 'ws://127.0.0.1:3000/stream/live/test';
var wsUrl = 'ws://127.0.0.1:3000'+resObj['data']['path']console.log("ws url:"+wsUrl)var player = new JSMpeg.Player(wsUrl, {canvas: canvas1});}}}}</script>
</body>
</html>

这里还有一个坑点,留给大家去探索吧:长时间运行后如果推流的rtsp服务存在断流的话就没有画面了,这个没有webrtc服务的容错机制,需要自行判断处理,否则长时间跑之后画面就没了。

此外,http接口还可以增加ptz、preset等接口,这个仍然可以使用onvif协议来处理。

6.编译和结果展示(编译坑点)

编译Go代码很方便,但是我这里建议使用go1.18,go1.19在Windows下使用“./”会报错,必须使用“.\”,这个需要注意,然后就go build即可生成可执行程序了。

之后修改html中的request.send中的rtsp的地址后访问该html即可看到效果了:

在这里插入图片描述

7.最后

很多时候,共同讨论才能更快的进步,开源让Linux成长的很快,不管是家电还是汽车、手机等等,生活中很多东西都可以见到Linux,而固步自封的结果大家也已经看到不少了。


http://chatgpt.dhexx.cn/article/wxQXDhyf.shtml

相关文章

浏览器播放RTSP摄像头视频

一、项目需求&#xff0c;需要在chrome浏览器中播放rtsp协议的摄像头视频流 二、思路&#xff1a; 1、chrome已经不支持插件了&#xff0c;所以排除一切插件的思路&#xff1b; 2、浏览器目前停留在支持rtmp协议&#xff0c;hls协议流视频阶段&#xff0c;还没开始支持rtsp协议…

浏览器播放RTSP视频流几种解决方案

方案一: H5 websocket_rtsp_proxy 实现视频流直播 Streamedian 提供了一种“html5_rtsp_player websock_rtsp_proxy”的技术方案&#xff0c;可以通过html5的video标签直接播放RTSP的视频流。 整个架构如下图所示&#xff0c;分为服务器端和浏览器端两部分&#xff1a; 方案…

浏览器播放视频导致蓝牙耳机断开关机解决(漫步者W800BT)

参考链接&#xff1a;https://blog.csdn.net/weixin_44467131/article/details/111328638 原因&#xff1a;浏览器对硬件的的访问控制。 edge/chrome://flags搜索 media&#xff0c;找到这个&#xff0c;然后选择 Disabled&#xff0c;重启浏览器即可。

浏览器播放RTSP、RTMP等几种编码格式视频流

项目需求&#xff0c;需要前端页面实时展示摄像头采集的视频&#xff0c;视频啊&#xff0c;之前一点没接触过&#xff0c;经过一番调研、尝试&#xff0c;不得不说&#xff0c;网上文章真的大同小异&#xff0c;踩过许多坑&#xff0c;整理如下。 一、科普一下 1.流程 2.常见…

【vue】浏览器播放提示音audio

方法一&#xff1a;修改浏览器配置 代码 <audiocontrols"controls"hiddensrc"../../static/alert.mp3"ref"audio" ></audio>this.$refs.audio.currentTime 0; //从头开始播放提示音 this.$refs.audio.play(); //播放chrome配置允…

浏览器播放语音SpeechSynthesisUtterance

目的&#xff1a;因为公司项目需要来浏览器播放语音&#xff0c;看了科大讯飞的产品&#xff0c;后面有发现html5有原生的api&#xff0c;更加方便&#xff0c;所以使用了 一、语音合成和语音识别 “语音识别(Speech Recognition)”目前的就Chrome浏览器和Opera浏览器默认支持…

使用 Nginx 服务器配置 flv、mp4,可以直接浏览器播放

由于需求&#xff0c;需要提供浏览器播放 mp4 和 flv 视频功能。首先浏览器直接支持 flv 和 mp4 格式。只需要在对应的 WEB 服务上完成配置即可。 注意&#xff0c;我的需求是通过浏览器直接播放 MP4&#xff0c;而不是服务器提供 RTMP 功能&#xff0c;使用 RTMP 又是另外一种…

浏览器兼容video视频播放的多种方法

前言&#xff1a; 在 HTML 中播放视频并不容易&#xff01;因为直到现在&#xff0c;仍然不存在一项旨在网页上显示视频的标准。今天&#xff0c;大多数视频是通过插件&#xff08;比如 Flash&#xff09;来显示的。然而&#xff0c;并非所有浏览器都拥有同样的插件。 比如win…

关于浏览器播放视频的些许理解

浏览器地址栏输入服务器端视频的url即可播放。刚开始觉得还有点神奇&#xff0c;追踪network请求&#xff0c;发现视频还没下载完就可以播放&#xff0c;还可以拖动进度条到指定时间。分析了一下网络请求和视频格式&#xff0c;得出些许领悟。 1.服务器端支持文件的分块传输。即…

浏览器中如何让视频倍速播放

浏览器中视频免费倍速播放 文章目录 浏览器中视频免费倍速播放1.打开Edge的扩展页面2.安装global speed 3.安装tampermonkey beta4.打开tampermonkey5.安装某盘视频播放器脚本6.打开播放链接 此篇教程只针对于某盘网页版&#xff0c;浏览器为Edge 1.打开Edge的扩展页面 2.安装g…

rtsp流浏览器播放方案

rtsp流在主流浏览器并不支持直接播放。比如大华的视频流&#xff1a;rtsp://admin:123456 192.168.10.129/cam/realmonitor?channel1&subtype0&#xff0c;用vlc可以直接播放。但在浏览器会报ERR_UNKNOWN_URL_SCHEME。那如何在浏览器中播放呢。 以下列出几种方案。 1、安…

浏览器播放rtsp视频流解决方案

解决获取到海康摄像头的rtsp视频流&#xff0c;在浏览器播放问题。采用ffmpegnginxvideo.js解决方案&#xff08;Windows环境&#xff09; 资源下载 ffmpeg百度云资源&#xff1a;链接&#xff1a;https://pan.baidu.com/s/15pq8ErLZg9UcOgjqTkJZtw 提取码&#xff1a;8kyg…

IAR基础教程之函数跳转

IAR基础教程之函数跳转 一、编译 二、编译过程 三、等待内部链接 在编译完成后&#xff0c;等待绿条读满。 注意&#xff1a; 如果绿条没有完成&#xff0c;部分函数可能无法跳转。 如果工程编译出错&#xff0c;则无法完成如上工作。 四、函数跳转 右键单击 点击“Defini…

IAR安装使用教程

仅仅用于学习交流&#xff0c;非用于商业&#xff0c;如有异议&#xff0c;请联系我。 IAR 和谐 和谐工具&#xff1a;IARkg_Unis.exe ---------1.双击打开 IARkg_Unis.exe 文件。点击”Generate”生成序列号&#xff0c;每个电脑生成的不同&#xff0c;将序列号复制保存下来以…

IAR 安装教程

学校的物联网技术实验需要IAR for 51工具&#xff0c;起初一直找不到下载窗口在哪&#xff0c;最后终于找到并下载安装成功&#xff0c;就分享一下 1.官网下载安装包 https://www.iar.com/ 寻找对应设备版本&#xff1a; 不清楚的话可以在下面寻找设备进行查询&#xff0c;像…

IAR教程之IAR安装

IAR安装 1.下载 1.1打开官网 1.2找到要下载的版本 1.3下载 同学们除了可以下载最新版本尝鲜之外&#xff0c;还可以下载之前的版本。低版本IAR打开高版本IAR工程&#xff0c;工程配置会错乱&#xff0c;导致编译报错问题&#xff0c;所以一定要使用比推荐版本高的IAR 单片机I…

Iar新建工程配置使用教程

Iar新建工程配置使用教程 wangxl20180809 新建工程 打开demo目录&#xff0c;重新复制led目录并改成自己的工程名&#xff0c;如:demoled;&#xff08;本模板适合stm32f10X的芯片使用) 运行iar软件&#xff0c;进入demoled\Project目录选project.eww进行打开; 工程配置 修改…

IAR for STM8安装教程

先附上下载链接和提取码哈&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1x5n_nYP2RcN2N_G9p4qz2Q 提取码&#xff1a;h135 1、软件安装 解压完后点击安装包下的&#xff1a;EWSTM8-3104-Autorun.exe文件进行安装 在这我们选择第一个选项&#xff0c;记住有些安装…

IAR for 8051安装教程

安装步骤&#xff1a; 安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。 安装前请断网。 试装系统&#xff1a;win10 64bit 1.解压安装包。 2.选择你需要安装的IAR for 8051的版本&#xff0c;一般选择安装最新的版…

IAR for STM8的基本使用教程

很多第一次接触硬件的小伙伴们对于如何利用IAR编写程序并烧录到板子上感觉很困扰&#xff0c;今天我们就从IAR的基本使用来讲起&#xff0c;希望能给大家带来一定的帮助。 1. 创建新的工作环境&#xff1a; 2. 在工作环境下创建自己的工程&#xff1a; 如果有已存在的工程&…