来自现场监控摄像头的视频免费且无短信

需要在线显示来自摄像机的视频。我看到了几个选项(如果有的话,我会补充评论中的选项):

  • 授予访问相机的权限。出于安全原因,仅仅授予对相机的访问权限是不值得的。相机将已经以很小的负荷躺下。
  • 商业服务。我们给他们访问相机和金钱的权限,他们给我们提供了一个链接,可以在网站上发布。他们解决了相机和用户浏览器兼容性,频道性能和可用性的问题
  • 在他们的设施。在用户和相机之间放置一些内容,这些内容负责浏览器的兼容性,性能和可访问性。我们自己解决问题。

我们将在下面考虑此选项。因为 Flash 死了 ”或“ Flash快要死了 ”,因此未考虑将Flash Player放在网站上的选择。在Internet上寻找解决方案的棘手道路并未导致交钥匙解决方案。我不得不发明一辆自行车。

在猫下有更多发明。

所得自行车的详细说明:


  • 闭路电视摄像机通过rtsp协议流式传输
  • ffmpeg从摄像机获取视频流,并创建视频以通过html5标准video标签显示
  • nginx将创建的文件提供给用户
  • 视频显示的帮助下在页面上HLS,或者更确切地说,这在这里实现

有关设置的更多信息


在摄像机的每个流上,您需要运行ffmpegrtsp转换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 fps
Guessed Channel Layout for  Input Stream #0.1 : mono
Input #0, rtsp, from 'rtsp://192.168.X.X:554/user=admin_password=tlJwpbo6_channel=1_stream=0.sdp?':
  Metadata:
    title           : RTSP Session
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: h264 (Baseline), yuv420p, 1920x1080, 25 fps, 9 tbr, 90k tbn, 50 tbc
    Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
Output #0, hls, to '/tmp/www/index1.m3u8':
  Metadata:
    title           : RTSP Session
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264, yuv420p, 1920x1080, q=2-31, 25 fps, 9 tbr, 90k tbn, 25 tbc
    Stream #0:1: Audio: aac, 44100 Hz, mono, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.26.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (pcm_alaw (native) -> aac (native))
, .
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 / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                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的可能
我的博客上补充和加强文章的文本

Source: https://habr.com/ru/post/zh-CN401107/


All Articles