निःशुल्क और एसएमएस के बिना साइट पर निगरानी कैमरे से वीडियो

ऑनलाइन साइट पर कैमरे से वीडियो दिखाने की जरूरत थी। मैंने कई विकल्प देखे (मैं टिप्पणियों के विकल्पों को पूरक करूंगा, यदि कोई हो):

  • कैमरे को एक्सेस दें। बस सुरक्षा कारणों से कैमरे के लिए पहुँच देना इसके लायक नहीं है। कैमरा पहले से ही बहुत कम भार पर लेट जाएगा।
  • वाणिज्यिक सेवा। हम उन्हें कैमरे और पैसे तक पहुंच देते हैं, वे हमें साइट पर पोस्ट करने के लिए एक लिंक देते हैं। वे कैमरा और उपयोगकर्ता ब्राउज़र संगतता, चैनल प्रदर्शन और उपलब्धता की समस्या को हल करते हैं
  • उनकी सुविधाओं पर। उपयोगकर्ता और कैमरे के बीच, कुछ ऐसा रखा गया है जो ब्राउज़र संगतता, प्रदर्शन और पहुंच के लिए जिम्मेदार है। हम समस्याओं को स्वयं हल करते हैं।

हम नीचे इस विकल्प पर विचार करेंगे। क्योंकि " फ़्लैश मर गया " या " फ़्लैश मरने वाला है, " एक साइट पर एक फ़्लैश प्लेयर रखने के विकल्प पर विचार नहीं किया गया था। इंटरनेट पर समाधान खोजने के कांटेदार रास्ते से टर्नकी समाधान नहीं हुआ है। मुझे एक साइकिल का आविष्कार करना था।

बिल्ली के तहत अधिक आविष्कार।

अधिक विस्तार से परिणामस्वरूप बाइक का विवरण:



सेटिंग्स के बारे में अधिक


चलाने के लिए कैमरा की जरूरत से प्रत्येक धारा के लिए 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 फुलएचडी पर 25 एफपीएस लिखता है
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


हम उदाहरण के लिए, डेबियन पैकेज के लिए डिफ़ॉल्ट फ़ाइल को छोटा करते हैं :

/ 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 द्वारा अद्यतन किया जाता है।

क्या हुआ:


  • यह काम करता है;
  • तीन साल पहले एटम प्रोसेसर पर सबसे बड़ा लोड ffmpeg है;
    • ध्वनि के बिना कैमरा पूर्ण HD का संकल्प - 1%;
    • ध्वनि के साथ पूर्ण HD कैमरा का संकल्प - 5%;

  • नग्नेक्स प्रक्रियाओं की संख्या - लोड और उपलब्ध चैनल द्वारा देखें। हम प्रोसेसर पर लोड को नहीं देख सकते थे - बस छोटी फ़ाइलों को अपलोड करने के लिए बहुत अधिक आवश्यकता नहीं है;
  • 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/hi401107/


All Articles