需要在线显示来自摄像机的视频。我看到了几个选项(如果有的话,我会补充评论中的选项):- 授予访问相机的权限。出于安全原因,仅仅授予对相机的访问权限是不值得的。相机将已经以很小的负荷躺下。
- 商业服务。我们给他们访问相机和金钱的权限,他们给我们提供了一个链接,可以在网站上发布。他们解决了相机和用户浏览器兼容性,频道性能和可用性的问题
- 在他们的设施。在用户和相机之间放置一些内容,这些内容负责浏览器的兼容性,性能和可访问性。我们自己解决问题。
我们将在下面考虑此选项。因为 “ Flash 快死了 ”或“ Flash快要死了 ”,因此未考虑将Flash Player放在网站上的选择。在Internet上寻找解决方案的棘手道路并未导致交钥匙解决方案。我不得不发明一辆自行车。在猫下有更多发明。所得自行车的详细说明:
有关设置的更多信息
在摄像机的每个流上,您需要运行ffmpeg将rtsp转换为hls可以理解的文件。ffmpeg和声音流
/usr/bin/ffmpeg \
-i rtsp://< ONVIF Device Manager> \
-ar 44100 \
-acodec aac -ac 1 -strict -2 -crf 18 \
-c:v copy -preset ultrafast \
-flags -global_header \
-fflags flush_packets -tune zerolatency \
-hls_time 1 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments -start_number 0 \
/tmp/www/index1.m3u8
ffmpeg在启动时以FullHD写入25 fpsGuessed Channel Layout for Input Stream
Input
Metadata:
title : RTSP Session
Duration: N/A, start: 0.000000, bitrate: N/A
Stream
Stream
Output
Metadata:
title : RTSP Session
encoder : Lavf56.25.101
Stream
Stream
Metadata:
encoder : Lavc56.26.100 aac
Stream mapping:
Stream
Stream
, .
noname.
运作方式:
我们在不进行转码的情况下获取一个流,在/ tmp / www /文件夹中创建文件和要播放的列表。Nginx的
我们将debian软件包的默认文件缩短为例如:/ etc / nginx /启用网站/默认server {
listen 80 default_server;
listen [::]:80 default_server;
access_log off;
error_log /dev/null;
root /tmp/www;
index index.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
带有视频的示例页面:/tmp/www/index.html<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script>
<video id="video"></video>
<script>
if(Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource('/index1.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
}
</script>
该脚本应放置在本地,它没有外部依赖性。了解有关hls设置的更多信息。运作方式:
hls连接在页面上,并播放列表index1.m3u8中的文件。列表和文件由ffmpeg更新。发生了什么:
- 它有效;
- 三年前在Atom处理器上最大的负载是ffmpeg。
- 无声音的全高清摄像机分辨率-1%;
- 带声音的全高清摄像头的分辨率-5%;
- nginx进程数-按负载和可用通道监视。我们看不到处理器上的负载-仅上传小文件并不需要太多。
- 带有ffmpeg和nginx的服务器可以放置在任何地方,而不必放置在主机上或摄像机的位置。
- 流的滞后时间取决于列表中的文件数和文件的大小(以秒为单位)。例如,10秒钟的延迟并不会真正影响高层建筑的建造过程。
- 最好将视频文件放在tmpfs上,它们很小并且经常被覆盖。
- 所有服务应放在容器中。所有软件包都是标准的
FROM debian:jessie
; - 由于该操作,ffmpeg有时会崩溃,您需要对其进行监视并在崩溃时重新启动。
容器的输出顶部:top - 11:05:20 up 6 days, 12:15, 0 users, load average: 1.29, 1.09, 1.03
Tasks: 17 total, 1 running, 16 sleeping, 0 stopped, 0 zombie
%Cpu(s): 38.8 us, 1.0 sy, 0.0 ni, 59.6 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem: 16359132 total, 16027988 used, 331144 free, 782968 buffers
KiB Swap: 6369276 total, 3776 used, 6365500 free. 12784916 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
281 root 20 0 341040 29192 19632 S 4.7 0.2 10:08.39 ffmpeg
16 root 20 0 315888 27944 18984 S 1.0 0.2 2:50.95 ffmpeg
9 root 20 0 46916 15128 6408 S 0.3 0.1 0:58.04 supervisord
- 您可以在台式机和带有现代浏览器的移动设备上观看它;
- 在可预见的将来将不需要干预。
参考文献:
“ 的HLS实现” 演示工作HLS“ 的ffmpeg” nginx的可能“ 我的博客上补充和加强文章的文本