关于摄像头推流拉流的一些内容

关于摄像头推流拉流的一些内容

近期在做用Django显示摄像头实时画面的需求,本文就大致聊一聊最近搜集到的相关资料。

基本上原理就是有一个中转服务器(比如Nginx),FFMPEGD推流,html拉流。那Django干啥?控制页面拉流。或者说python干啥?拉流。

还有一些是用opencv做推流的,但那些基本是在做视觉处理的或者画面处理的时候才用的,跟我的情况不符,我的情况是:延迟做到最低、最低...

我的环境:海康威视摄像头,Django后端做

一些关键内容:RTMP 、RTSP、hls 、FFMPEG 、nginx-rtmp服务器

目前总结了4种实现方案供参考

实现方案之:NGINX + FFMEPG

  • 优点:

    ​ 方案多,网上教程一大堆

  • 缺点:

    ​ 延迟较高

  • 延迟情况:

    ​ 5、6秒。延迟优化原理参考下方链接

  • 基本原理:

    ​ FFMEPG把RTSP格式的视频流推到NGINX,NGINX再进行流的处理、转换。nginx做RTMP服务端

​ 参考链接:视频流多分辨率的处理https://www.jibing57.com/2020/08/01/advanced-configure-of-nginx-rtmp/

实现方案之:NGINX + FFMEPG + opencv

  • 优点:

    ​ 能对画面做一些处理

    ​ 单用opencv处理时延迟基本在1、2秒内

  • 缺点:

    ​ 用管道传输流,不容易实现。

  • 延迟情况:

    ​ 因报错问题,无结果

  • 基本原理:

    ​ opencv读取摄像头,处理后用FFMPEG推流到Nginx服务器。django的html拉流。nginx做RTMP服务端

  • 参考链接:

    ​ CSDN一大堆

实现方案之:opencv +Django

  • 优点:

    ​ 实现过程简单

  • 缺点:

    ​ 无法关闭

  • 延迟情况:

    ​ 在1,2秒内

  • 基本原理:

    ​ opencv获取每一帧,然后通过流的HTTP流的方式传到前端。

  • 参考链接:

    https://www.coder.work/article/2084211

实现方案之:jsmpeg + FFMEPG + http中继

  • 优点:

    ​ 不需要RTMP服务器(Nginx),解析靠js插件,RTSP流还是通过FFMEPG推,推到websocket频道

  • 缺点:

    ​ Django貌似无法做中继,暂时只能用ginrtsp做中继。可以尝试用opencv在django内部推到ws频道

  • 延迟情况:

    ​ 1,2秒

  • 基本原理:

    ​ 不做RTSP转RTMP,通过ws将流发布,前端通过jsmpeg解析。

  • 参考链接:

    ​ JSMPEG:https://github.com/phoboslab/jsmpeg

    ​ http中继:https://github.com/wanghaoxi3000/gin-rtsp

posted @ 2021-03-26 15:52  lisicn  阅读(2418)  评论(0编辑  收藏  举报