Tomcat、FFmpeg实现浏览器无插件播放监控设备视频
Tomcat、FFmpeg实现浏览器无插件播放IPC、NVR设备视频
使用FFmpeg将rtsp流转换为hls流,web页面通过video.js读取Tomcat中的数据实现视频播放
一、软件安装
(1)安装Tomcat
Windows平台下,建议下载安装版的Tomcat。
Linux平台(以centos7为例),可下载tar.gz格式的包,在webapps目录下创建要存放m3u8文件的目录(例如hls)。这个目录是ffmpeg命令执行时输出.ts文件的目录,也是video标签中src要填写的值。
(2)安装FFmpeg
-
Windows平台下,下载FFmpeg,下载完成后解压并将文件夹复制到想要安装的盘符。完成后配置环境变量,将安装目录中的bin目录配置到系统变量path中,如D:\MyWork\ffmpeg\bin。在新建的cmd窗口中输入ffmpeg -version后,如果出现版本号则安装成功。
-
Linux平台安装FFmpeg时,可以通过编译安装。
也可以通过nux-desktop源安装(不建议,我安装之后会执行命令会报错,可能是版本太低)。安装完成后,在终端中输入ffmpeg -version后,如果出现版本号则安装成功。
二、命令行转流
(1)Windows下的命令:
ffmpeg -i "rtsp://admin:aaa@qq.com:554/cam/realmonitor?channel=1&subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 D:\apache-tomcat-9.0.27\webapps\hls\test.m3u8
(2)Linux下的命令:
ffmpeg -rtsp_transport tcp -i "rtsp://admin:aaa@qq.com:554/cam/realmonitor?channel=1&subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 1 -hls_wrap 15 /opt/apache-tomcat-9.0.27/webapps/hls/test.m3u8
由于FFmpeg默认使用UDP协议,我在Linux中使用时出现超时的情况,所以建议强制使用TCP方式读取rtsp流:
-rtsp_transport tcp。
其他参数代表的含义:
-hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence nu+mber的值为number,默认值为0
(4)使用FFmpeg拉流时,网络摄像头与网络硬盘录像机RTSP地址的区别
使用网络摄像头
rtsp://username:aaa@qq.com:port/cam/realmonitor?channel=摄像头的信道&subtype=码流
用户名、密码、IP地址、端口号都是摄像头的;
码流分为主码流(0)和辅码流(1)两种。
使用网络硬盘摄像机
rtsp://username:aaa@qq.com:port/cam/realmonitor?channel=摄像头所在通道&subtype=码流
用户名、密码、IP地址、端口号均为硬盘录像机的;
channel为摄像头的通道:如果硬盘录像机最大支持8路网络视频接入,那么channel最大值为8,最多可接入8个摄像头,每一路为一个通道;
码流同样分为主码流(0)和辅码流(1)两种。
三、视频实时播放与视频回放
(1)实时播放
使用实时播放时,RTSP应当书写为:
rtsp://username:aaa@qq.com:port/cam/realmonitor?channel=摄像头的信道&subtype=码流
此时,通过网络摄像头或者硬盘录像机都可以获取实时视频
(2)视频回放
使用视频回放时,RTSP应当书写为:
rtsp://username:aaa@qq.com:port/cam/playback?channel=摄像头所在通道&subtype=码流&starttime=yyyy_MM_dd_HH_mm_s&endtime=yyyy_MM_dd_HH_mm_s
或
rtsp://username:aaa@qq.com:port/cam/playback?channel=摄像头所在通道&subtype=码流&starttime=yyyy_MM_dd_HH_mm_s
starttime表示开始时间,endtime表示结束时间
使用视频回放时,应该连接硬盘录像机或有存储功能的网络摄像头
实时播放与回放rtsp地址的区别在于端口号后边的路径:
实时播放的路径为/cam/realmonitor、而视频回放的路径为/cam/playback/
四、HTML页面播放视频
通过浏览器播放m3u8文件,将video标签中的src替换为
http://IP地址/hls/test.m3u8
type设置为
application/x-mpegURL。
通过muted和autoplay="autoplay"搭配的方式可以实现自动播放功能。
对于video.js的使用,请参考video.js使用
demo代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Video.js 7.4.1</title>
<link href="./video-js.min.css" rel="stylesheet">
<script src="./video.min.js"></script>
</head>
<body>
<div>
<video id="my-video1" width="795" height="445" class="video-js" muted preload="auto" autoplay="autoplay" data-setup="{}">
<source src="http://Tomcat所在设备的IP地址:Tomcat的端口号/hls/test.m3u8" type="application/x-mpegURL">
</video>
</div>
</body>
</html>
效果:
参考
有疑问的话可以给我发消息哦~
上一篇: 新来笑话合集,让你一次笑个够
下一篇: 这种态度是不对的应该笑呵呵的