多进程解决多路视频流卡帧、掉帧、延时等问题

利用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多进程解决多路视频流卡帧、掉帧、延时等问题相关推荐

  1. 电脑录屏卡顿掉帧是什么原因 电脑录屏卡顿掉帧怎么解决

    很多人在用电脑录屏时会遇到卡顿或掉帧的情况,这些问题会严重影响录制视频的效果,观看体验变差.原视频画面没有问题,但是为什么录制时会出现这样的问题呢?今天就来探讨一下电脑录屏卡顿掉帧是什么原因,电脑录屏 ...

  2. 游戏本自动掉帧_Get这些操作,解决卡顿掉帧

    同样的配置 别人能撸的飞起 而你只能做一只卡*?(此处消音-) 明明能反杀,却最终输给了掉帧? 多么痛的领悟! 其实小编也是过来人,但是! 自从get了以下 操作宝典 那些痛的领悟,悄然结束-   1 ...

  3. 小程序Android端movable-view拖拽卡顿掉帧的优化

    背景: 最近项目中使用到movable-view来做一个拖拽排序的功能,等到功能都实现完成后到真机测试发现,拖拽动画在Android端存在严重的卡顿掉帧,及其不跟手,但是在IOS端却挺流畅.查阅Goo ...

  4. Android卡顿掉帧问题分析之原理篇

    当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...

  5. Android卡顿掉帧问题分析之工具篇

    Android卡顿掉帧问题分析之原理篇 Android卡顿掉帧问题分析之工具篇 Android卡顿掉帧问题分析之实战篇 Android卡顿掉帧问题分析之原理篇 公众号:Android技术之家Andro ...

  6. 穿越火线好友服务器不稳定,穿越火线合区后新危机,玩家:卡顿掉帧没法玩

    原标题:穿越火线合区后新危机,玩家:卡顿掉帧没法玩 大家好我是小包子,今天和大家聊一下穿越火线经历了一次大规模的合区之后,玩家们顿时感受到了服务器真正的火热.服务器总数的减少使得很多地区的玩家们相聚一 ...

  7. 【iOS高级资深工程师面试篇】①、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 UI部分2/3 -图像显示原理-UI卡顿掉帧

    iOS高级资深工程师面试篇系列 - 已更新3篇 UI部分1/3 -UITableView-事件传递&视图响应 UI部分2/3 -图像显示原理-UI卡顿&掉帧 UI部分3/3 -UIVi ...

  8. WebRTC开发之iOS15.4快速晃动,远端观看卡顿掉帧问题

    前两周刚刚更新了iOS15.4的系统,然后就发现了一个奇怪的问题,在iOS15.4的手机上安装音视频Demo,快速晃动时,远端看到的画面会卡顿,并且掉帧.帧率下降.不断变化,然而在其他系统手机上,却没 ...

  9. 关于联想Thinkpad E450 系列笔记本电脑独立显卡不能工作的解决方案(蓝屏/卡顿/掉帧)

    联想Thinkpad E450因为主板问题,在运行一段时间的独立显卡后(通常是在玩游戏调用独显运行时),会在游戏中出现突然掉帧的现象,而后退出游戏在正常的电脑使用过程中也会出现经常蓝屏,黑屏等现象,使 ...

最新文章

  1. sql镶嵌查询_sql数据库的嵌套查询
  2. .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
  3. 单臂路由配置实验同一交换机上vlan间ping不通_【干货】什么是单臂路由?如何配置?...
  4. 理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用
  5. Postman Forbidden (CSRF token missing or incorrect.)
  6. ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017
  7. 利用Civil 3D API更改曲面的样式
  8. The New Villa
  9. 凸优化第七章统计估计 7.5实验设计
  10. 海康威视摄像头重置密码
  11. 如何安装JRE8.0.202
  12. c语言九宫格拼图程序,C语言简单游戏编程学习入门之九宫格拼图
  13. PLC供电系统电源模块的选择
  14. LAGON ATOLL
  15. 安全系列之一——SYS-VUL-0048漏洞
  16. 海上风电运维船未来前景如何?甲板船之家帮你解开疑问
  17. 《长安十二时辰》,作为程序员,看完我震惊了!涉及通信、云计算、大数据等!...
  18. Processing残影拖尾效果实现套路分享
  19. uni-app跳转连接到QQ
  20. 黄鸭兄《傲慢是精英的耻辱,谦虚是精英的责任》摘录

热门文章

  1. python tkinter place布局
  2. android layout引入活动,Android 开发入门-活动的基本用法
  3. long类型转成integer类型避免空指针的方法_解决swagger的类型转换报错问题
  4. 力扣 496 下一个更大的元素I
  5. asp.net oracle 问号,ASP.NET中文变问号问题解决方案
  6. 第13-14讲 建图
  7. Python之 break退出循环
  8. iPhone手机投屏小米盒子
  9. 《南溪的目标检测学习笔记》——夏侯南溪的CNN调参笔记,加油
  10. 【Spring Cloud】负载均衡-Ribbon