La forma más fácil (para los que tienen conocimientos de Linux) y la forma más económica de colocar una cámara IP en un sitio para una audiencia pequeña

¿Cuál es el principal problema de las cámaras IP modernas de bajo coste? ¡No puede simplemente agregarlos a su sitio! Representan videos en un formato completamente diferente al que entienden los navegadores. Sí, por supuesto, puedes ir directamente a la cámara (y a menudo solo con IE), y muchos modelos tienen una "nube". Pero el problema persiste: ¡no puedo simplemente tomar y colocar una cámara en un sitio, como una simple imagen!





Revisé muchas soluciones para organizar transmisiones desde cámaras IP de diferentes proveedores, incluidas las soluciones OpenSource. La mayoría tiene un inconveniente, que es muy importante para mí: el sistema captura constantemente la transmisión de la cámara, incluso si no hay espectadores.





En mi caso, fue necesario mostrar una imagen en el sitio desde cámaras remotas conectadas a través de un canal 4G en un área remota. La velocidad de carga no superó los 10 Mbps en el mejor de los casos, pero por lo general era de 2-3 Mbps. Aunque el tráfico es ilimitado, el proveedor advirtió extraoficialmente que el consumo de más de 200 GB de tráfico seguramente tendrá un impacto negativo, tal es el condicional "ilimitado". Supongo que simplemente "reducirán" la velocidad.





Algunas de las soluciones encontradas en los espacios abiertos de GitHub eran prácticamente adecuadas, pero no tenían buena documentación o parecían simplemente complicadas y engorrosas.





Y necesitaba un sistema de transmisión en línea con las siguientes propiedades:





  1. no consume tráfico en ausencia de espectadores;





  2. número medio diario simultáneo de espectadores - 1-3 personas;





  3. admite, si no todos, la mayoría de los navegadores de Internet más populares, incluidos los móviles;





  4. lo más simple y comprensible posible;





  5. barato;





  6. preferiblemente OpenSource.





Teniendo una gran experiencia con el programa FFMpeg, decidí intentar implementar toda esta funcionalidad por mi cuenta. Al final, ¿qué tiene de malo una "bicicleta" hecha con tus propias manos, si tienes las ganas y el tiempo?





« , 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, — ? — , , , … , , . , .





, . , :





  1. : OGV WEBM;





  2. ();





  3. , , (, ), , ;





  4. - Mac. - — , . , «».  Safari — .





, , — . :





  1. , , Debian, Apache+PHP7 FFMpeg;





  2. SSL- ;





  3. www ;





  4. camera.php (; ) $key, $redirectToIfBackground , ;





  5. 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. «» . , . , … - «», .





Por cierto, personalmente, todas mis cámaras están conectadas a través de VPN (me encanta Wireguard) en una red, todos los enlaces los registro con "IP gris". Conveniente, seguro, feliz.





Mi código está publicado bajo la licencia MIT.





El proyecto utiliza la biblioteca ifvisible.js desarrollada por Serkan Yerşen, con licencia del MIT.





Descarga, 14 kB





Espejo





Github








All Articles