需要在线显示来自摄像机的视频。我看到了几个选项(如果有的话,我会补充评论中的选项):- 授予访问相机的权限。出于安全原因,仅仅授予对相机的访问权限是不值得的。相机将已经以很小的负荷躺下。
- 商业服务。我们给他们访问相机和金钱的权限,他们给我们提供了一个链接,可以在网站上发布。他们解决了相机和用户浏览器兼容性,频道性能和可用性的问题
- 在他们的设施。在用户和相机之间放置一些内容,这些内容负责浏览器的兼容性,性能和可访问性。我们自己解决问题。
我们将在下面考虑此选项。因为 “ 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的可能“ 我的博客上补充和加强文章的文本