python多进程解决多路视频流卡帧、掉帧、延时等问题
多进程解决多路视频流卡帧、掉帧、延时等问题
利用python代码实现不同厂家摄像头同时实时录制并存储
本代码参考: link,文章作者实现读取多个(海康\大华)网络摄像头的视频流 (使用opencv-python),解决实时读取延迟问题。
本人因项目需求两个摄像机(枪机+球机)同时录制交通监控视频。传统代码可实现单个摄像头实时录制,遇到多视频流会存在通道堵塞,高延时、掉帧、卡帧等诸多问题,在使用link代码时,出现视频流中断的问题。故本文在作者多进程实现多摄像头实时监控的基础上改进视频存放、抓取的代码,实现了多个摄像头实时监测并存储的任务。
本文完整代码如下
import cv2
import time
import multiprocessing as mpdef image_put(q, name, pwd, ip, channel=101):cap = cv2.VideoCapture("rtsp://%s:%s@%s//Streaming/Channels/%d" \% (name, pwd, ip, channel))fps = cap.get(cv2.CAP_PROP_FPS)print('fps: ', fps)if cap.isOpened():print('HIKVISION1')else:cap = cv2.VideoCapture("rtsp://%s:%s@%s//Streaming/Channels/%d" \% (name, pwd, ip, channel))fps = cap.get(cv2.CAP_PROP_FPS)print('fps: ', fps)print('HIKVISION2')while cap.isOpened():# print('cap.read()[0]:', cap.read()[0])ret, frame = cap.read()# print('ret:', ret)frame = cv2.resize(frame, (1920, 1080))if not ret:cap = cv2.VideoCapture("rtsp://%s:%s@%s//Streaming/Channels/%d" \% (name, pwd, ip, channel))print('HIKVISION2')ret, frame = cap.read()frame = cv2.resize(frame, (1920,1080))q.put(frame)# print('q.qsize():', q.qsize())q.get() if q.qsize() > 1 else time.sleep(0.01)def image_get(q, window_name):cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)fourcc = cv2.VideoWriter_fourcc(*'XVID')path = "D:/test/" + window_name + ".avi"out = cv2.VideoWriter(path, fourcc, 20.0, (1920, 1080), True)while True:frame = q.get()out.write(frame)cv2.imshow(window_name, frame)cv2.waitKey(1)def run_multi_camera():# user_name, user_pwd = "admin", "password"user_name, user_pwd = "admin", "用户密码"camera_ip_l = ["192.168.1.67", # ipv4(改成自己的)"192.168.1.64", # ipv4(改成自己的)# 把你的摄像头的地址放到这里,如果是ipv6,那么需要加一个中括号。]mp.set_start_method(method='spawn') # initqueues = [mp.Queue(maxsize=2) for _ in camera_ip_l]processes = []for queue, camera_ip in zip(queues, camera_ip_l):processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))processes.append(mp.Process(target=image_get, args=(queue, camera_ip)))for process in processes:process.daemon = Trueprocess.start()for process in processes:process.join()if __name__ == '__main__':run_multi_camera()
分模块解读
多进程run_multi_camera()
多进程函数下,将所要使用的设备信息输入对应位置(摄像头可以多个),用户名、密码、设备ip地址自行设置。本人手头两个摄像头,队列参数maxsize=2。
python多进程讲解link
图像放入image_put
不同厂家的摄像头rtsp协议:
video_stream_path = “rtsp://%s:%s@%s/h264/ch%s/main/av_stream” %(user, pwd, ip, channel) # HIKIVISION old version 2015
video_stream_path = “rtsp://%s:%s@%s//Streaming/Channels/%d” % (user, pwd, ip, channel) # HIKIVISION new version 2017
video_stream_path = “rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0” % (user, pwd, ip, channel) # dahua
本人使用的是海康威视的摄像头
图像提取image_get
设置视频编码格式,设置存储路径(这里我是以摄像头ip地址命名文件)
python多进程解决多路视频流卡帧、掉帧、延时等问题相关推荐
- 电脑录屏卡顿掉帧是什么原因 电脑录屏卡顿掉帧怎么解决
很多人在用电脑录屏时会遇到卡顿或掉帧的情况,这些问题会严重影响录制视频的效果,观看体验变差.原视频画面没有问题,但是为什么录制时会出现这样的问题呢?今天就来探讨一下电脑录屏卡顿掉帧是什么原因,电脑录屏 ...
- 游戏本自动掉帧_Get这些操作,解决卡顿掉帧
同样的配置 别人能撸的飞起 而你只能做一只卡*?(此处消音-) 明明能反杀,却最终输给了掉帧? 多么痛的领悟! 其实小编也是过来人,但是! 自从get了以下 操作宝典 那些痛的领悟,悄然结束- 1 ...
- 小程序Android端movable-view拖拽卡顿掉帧的优化
背景: 最近项目中使用到movable-view来做一个拖拽排序的功能,等到功能都实现完成后到真机测试发现,拖拽动画在Android端存在严重的卡顿掉帧,及其不跟手,但是在IOS端却挺流畅.查阅Goo ...
- Android卡顿掉帧问题分析之原理篇
当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...
- Android卡顿掉帧问题分析之工具篇
Android卡顿掉帧问题分析之原理篇 Android卡顿掉帧问题分析之工具篇 Android卡顿掉帧问题分析之实战篇 Android卡顿掉帧问题分析之原理篇 公众号:Android技术之家Andro ...
- 穿越火线好友服务器不稳定,穿越火线合区后新危机,玩家:卡顿掉帧没法玩
原标题:穿越火线合区后新危机,玩家:卡顿掉帧没法玩 大家好我是小包子,今天和大家聊一下穿越火线经历了一次大规模的合区之后,玩家们顿时感受到了服务器真正的火热.服务器总数的减少使得很多地区的玩家们相聚一 ...
- 【iOS高级资深工程师面试篇】①、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 UI部分2/3 -图像显示原理-UI卡顿掉帧
iOS高级资深工程师面试篇系列 - 已更新3篇 UI部分1/3 -UITableView-事件传递&视图响应 UI部分2/3 -图像显示原理-UI卡顿&掉帧 UI部分3/3 -UIVi ...
- WebRTC开发之iOS15.4快速晃动,远端观看卡顿掉帧问题
前两周刚刚更新了iOS15.4的系统,然后就发现了一个奇怪的问题,在iOS15.4的手机上安装音视频Demo,快速晃动时,远端看到的画面会卡顿,并且掉帧.帧率下降.不断变化,然而在其他系统手机上,却没 ...
- 关于联想Thinkpad E450 系列笔记本电脑独立显卡不能工作的解决方案(蓝屏/卡顿/掉帧)
联想Thinkpad E450因为主板问题,在运行一段时间的独立显卡后(通常是在玩游戏调用独显运行时),会在游戏中出现突然掉帧的现象,而后退出游戏在正常的电脑使用过程中也会出现经常蓝屏,黑屏等现象,使 ...
最新文章
- sql镶嵌查询_sql数据库的嵌套查询
- .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
- 单臂路由配置实验同一交换机上vlan间ping不通_【干货】什么是单臂路由?如何配置?...
- 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
- Postman Forbidden (CSRF token missing or incorrect.)
- ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017
- 利用Civil 3D API更改曲面的样式
- The New Villa
- 凸优化第七章统计估计 7.5实验设计
- 海康威视摄像头重置密码
- 如何安装JRE8.0.202
- c语言九宫格拼图程序,C语言简单游戏编程学习入门之九宫格拼图
- PLC供电系统电源模块的选择
- LAGON ATOLL
- 安全系列之一——SYS-VUL-0048漏洞
- 海上风电运维船未来前景如何?甲板船之家帮你解开疑问
- 《长安十二时辰》,作为程序员,看完我震惊了!涉及通信、云计算、大数据等!...
- Processing残影拖尾效果实现套路分享
- uni-app跳转连接到QQ
- 黄鸭兄《傲慢是精英的耻辱,谦虚是精英的责任》摘录