{"id":13443177,"url":"https://github.com/GCaptainNemo/RTSP-camera-display-realtime","last_synced_at":"2025-03-20T16:30:36.778Z","repository":{"id":108957297,"uuid":"447566431","full_name":"GCaptainNemo/RTSP-camera-display-realtime","owner":"GCaptainNemo","description":"Grab Hikvision network camera and display it in pyqt control in real time.","archived":false,"fork":false,"pushed_at":"2022-01-19T06:00:17.000Z","size":517,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-28T06:57:40.860Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GCaptainNemo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-01-13T11:01:17.000Z","updated_at":"2023-02-21T06:44:54.000Z","dependencies_parsed_at":"2023-05-18T14:02:46.894Z","dependency_job_id":null,"html_url":"https://github.com/GCaptainNemo/RTSP-camera-display-realtime","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GCaptainNemo%2FRTSP-camera-display-realtime","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GCaptainNemo%2FRTSP-camera-display-realtime/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GCaptainNemo%2FRTSP-camera-display-realtime/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GCaptainNemo%2FRTSP-camera-display-realtime/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GCaptainNemo","download_url":"https://codeload.github.com/GCaptainNemo/RTSP-camera-display-realtime/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244649689,"owners_count":20487469,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:01:57.124Z","updated_at":"2025-03-20T16:30:36.366Z","avatar_url":"https://github.com/GCaptainNemo.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# RTSP网络相机实时显示\n\n## 一、介绍\n\n* 平台 Ubuntu / windows\n\n* 依赖 opencv-python, PyQt5\n\n需要对海康网络相机(`rtsp协议`)1080P相机拉流，低延迟地显示在QT客户端界面中，尝试了如下三种方案：\n\n\n\n#### **1.1、基于ROS节点通信(延迟高)**\n\n由于python3中CVBRIDGE使用具有问题，因此使用额外的ROS转换节进行数据格式sensor_msgs::Image到自定义msg格式转换\u003csup\u003e[1]\u003c/sup\u003e，再在客户端进行自定义msg格式解码，显示在客户端中。该方法信息经过若干节点传递，延迟较高。\n\n\n\n#### **1.2、单线程cv2.VideoCapture(延迟高)**\n\n使用timer作为触发信号，利用QT的信号-槽机制让控件更新图像。可以通过控制timer触发信号发送与否，随时开始，停止接收视频流，该方法对传输像素较小的视频流延迟较小，但对1080P图像仍延迟较高。\n\n\n\n#### **1.3、多线程cv2.VideoCapture(基本满足实时需求)**\n\n线程A从通过RTSP协议从视频流中读取出每一帧，并放入队列中，线程B从队列中将图片取出，处理后进行显示\u003csup\u003e[2]\u003c/sup\u003e。线程A如果发现队列里有两张图片（证明线程B的读取速度跟不上线程A），那么线程A主动将队列里面的旧图片删掉，换上新图片，通过多线程的方法:\n\n1. 线程A的读取速度始终不收线程B的影响，防止网络摄像头的缓存区爆满\n2. 线程A更新了队列中的图片，使线程B始终读取到最新的画面，降低了延迟\n\n**备注**:目前没找到让python线程停止(挂起)、再启动方法\u003csup\u003e\u003c[3]\u003c/sup\u003e，**线程只能调用start函数一次**。采取先kill掉线程，再构造新的线程对象重新start来实现拉流停止、重启的效果。\n\n\n\n## 二、demo\n\n* 单线程(1.2)\n\n`./single_thread.py`\n\n* 多线程(1.3)\n\n`./multi_thread.py`\n\n\n\n## 三、效果\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"./resources/multi.png\" width=\"40%\"\u003e\u003c/p\u003e\n\n\u003ch6 align=\"center\"\u003e多线程方法显示延迟\u003c/h6\u003e\n\n\n\n## 四、参考资料\n\n[1] [用自定义数据类型解决cv_bridge问题](https://blog.csdn.net/lizhiyuanbest/article/details/108022588)\n\n[2] [多线程RTSP网络相机实时显示](https://blog.csdn.net/ljx1400052550/article/details/106987943)\n\n[3] [python threading中的thread开始和停止](https://blog.csdn.net/ygfrancois/article/details/85265955#commentBox)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGCaptainNemo%2FRTSP-camera-display-realtime","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGCaptainNemo%2FRTSP-camera-display-realtime","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGCaptainNemo%2FRTSP-camera-display-realtime/lists"}