浏览器无插件播放rtsp流解决方案
1. 安装 FFmpeg
参考 CentOS下安装FFmpeg,特别详细。
我遇到的错误和解决办法:
make ffmpeg 时报acc相关,版本太高,安装低版本 Linux下FFmpeg安装配置好后,使用中的一些问题
make 时报
if(x264_bit_depth>8)
错误,重装新版本ffmpeg 带有x264的ffmpeg编译出现小错误安装新版本 FFmpeg 后,
./configure
参数去掉 --enable-libnut缺少 pkg-config 则需要安装 Linux CentOS安装pkg-config
编译后的库需要加环境变量,否则ffmpeg打不开,库编译后的默认地址在
/usr/local/lib
。 export LD_LIBRARY_PATH 的使用
2. 安装NGINX (带rtmp模块)
安装和配置参考 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一) 。
/usr/sbin/nginx 是 docker nginx
/usr/local/nginx/sbin/nginx 是单独新装的nginx
完成之后使用博主的命令:
ffmpeg -i rtsp://admin:password@183.2.2.2:9204 -rtsp_transport tcp -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -r 25 -b:v 500k -s 640*480 -f flv rtmp://127.0.0.1:1935/myapp/test1
启动失败。报错UDP timeout, retrying with TCP [rtsp @ 0x1431700] method PAUSE failed: 551 Option not supported
。UDP 读取超时,加 -rtsp_transport tcp
强制使用tcp
读取rtsp
流 https://github.com/datarhei/restreamer/issues/3 。
命令: ffmpeg -rtsp_transport tcp -i rtsp://admin:password@183.2.2.2:9204 -c copy -f flv rtmp://127.0.0.1:1935/myapp/test1
成功运行之后,通过外网地址 rtmp://118.1.2.3:1935/myapp/test1
即可看到rtmp流。(外网端口需开启访问)
3. 转换 hls
参考 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二),修改nginx配置,将rtmp流定向到文件中。
使用 ffmpeg 命令:ffmpeg -rtsp_transport tcp -i rtsp://admin:password@183.2.2.2:9204 -vcodec copy -acodec copy -vbsf h264_mp4toannexb -f flv rtmp://127.0.0.1:1935/hls/test2
http://118.1.2.3:81/hls/test2.m3u8
即可查看流。
4. 失败的尝试:h5播放m3u8
https://www.zhihu.com/question/21087379 使用了videojs封装的 https://github.com/huangyaoxin/hLive 还是特别慢,浏览器一直打不开。VLC也特别慢。
5. 试试通过 websocket 的解决方案
本来计划尝试
把rtsp转换websocket再用video标签就可以播放,可以参考mse技术方案
SpecForge/html5_rtsp_player
尝试未果,放弃。
误打误撞,修改 nginx 配置,hls_fragment 1s;
页面不再黑屏可以播放出来。
又发现了 chunk_size 设置分段大小 https://www.cnblogs.com/tinywan/p/6292357.html
偶尔可以播出来,继续用 websocket 方法。
参考:html5播放rtsp方案,使用jsmpeg, 服务器端只有一个js文件websocket-relay.js
(使用 node.js 将 ffmpeg 生成的mpeg数据转到 websocket 服务);客户端展示使用一个js jsmpeg.min.js
和 html view-stream.html
文件(js用来打开ws,并绘制canvas到页面)。
最终显示效果 +ie
命令: ffmpeg -rtsp_transport tcp -re -i rtsp://admin:password@183.2.2.2:9204 -q 0 -f mpegts -b 50 -r 20 -ss 3 -s 800/600 -codec:v mpeg1video http://127.0.0.1:1936/1234
还是有点卡(请忽略里面奇怪的参数设置,为了传输的数据小,就乱试一些参数), 而且没声音,但是证明了直接使用 websocket 方案可行。
6. 优化视频传输速度
好好研究一下 FFmpeg 的参数。就是要找到使传输数据最小的参数。FFmpeg中文文档 - 其实就是翻译了FFmpeg的man手册。
发现-q
参数,使用固定的质量品质(VBR),其中值q
取值在0.01-255,越小质量越好,拿来设置-q 200
视频立马就糊了,但是每秒都能动了。设置为-q 1
(每次的bitrate=5800kbits/s 左右,导致传输太慢)
-q 50
比特率大小则为300+k
需要找个一个平衡点,优先正常传输(视频大小)的最大清晰度(图像质量)。-q 8
时,大小在1000k/s,质量也可接受。有点卡的话可调成-q 9
, 比特率维持在890k。
记录当前命令:
ffmpeg -rtsp_transport tcp -re -i rtsp://admin:password@183.2.2.2:9204 -f mpegts -r 20 -q 9 -an -s 800/600 -codec:v mpeg1video http://127.0.0.1:1936/1234
其中:-an
禁止音频(因为当前不需要音频,如果需要), -r 20
帧率, -s 800/600
屏幕尺寸
7. 多路视频传输
参考 html5播放rtsp方案 作者的 RtspWebSocket,修改了(https://github.com/phoboslab/jsmpeg) 中的js
,使多个流对应到多个 websocket 服务。
最终配置和命令如下:
node.js 启动:
node websocket-relay.js 1234 1936 82
监听 mpeg 流的端口1936, ws 服务端口82后台启动 ffmpeg 转视频格式为 mpeg 到 1936 端口:
nohup ffmpeg -rtsp_transport tcp -re -i rtsp://admin:password@183.2.2.2:9201 -f mpegts -r 20 -q 15 -an -s 800/600 -codec:v mpeg1video http://127.0.0.1:1936/1234/1 &
nohup ffmpeg -rtsp_transport tcp -re -i rtsp://admin:password@183.2.2.2:9204 -f mpegts -r 20 -q 15 -an -s 800/600 -codec:v mpeg1video http://127.0.0.1:1936/1234/4 &
注:转 m3u8
不需要 -rtsp_transport tcp 参数 ffmpeg -re -i http://v.warcraft.com/openlive/1a4ccf5dc3af4dc7a3c400f953fad089.m3u8 -f mpegts -r 20 -q 15 -an -s 800/600 -codec:v mpeg1video http://127.0.0.1:1936/1234/5
前台查看 (注:博客园可能会过滤script标签,导致不能正常显示代码,所以script前加了空格)
<canvas id="video-canvas"></canvas>
< script type="text/javascript" src="jsmpeg.min.js"></script>
< script type="text/javascript">
var canvas = document.getElementById('video-canvas');
var url = 'ws://118.1.2.3:82/4';
var player = new JSMpeg.Player(url, {canvas: canvas});
< /script>
浏览器无插件播放rtsp流解决方案的更多相关文章
- Web下无插件播放rtsp视频流的方案及各家优秀内容资源整理
Web下无插件播放rtsp视频流的方案及各家优秀内容资源整理 方案一:服务器端用 websocket 接受 rtsp ,然后,推送至客户端 实现步骤: 方案二:使用 ffmpeg + nginx 把 ...
- [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估计也不会有: 问题:可以自己做浏览器插件播放RTSP吗? 答案:可以的,chrome做ppapi插件 ...
- web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
本文转自:http://www.cnblogs.com/babosa/p/7355468.html 需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估 ...
- 使用Gin+WebSocket在HTML中无插件播放RTSP
在后台的开发中遇到了对接显示摄像头视频流的需求.目前获取海康及大华等主流的摄像头的视频流使用的基本都是RTSP协议.不过HTML页面并不能直接播放RTSP协议的视频流,查询了一番各种网页播放RTSP的 ...
- EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码
背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...
- EasyNVR、EasyDSS二次开发之:RTMP、HLS流在web页面进行无插件播放示例Demo代码
不管是基于EasyNVR还是EasyDSS,都是支持无插件直播,这也是未来视频直播的一个趋势.对于传统的浏览器插件播放谁用谁知道: 以上是软件自带播放展示 背景需求 对于EasyNVR和EasyDSS ...
- 浏览器播放rtsp流媒体解决方案
老板提了一个需求,想让网页上播放景区监控的画面,估计是想让游客达到未临其地,已知其境的状态吧. 说这个之前,还是先说一下什么是rtsp协议吧. RTSP(Real Time Streaming ...
- 通过Onvif设备探索获取EasyNVR网页无插件播放所需要的摄像机硬盘录像机NVR的RTSP地址
想实现网络监控摄像头进行视频直播的朋友门应该知道,方法其实非常简单,你不需要使用支持直播的网络摄像机,只需要经过一套流媒体服务器将监控摄像头的RTSP视频流转为RTMP\HLS\HTTP-FLV视频流 ...
- EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)
本文转自:https://blog.csdn.net/black_3717/article/details/79872725 背景说明: 由于视频自身的直观性和便利性,对于传统安防行业,摄像机的直播和 ...
随机推荐
- 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试
关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...
- 2022.02.05 DAY2
前言 今天陪老姐送对象去安庆了,上午还去了西风禅寺求了个签,第一次拿到中评签,看来今年还需要继续努力哈哈哈.一直到晚上才有时间去做点题目,今天依旧是leetcode. 题目 leetcode 1 两数 ...
- 精通 Pandas · 翻译完成
协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 ...
- AtCoder AGC002 简要题解
从今天开始,联赛之前大约要完成前 \(20\) 套 \(\rm AGC\),希望不要鸽. A 略 B 感觉这题比 \(\rm C\) 题难. 考虑对于每个时刻维护每个位置是否可能出现红球,那么一个时刻 ...
- iOS应用性能调优的建议和技巧--中高级--王朋
中级(这些是你可能在一些相对复杂情况下可能用到的) 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方法 12. 处理内存警告 13. 重用大开销 ...
- NSTimer、CADisplayLink、GCD 三种定时器的用法 —— 昉
在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 在iOS中有很多方法完成定时器的任务,例如 NSTimer.CADisp ...
- js金额转中文大写
基础参数: var AIW_number = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'} var AI ...
- 文件I/O流、文件、FileInputStreaam、FileOutputStream、FileReader、FileWriter的介绍和使用
一.文件:保存数据的地方 1.文件流:文件在程序中是以流的形式类操作的 类比: 流:数据在数据源(文件)和程序(内存)之间经历的路径 输入流:数据从数据源(文件)到程序(内存)的路径 输出流:数据从程 ...
- Linux_shell命令说明
1.1 pwd命令 该命令的英文解释为print working directory(打印工作目录).输入pwd命令,Linux会输出当前目录. 1.2 cd命令 cd命令用来改变所在目录. cd / ...
- ASP.NET Core 6框架揭秘实例演示[03]:Dapr初体验
也许你们可能没有接触过Dapr,但是一定对它"有所耳闻",感觉今年它一下子就火了,一时间很多人都在谈论它.我们从其命名(Dapr的全称是"分布式应用运行时Distribu ...