Quel est le principal problème des caméras IP modernes à faible coût? Vous ne pouvez pas simplement les ajouter à votre site! Ils rendent les vidéos dans un format complètement différent de ce que les navigateurs comprennent. Oui, bien sûr, vous pouvez aller directement à la caméra (et souvent uniquement avec IE), et de nombreux modèles ont un "cloud". Mais le problème demeure - je ne peux pas simplement prendre et placer un appareil photo sur un site, comme une simple photo!
J'ai passé en revue de nombreuses solutions pour organiser des diffusions à partir de caméras IP de différents fournisseurs, y compris des solutions OpenSource. La plupart ont un inconvénient, qui est très critique pour moi: le système capte en permanence le flux de la caméra, même s'il n'y a pas de spectateurs.
Dans mon cas, il était nécessaire d'afficher une image sur le site à partir de caméras distantes connectées via un canal 4G dans une zone éloignée. La vitesse de téléchargement ne dépassait pas 10 Mbps dans le meilleur des cas, mais elle était généralement de 2-3 Mbps. Bien que le trafic soit illimité, le fournisseur a officieusement averti que la consommation de plus de 200 Go de trafic aura certainement un impact négatif, tel est le conditionnel «illimité». Je suppose qu'ils "réduiront" simplement la vitesse.
Certaines des solutions trouvées sur les espaces ouverts de GitHub étaient pratiquement adaptées, mais n'avaient pas une bonne documentation ou semblaient simplement compliquées et encombrantes.
Et j'avais besoin d'un système de diffusion en ligne avec les propriétés suivantes:
ne consomme pas de trafic en l'absence de téléspectateurs;
nombre quotidien moyen de spectateurs simultanés - 1 à 3 personnes;
prend en charge, sinon tous, la plupart des navigateurs Internet populaires, y compris les navigateurs mobiles;
aussi simple et compréhensible que possible;
peu coûteux;
de préférence OpenSource.
Ayant une riche expérience avec le programme FFMpeg, j'ai décidé d'essayer d'implémenter toutes ces fonctionnalités par moi-même. En fin de compte, qu'est-ce qui ne va pas avec un "vélo" fabriqué de vos propres mains, si vous en avez l'envie et le temps?
« , iVideon?» . , , , . , , ( ). , ( , ). , , . , «iVideon-» .
, , , Google Chrome Mozilla Firefox, H.264- . « » FFMpeg :
-movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov
FFMpeg, MP4- moov moof .
:
«-c copy
» ;
«-an
» — (- , , );
«-t
» ( , );
«-rtsp_transport tcp
» — , RTP-, NAT ( );
«-probesize 32
» — ;
«-stimeout 5000000
» — - (5 ).
, PHP? . :
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Accept-Ranges:bytes');
header('Connection:keep-alive');
header('Content-type: video/mp4');
PHP FFMpeg :
passthru("ffmpeg < > -f mp4 pipe:");
, , Safari Mac iOS. , MP4 , — . , «» Google Chrome, .
, — MJPEG , , MP4, — ? — , , , … , , . , .
, . , :
: OGV WEBM;
();
, , (, ), , ;
- Mac. - — , . , «». Safari — .
, , — . :
, , Debian, Apache+PHP7 FFMpeg;
SSL- ;
www ;
camera.php (; ) $key, $redirectToIfBackground , ;
camera.php : camera.php?a=<rtsp- base64>&b=<>&c=<rtsp- base64>. «c» , .
, 5 . , base64 , http://base64.ru/, RTSP-.
, . MODX Revolution, , . CMS. $key $camera_server_url ( — , , ).
, :
{camera**RTSP-*RTSP- }
RTSP- . , . RTSP- , Onvif Device Manager. , « ».
. , , , . , «» camera.php, RTSP-, ( RTSP-), $key. , RTSP. «» . , . , … - «», .
D'ailleurs, personnellement, toutes mes caméras sont connectées via VPN (j'adore Wireguard) en un seul réseau, tous les liens que je m'inscris avec "gray IP". Pratique, sûr, heureux.
Mon code est publié sous la licence MIT.
Le projet utilise la bibliothèque ifvisible.js développée par Serkan Yerşen, sous licence du MIT.