Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/GCaptainNemo/RTSP-camera-display-realtime
Grab Hikvision network camera and display it in pyqt control in real time.
https://github.com/GCaptainNemo/RTSP-camera-display-realtime
Last synced: 7 days ago
JSON representation
Grab Hikvision network camera and display it in pyqt control in real time.
- Host: GitHub
- URL: https://github.com/GCaptainNemo/RTSP-camera-display-realtime
- Owner: GCaptainNemo
- Created: 2022-01-13T11:01:17.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-19T06:00:17.000Z (almost 3 years ago)
- Last Synced: 2024-08-01T03:42:58.894Z (3 months ago)
- Language: Python
- Size: 505 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# RTSP网络相机实时显示
## 一、介绍
* 平台 Ubuntu / windows
* 依赖 opencv-python, PyQt5
需要对海康网络相机(`rtsp协议`)1080P相机拉流,低延迟地显示在QT客户端界面中,尝试了如下三种方案:
#### **1.1、基于ROS节点通信(延迟高)**
由于python3中CVBRIDGE使用具有问题,因此使用额外的ROS转换节进行数据格式sensor_msgs::Image到自定义msg格式转换[1],再在客户端进行自定义msg格式解码,显示在客户端中。该方法信息经过若干节点传递,延迟较高。
#### **1.2、单线程cv2.VideoCapture(延迟高)**
使用timer作为触发信号,利用QT的信号-槽机制让控件更新图像。可以通过控制timer触发信号发送与否,随时开始,停止接收视频流,该方法对传输像素较小的视频流延迟较小,但对1080P图像仍延迟较高。
#### **1.3、多线程cv2.VideoCapture(基本满足实时需求)**
线程A从通过RTSP协议从视频流中读取出每一帧,并放入队列中,线程B从队列中将图片取出,处理后进行显示[2]。线程A如果发现队列里有两张图片(证明线程B的读取速度跟不上线程A),那么线程A主动将队列里面的旧图片删掉,换上新图片,通过多线程的方法:
1. 线程A的读取速度始终不收线程B的影响,防止网络摄像头的缓存区爆满
2. 线程A更新了队列中的图片,使线程B始终读取到最新的画面,降低了延迟**备注**:目前没找到让python线程停止(挂起)、再启动方法<[3],**线程只能调用start函数一次**。采取先kill掉线程,再构造新的线程对象重新start来实现拉流停止、重启的效果。
## 二、demo
* 单线程(1.2)
`./single_thread.py`
* 多线程(1.3)
`./multi_thread.py`
## 三、效果
多线程方法显示延迟
## 四、参考资料
[1] [用自定义数据类型解决cv_bridge问题](https://blog.csdn.net/lizhiyuanbest/article/details/108022588)
[2] [多线程RTSP网络相机实时显示](https://blog.csdn.net/ljx1400052550/article/details/106987943)
[3] [python threading中的thread开始和停止](https://blog.csdn.net/ygfrancois/article/details/85265955#commentBox)