一、项目需求,需要在chrome浏览器中播放rtsp协议的摄像头视频流

二、思路:
1、chrome已经不支持插件了,所以排除一切插件的思路;
2、浏览器目前停留在支持rtmp协议,hls协议流视频阶段,还没开始支持rtsp协议,所以可以考虑将rtsp转成rtmp和hls。在领导的指导下,选择的是rtmp,至于hls有兴趣的同学可以自己去研究,整体思路与转rtmp是一直的。
3、有了大体方向就开始着手找资料了,网上有很多使用FFmpeg+nginx来将rtsp转rtmp的,当然也有可以花钱去买转码器的,那就更加方便了。(转码器也不是很贵,项目资金充足的,而且不想花时间研究的,可以考虑这个会更好);

三、实现:
3.1、rtsp公网测试例子:rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov
3.2、FFmpeg:
3.2.1 资源下载:通过官网http://www.ffmpeg.org/download.html或其他途径下载ffmpeg(https://ffmpeg.zeranoe.com/builds),解压到随意目录下,解压之后如下图:

3.2.2配置环境变量,命令窗口输入“ffmpeg -version”出现如下图及说明环境配置正确

3.3、nginx:
3.3.1、安装配置nginx,配置已经配置好了,直接下载即可使用。nginx包和配置文件

3.3.2、修改conf文件夹下nginx.conf文件,文件内容如下:

