opencv 十九 python下实现多线程间rtsp直播流的复用

news2024/9/22 19:43:38

在多线程拉流的任务场景中,有时需要将一个rtsp拉取多次,每重新打开一次rtsp视频流就要多消耗一次带宽,为此基于类的静态对象实现rtsp视频流的复用。

1、实现代码

import threading
import cv2,time
#接收摄影机串流影像,采用多线程的方式,采用锁的方式进行实现
class VideoCaptureBase:
    def __init__(self, URL):
        self.URL = URL
        self.lifetime=1
        self.isstop = False
        self.lock = threading.RLock()
        self.data=(None,None)
        # 摄影机连接。
        self.capture = cv2.VideoCapture(self.URL, cv2.CAP_FFMPEG, [cv2.CAP_PROP_HW_ACCELERATION, cv2.VIDEO_ACCELERATION_ANY])
        threading.Thread(target=self.readframe, daemon=True, args=()).start()
        print('VideoCapture started!  %s'%self.URL)
        
    def release(self):
        # 记得要设计停止无限循环的开关。
        self.lifetime-=1
        if self.lifetime==0:
            self.isstop = True
            print('VideoCapture stopped!   %s'%self.URL)
        else:
            print('VideoCapture   self.lifetime=%s'%self.lifetime)
   
    def read(self):
        self.lock.acquire()
        d=self.data
        self.lock.release()
        return d
        
    #进行实时数据读取
    def readframe(self):
        while (not self.isstop):
            ok, frame = self.capture.read()   
            if ok:
                self.lock.acquire()
                self.data=(ok, frame)
                self.lock.release()
            else:
                time.sleep(0.2)
                self.capture = cv2.VideoCapture(self.URL) #掉线重连
        self.capture.release()


class VideoCapture:
    CapList=[]
    def __init__(self, URL):
        self.URL=URL
        inlist=False
        print(self.URL,'CapList.length:=====>',len(VideoCapture.CapList))
        for i in range(len(VideoCapture.CapList)):
            cap=VideoCapture.CapList[i]
            print(i,cap.URL,self.URL,cap.URL==self.URL)
            if cap.URL==self.URL:
                cap.lifetime+=1 # 存活计数器+1
                inlist=True
                print('use exit rtsp stream!!!!')
                
        if not inlist:
            cap=VideoCaptureBase(self.URL)
            VideoCapture.CapList.append(cap)
            print('CapList.length:=====>',len(VideoCapture.CapList),self.URL)
    
    def read(self):
        for cap in VideoCapture.CapList:
            if cap.URL==self.URL:
                return cap.read()

    def release(self):
        for cap in VideoCapture.CapList:
            if cap.URL==self.URL:
                cap.release() # 存活计数器-1,当计数器为0时断开流


if __name__ == '__main__':
    path="rtmp://rtmp.rtc.qq.com/pull/19"
    cap = VideoCapture(path)
    time.sleep(5)
    cap2 = VideoCapture(path)
    time.sleep(5)
    cap3 = VideoCapture(path)
    cap2.release()
    time.sleep(3)
    cap3.release()
    while True:
        ok, frame = cap.read()
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        if not ok:
            continue
        cv2.imshow("cam", frame)

    cap.release()
    cv2.destroyAllWindows()


3、使用说明

使用代码如下所示,与cv2.VideoCapture是一模一样的用法,具备0缓存,自动断线重连的特点;同时在多线程同时打开一个rtsp流地址的情况下,可以只打开一次rtsp视频流。
代码运行时的输入如下所示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Haproxy2.8.1+Lua5.1.4部署,haproxy.cfg配置文件详解和演示

目录 一.快速安装lua和haproxy 二.配置haproxy的配置文件 三.配置haproxy的全局日志 四.测试负载均衡、监控和日志效果 五.server常用可选项 1.check 2.weight 3.backup 4.disabled 5.redirect prefix和redir 6.maxconn 六.调度算法 1.静态 2.动态 一.快速安装lu…

C语言:动态内存管理(上)

目录 前言 1、动态内存函数的介绍 1.1 malloc和free 1.2 calloc函数​编辑 结语 前言 在我们之前对于c语言的学习中,我们知道,当我们要存放数据时,可以定义相应的变量取存放,但是在变量定义后,其大小是无法改变的…

Unbtun-arach64架构安装PySide2(python3.6)