worker_processes  1;error_log  logs/error.log debug;events {worker_connections  1024;
}rtmp {server {listen 1935;chunk_size 4000;application live {live on;}application hls {live on;hls on;  hls_path temp/hls;  hls_fragment 8s;  }}
}http {include        mime.types;default_type    application/octet-stream;sendfile        on;keepalive_timeout    65;server {listen      20000;location / {root html;index    index.html index.htm;}location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root html;}location /hls {  #server hls fragments  types{  application/vnd.apple.mpegurl m3u8;  video/mp2t ts;  }  alias temp/hls;  expires -1;  }error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

3.3.3、修改完成后启动nginx,
有多种方式启动nginx,(1)、直接双击nginx.exe,双击后一个黑色的弹框一闪而过,(2)、打开cmd命令窗口,切换到nginx解压目录下,输入命令nginx.exe或者start nginx,回车即可
检查nginx是否启动成功:
直接在浏览器中输入网址http:localhost:post,post为nginx.conf中设置的,此处我设置的是20000,回车出现如下

说明启动成功了。

3.3.4、关闭nginx:
如果使用cmd命令窗口启动nginx,关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx
(1)、输入nginx命令 nginx -s stop(快速停止nginx)或者nginx -s quit(完整有序的停止nginx)
(2)使用taskkill taskkilll /f /t /im nginx.exe
**3.3.5、**nginx还可以做负载均衡,此处没有研究,有需求的同学可自行研究。

3.3.6、开始转码:
在cmd窗口执行如下命令

ffmpeg -re  -rtsp_transport tcp -i "rtsp地址" -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 "rtmp://本机地址:1935(nginx.conf的rtmp模块下listen)/live(rtmp模块下application设置)/test(随便取名字)"

启动之后如下图:

注意:
1、ffmpeg转码与nginx代理可以不在同一台服务器上进行,但这种情况对带宽要求较高
2、如果rtsp视频流断开,可能导致转码程序一直等待,因此加入-stimeout参数(表示超时时间),如果超时未获取到视频流,则报错退出(如需重新获取,可以写个bat脚本,循环执行ffmpeg命令)

3.4、chrome中播放rtmp实时流:
H5的video标签是不支持rtmp的,但是我们有video.js可以解决这一问题。然而在使用video.js的时候遇到了问题,刚开始怎么都播不出来,后来经过一番查找发现,在video.js 6以上的版本是已经没法播放了。原因是video.js播放rtmp的原理还是通过flash。可能是video为了紧跟步伐,去掉了flash。
代码包请点击这里下载
将代码修改如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Access-Control-Allow-Origin" content="*"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><title>测试rtmp直播源</title>
<script src="js/video.js"></script>
<link href="css/video-js.css" rel="stylesheet">
<!-- If you'd like to support IE8 -->
<script src="js/videojs-ie8.min.js"></script>
</head>
<body>
<div class="openFlashTips" style="width:300px;position:absolute;top:20px;left:225px;z-Index:9999;color:white">视频无法正常播放,请点击下方启用flash</div>
<video id="my-video" style="color:black;width:750px;height:350px" class="video-js" autoplay controls preload="auto" width="750" height="350" data-setup="{}"><source src='rtmp://172.16.15.240:1935/live/test11' type='rtmp/flv'/>
</video>
<embed width="300" height="70" class="openFlash" style="position:absolute;top:130px;left:225px;z-Index:9999;" type="application/x-shockwave-flash">
<script type="text/javascript" language="JavaScript">function flashChecker() {var hasFlash = 0;         //是否安装了flashvar flashVersion = 0; //flash版本var isIE = /*@cc_on!@*/0;      //是否IE浏览器if (isIE) {var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');if (swf) {hasFlash = 1;VSwf = swf.GetVariable("$version");flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]);}} else {if (navigator.plugins && navigator.plugins.length > 0) {var swf = navigator.plugins["Shockwave Flash"];if (swf) {hasFlash = 1;var words = swf.description.split(" ");for (var i = 0; i < words.length; ++i) {if (isNaN(parseInt(words[i]))) continue;flashVersion = parseInt(words[i]);}}}}return {f: hasFlash, v: flashVersion};}var fls = flashChecker();var s = "";if (fls.f) {document.getElementsByClassName("openFlash")[0].style.display = "none";document.getElementsByClassName("openFlashTips")[0].style.display = "none";
//        document.write("您安装了flash,当前flash版本为: " + fls.v + ".x");}else {document.getElementsByClassName("openFlash")[0].style.display = "block";document.getElementsByClassName("openFlashTips")[0].style.display = "block";
//        document.write("您没有安装flash");}
</script>
</body>
</html>

启动tomcat,在浏览器中输入网址即可查看实时视频(如下图的测试视频)。

正式环境测试效果:转码之后差不多延迟在3-5秒左右。

欢迎大家一起交流,如果文章中有错误的地方,也希望指正。

浏览器播放RTSP摄像头视频相关推荐

  1. 浏览器播放rtsp视频,基于nodeJs

    浏览器播放rtsp视频,基于nodeJs 1:安装ffmpeg,并且配置环境变量. 下载地址:http://ffmpeg.zeranoe.com/builds/ 或者: 百度云链接:https://p ...

  2. 在浏览器中使用VLC插件实现播放RTSP流视频

    在浏览器中使用VLC插件实现播放RTSP流视频 一.安装VLC插件 二.编写测试html文件 三.生成一个测试用RTSP流视频 四.在浏览器中播放RTSP流视频 五.VLC插件知识扩展 1.VLC插件 ...

  3. H5Stream播放RTSP流视频

    H5Stream入门级应用,播放RTSP流视频 看到网上关于的H5Stream的资料比较少,故本文介绍了H5Stream的入门级使用教程,播放摄像头的RTSP视频流和和本地测试视频.包括H5Strea ...

  4. rtsp 测试地址_TranServer:简单实现浏览器播放RTSP流

    市面上有很多浏览器播放RTSP的解决方案,参见(https://juejin.im/post/6844903877217632264). 可惜这些方式,都不太适合上百个摄像头的接入,所以自己写了个服务 ...

  5. 浏览器播放rtsp流媒体解决方案

    浏览器播放rtsp流媒体解决方案 参考文章: (1)浏览器播放rtsp流媒体解决方案 (2)https://www.cnblogs.com/gaoji/p/6872365.html 备忘一下.

  6. 实现h5端播放rtsp流视频--通过ffmpeg转流实现

    实现h5端播放rtsp流视频–通过ffmpeg转流实现 安装包可通过官网下载,也可以评论邮箱发给你 #1. 安装 ffmpeg 解压 ffmpeg.zip 添加系统环境变量 cmd 输入 ffmpeg ...

  7. 浏览器播放rtsp视频流:3、rtsp转webrtc播放

    浏览器播放rtsp视频流:3.rtsp转webrtc播放 文章目录 浏览器播放rtsp视频流:3.rtsp转webrtc播放 1. 前言 2. rtsp转webRTC 3. 初步测试结果 4. 结合我 ...

  8. html播放rtsp视频,浏览器播放rtsp视频流解决方案

    最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究.而浏览器不能直接播放,只有通过插件或者转码来实现这个需求. 要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一 ...

  9. html播放rtsp流,浏览器播放rtsp视频流解决方案

    最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究.而浏览器不能直接播放,只有通过插件或者转码来实现这个需求. 要实现这个目的,可以采用的方案非常得多,有商业的也有开源的,这里主要列举一 ...

最新文章

  1. n2n windows 编译安装文件
  2. python计时器精度_在python中获得更精确的计时器
  3. FTP-工作原理及Vsftpd基础配置
  4. Firefox3与WEB客户端开发相关的新特性
  5. 用立异,声东击西——贵阳Flex创客团队航行器吸引世界眼光
  6. 探索Julia(part14)--学生得分描述性统计案例
  7. Linux网络配置与远程连接
  8. C# WPF 定时器
  9. 深度学习中的激活函数及其作用
  10. 西奥电梯服务器故障维修,干货│西奥电梯故障分析和技术文件
  11. Codeforces 581A - Vasya the Hipster 题解
  12. 删除后别人的微信号变成wxid_重磅!只需三步修改微信号,不用设置出生日期...
  13. 008产品设计的思考(创造思维+用户体验+用户画像+用户群体)
  14. AD生成顶层丝印、底层丝印
  15. 深入理解计算机系统2——信息表示和处理
  16. ARP攻击,使用kali arpspoof
  17. 计算机一级execl怎么学,【计算机一级 excel】大学计算机一级excle
  18. jsTree插件简介(一)
  19. Invoking “cmake“ failed 没有安装serial 包
  20. 英飞凌——飞行时间的工作原理是什么

热门文章

  1. 癌症信号--大家如果觉得有用就转给朋友看
  2. CentOS_6.5安装中文输入法
  3. 2021 中国开源年度报告日文版正式发布,持续向海外传播中国开源声量!
  4. 【Qihoo360之Atlas配置文件详解】
  5. GridLayout(网格布局)
  6. tRNA 二级结构预测可视化
  7. 数说CS|北航计算机保研生源大起底!
  8. 2021到啦!“锦鲤揭晓”,送您一份专属的新年祝福...
  9. Ubuntu18.04安装ch340驱动
  10. python permission denied怎么解决_Permission denied的解决办法