aarch平台是无法通过pip安装PySide2的,同时利用源码下载一直报错 1. 我是python3.6.9,在官网上找到对应的PySide2版本 5.15.2.所以首先在官网下载Qt5.15.2的源码:https://download.qt.io/archive/qt/5.15/5.15.2/single/ 2. 编译qt环境 aar…

网站为什么要选择使用安全加速SCDN?

安全加速SCDN(安全内容交付网络)是一种网络加速服务,旨在提高网站和应用程序的性能和安全性。它使用专门的技术和基础设施来加速内容传输并保护网站免受网络攻击。 安全加速SCDN可以通过内容缓存、快速传输和动态路由技术来加速网站和应用程…

【二叉树】Leetcode 98. 验证二叉搜索树【中等】

验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例1&a…

理想汽车推出首个全自研大模型Mind GPT,通过国家备案正式上线

理想汽车在今日宣布,其全自研的多模态认知大模型——Mind GPT,已正式通过国家《生成式人工智能服务管理暂行办法》的备案,并成功上线,标志着理想成为首个拥有自研大模型并通过国家备案的汽车厂商。 理想Mind GPT是汽车行业首个专门…

Python图像处理——计算机视觉中常用的图像预处理

概述 在计算机视觉项目中,使用样本时经常会遇到图像样本不统一的问题,比如图像质量,并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前,通常需要对图像进行预处理,以确保获得最佳的结果。图像预处理…

MySQL索引18连问,谁能顶住

前言 过完这个节,就要进入金银季,准备了 18 道 MySQL 索引题,一定用得上。 作者:感谢每一个支持: github 1. 索引是什么 索引是一种数据结构,用来帮助提升查询和检索数据速度。可以理解为一本书的目录&…

linux离线安装jenkins及使用教程

本教程采用jenkins.war的方式离线安装部署,在线下载的方式会遇到诸多问题,不宜采用 一、下载地址 地址:Jenkins download and deployment 下载最新的长期支持版 由于jenkins使用java开发的,所以需要安装的linux服务器装有jdk环…

centos node puppeteer chrome报错问题

原因:缺少谷歌依赖包,安装以下即可 yum install atkyum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf…

uni-app(使用阿里图标)

1.注册阿里矢量图标库 注册阿里图标库账号并登录,https://www.iconfont.cn/ 2.加入购物车 搜索适合自己的图标,加入购物车,如下图: 3.加入项目 我的->资源管理->我的项目->创建项目,然后返回购物车&#…

【电路笔记】-交流电路波形的形状因子

波形的形状因子 文章目录 波形的形状因子1、概述2、正弦波波形因子3、波形因子示例14、波形因子示例25、单相半波整流波形6、单相全波整流波形7、三角波形形状因子8、锯齿波形因子9、方波和脉冲波形10、总结波形因子描述波形的形状或结构,是其均方根值与其平均值的比率。 1、概…

ZK友好代数哈希函数安全倡议

1. 引言 前序博客: ZKP中的哈希函数如何选择ZK-friendly 哈希函数?snark/stark-friendly hash函数Anemoi Permutation和Jive Compression模式:高效的ZK友好的哈希函数Tip5:针对Recursive STARK的哈希函数 随着Incrementally Ve…

【数据可视化】Echarts的高级功能

个人主页 : zxctscl 如有转载请先通知 文章目录 1. ECharts的图表混搭及多图表联动1.1 ECharts的图表混搭1.2 ECharts的多图表联动 2. 动态切换主题及自定义ECharts主题2.1 ECharts 4.x/5.x中动态切换主题2.2 自定义ECharts主题 3. ECharts中的事件和行为3.1 EChart…

基于springboot+vue+Mysql的财务管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

抓包工具和PyExeJs模块

文章目录 1. Fiddler1. 安装2. 使用1. 替换JS代码2. 其他使用 2. PyExecJS模块 1. Fiddler 1. 安装 点击下载 点击安装即可 2. 使用 配置https权限 1. 替换JS代码 devtool F12弹窗将script中src链接的JS文件替换成空的文件 2. 其他使用 2. PyExecJS模块

软件杯 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为:距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议,但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

基于Spring boot + Vue协同过滤算法的电影推荐系统

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 目录 一、项目简介 二、开发技术与环…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦,偏我来时不逢春。 谁道三冬无春色,冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举: 法二 哈希表遍历: 法三 并查集: 个人总结 题目描述 128. 最长连续序…