FFmpeg在python里推流被处理过的视频流
链式算法处理视频流
视频源是本地摄像头
# coding=gbk
# 本地摄像头直接推流到 RTMP 服务器
import cv2
import mediapipe as mp
import subprocess as sp# 初始化 Mediapipe
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_holistic = mp.solutions.holisticholistic = mp_holistic.Holistic(min_detection_confidence=0.7,min_tracking_confidence=0.7
)# AI 算法处理帧
def frame_handler(image):image.flags.writeable = Falseimage_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = holistic.process(image_rgb)if results.pose_world_landmarks is not None:image.flags.writeable = Truemp_drawing.draw_landmarks(image,results.pose_landmarks,mp_holistic.POSE_CONNECTIONS,landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())return image# 设置摄像头
camera_index = 0
cap = cv2.VideoCapture(camera_index)
if not cap.isOpened():raise IOError("无法打开本地摄像头")# 设置分辨率和帧率
width, height = 640, 360 # 分辨率
fps = 15 # 帧率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
cap.set(cv2.CAP_PROP_FPS, fps)# FFmpeg 推流地址
dst = "rtmp://localhost:1935/live/dest-local"# FFmpeg 推流命令
command = ['ffmpeg','-y', # 覆盖输出文件'-f', 'rawvideo', # 输入原始视频流格式'-vcodec', 'rawvideo','-pix_fmt', 'bgr24', # 像素格式'-s', f"{width}x{height}", # 分辨率'-r', str(fps), # 帧率'-i', '-', # 从标准输入读取视频流'-c:v', 'libx264', # 视频编码格式'-preset', 'ultrafast', # 超快编码模式'-tune', 'zerolatency', # 优化零延迟'-bufsize', '64k', # 缓冲区设置较小'-maxrate', '1M', # 最大码率控制'-g', '15', # GOP(关键帧间隔,降低到 15 帧)'-f', 'flv', # 输出格式dst
]# 启动 FFmpeg 子进程
pipe = sp.Popen(command, stdin=sp.PIPE)# 视频处理和推流
try:while True:ret, frame = cap.read()if not ret:print("无法读取摄像头数据,程序退出")break# 使用 Mediapipe 算法处理帧processed_frame = frame_handler(frame)# 将帧写入 FFmpeg 输入管道pipe.stdin.write(processed_frame.tobytes())# 显示处理结果cv2.imshow('Video', processed_frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):break
finally:# 释放资源cap.release()cv2.destroyAllWindows()pipe.stdin.close()pipe.wait()print("程序结束")
视频流是网络流 :
# coding=gbk
# 网络摄像头直接推流到 RTMP 服务器
import subprocess as spimport cv2
import mediapipe as mp# 初始化 Mediapipe
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_holistic = mp.solutions.holisticholistic = mp_holistic.Holistic(min_detection_confidence=0.7,min_tracking_confidence=0.7
)# AI 算法处理帧
def frame_handler(image):image.flags.writeable = Falseimage_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = holistic.process(image_rgb)if results.pose_world_landmarks is not None:image.flags.writeable = Truemp_drawing.draw_landmarks(image,results.pose_landmarks,mp_holistic.POSE_CONNECTIONS,landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())return image# 设置网络摄像头地址
camera_index = "rtsp://admin:@xxzx@192.168.1.64:554/Streaming/Channels/101" # 替换为你的网络摄像头地址
cap = cv2.VideoCapture(camera_index)
if not cap.isOpened():raise IOError(f"无法打开网络摄像头流:{camera_index}")# 设置分辨率和帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 自动获取分辨率宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 自动获取分辨率高度
fps = int(cap.get(cv2.CAP_PROP_FPS)) # 自动获取帧率# 如果获取失败,设置默认值
if fps == 0:fps = 15
if width == 0 or height == 0:width, height = 640, 360 # 设置默认分辨率# RTMP 推流地址
dst = "rtmp://localhost:1935/live/dest-net"# FFmpeg 推流命令
command = ['ffmpeg','-y', # 覆盖输出文件'-f', 'rawvideo', # 输入原始视频流格式'-vcodec', 'rawvideo','-pix_fmt', 'bgr24', # 像素格式'-s', f"{width}x{height}", # 分辨率'-r', str(fps), # 帧率'-i', '-', # 从标准输入读取视频流'-c:v', 'libx264', # 视频编码格式'-preset', 'ultrafast', # 超快编码模式'-tune', 'zerolatency', # 优化零延迟'-bufsize', '64k', # 缓冲区设置较小'-maxrate', '1M', # 最大码率控制'-g', '15', # GOP(关键帧间隔,降低到 15 帧)'-f', 'flv', # 输出格式dst
]# 启动 FFmpeg 子进程
pipe = sp.Popen(command, stdin=sp.PIPE)# 视频处理和推流
try:while True:ret, frame = cap.read()if not ret:print("无法读取网络摄像头流,程序退出")break# 使用 Mediapipe 算法处理帧processed_frame = frame_handler(frame)# 将帧写入 FFmpeg 输入管道pipe.stdin.write(processed_frame.tobytes())# 显示处理结果cv2.imshow('Video', processed_frame)# 按 'q' 键退出if cv2.waitKey(1) & 0xFF == ord('q'):break
finally:# 释放资源cap.release()cv2.destroyAllWindows()pipe.stdin.close()pipe.wait()print("程序结束")
相关文章:
FFmpeg在python里推流被处理过的视频流
链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…...
2- Linux系统的命令帮助
Linux 命令行帮助信息使用指南 一、引言 对于初学者来说,Linux命令行可能会显得复杂和难以捉摸。然而,一旦掌握了如何有效地利用命令行的帮助信息,您将发现它是一个强大而灵活的工具,可以极大地提高您的工作效率。本指南旨在为新手介绍如何在Linux中获取命令的帮助信息,…...
Mysql事务
一、数据库事务基础 1.1. 什么是事务 简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。 比如 MySQL 原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB…...
Fast adaptively balanced min-cut clustering
#0.论文信息 标题:Fast adaptively balanced min-cut clustering期刊:Pattern Recognition作者: Feiping Nie , Fangyuan Xie , Jingyu Wang ,Xuelong Li机构: China Telecom, Northwestern Polytechnic al University.代码链接: #1.摘要 …...
vue3和springboot使用websocket通信
前端端口:9090 后端端口:8080 vue3 引入依赖: npm install sockjs-client stomp/stompjs vue页面 <template><div><h1>WebSocket 示例</h1><button click"sendMessage">发送消息</button>…...
Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy:基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...
js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
目录 Proxy Reflect 静态方法 部分实例 Iterator 实际开发迭代器的使用实例 迭代器(Iterator)应用 Generator Proxy Proxy 是 ES6 中新增的对象 Proxy 是JavaScript中的内置对象,它提供了一种机制,可以拦截并自定义各种…...
微信V3支付报错 平台证书及平台证书序列号
1.平台证书及平台证书序列号设置错误报错: 错误1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...
【开发问题记录】执行 git cz 报require() of ES Module…… 错误
文章目录 1、问题2、解决3、参考链接 1、问题 在对 commitizen 进行完,一系列的初始化以后 , 对代码进行 提交 到暂存区,然后要提交到 本地仓库 的报错 然后因为安装了 commitizen 所以是想用 git cz 进行提交的, 执行命令的时候…...
Kubernetes 安装 Nginx以及配置自动补全
部署 Nginx : [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口: [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…...
JS中的闭包和上下文
变量提升 和 函数提升 这里要提到一个提升的概念,即在JS中,在解析代码之前还有一个预处理的过程,这个过程中会把部分变量和函数声明提前到代码的最顶部, 会在其他所有代码之前执行。虽然当我们按照规范(严格模式或者T…...
element-ui表格多级表头固定列和合并单元格
多级表头固定列 代码示例-不能直接运行,仅供参考 <el-table ref"table" class"table":data"list"style"width: 100%":header-cell-style"headerCellStyle"v-loading"dataLoading":span-method&qu…...
视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点
随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展࿰…...
第五十九章 假脱机设备
文章目录 第五十九章 假脱机设备介绍打开和使用假脱机设备用于假脱机设备的 OPEN 和 USE 命令USE 命令 第五十九章 假脱机设备 介绍 IRIS数据平台使能够将打印输出直接发送到您的打印机或屏幕,或将其保留在后台打印中以供以后打印。IRIS 假脱机独立于您的操作系统…...
Maven Wrapper 报错“未找到有效的 Maven 安装”
1. 检查 Maven Wrapper 配置: 确保你的项目中包含 .mvn/wrapper/maven-wrapper.properties 文件。 检查该文件中的 distributionUrl 属性,确保它指向一个有效的 Maven 发行版 URL。 2.确认 Maven Wrapper 脚本存在: 在项目根目录下&#x…...
yarn list --pattern vuex-module-decorators
dgqdgqdeMac-mini spid-admin % yarn list --pattern vuex-module-decorators yarn list v1.22.22 └─ vuex-module-decorators0.16.1 ✨ Done in 0.24s.好的,这段代码是一个典型的 Vuex 模块定义,使用了 vuex-module-decorators 库。这个库为 Vuex 提…...
day19-Linux软件包
科普,什么是代码文件。 电脑程序Program,就是某一个编程语言编写的一个代码文件,里面包含了该语言特有的指令,以及各种字符、符号。 linux自带的network管理脚本,shell脚本 什么是软件程序。 软件程序,就…...
【网络分析工具】WireShark的使用(超详细)
网络分析工具——WireShark的使用 简介WireShark软件安装Wireshark 开始抓包示例WireShark抓包界面WireShark 主要分为这几个界面TCP包的具体内容Wireshark过滤器设置wireshark过滤器表达式的规则Wireshark抓包分析TCP三次握手Wireshark分析常用操作 简介 WireShark是非常流…...
React 高级组件开发:动态逻辑与性能优化
React 高级组件开发:动态逻辑与性能优化 引言一、动态逻辑与配置化组件1. 动态组件的设计 二、自定义 Hooks 解决复杂状态管理1. 自定义 Hook 的优势 三、高阶组件(HOC)模式1. 高阶组件的应用场景 四、性能优化1. 使用 React.memo 优化渲染2.…...
Vue 3 与 Tauri 集成开发跨端APP
1、安装RUST 下载地址:Install Rust - Rust Programming Language 安装: 安装完成后,在命令行里运行: rustup 2、安装 Node.js 与 npm 或 pnpm ,如果已经安装,可以忽略 # 使用 nvm 安装 Node.js 最新版本 nvm install…...
FreeRTOS中xPortPendSVHandler()和vPortSVCHandler()这两个函数的作用
在 FreeRTOS 中,xPortPendSVHandler() 和 vPortSVCHandler() 是两个重要的中断服务例程(ISR),它们负责处理与操作系统相关的异常。这些函数对于实现上下文切换和任务管理至关重要。下面分别解释这两个函数的作用: xPo…...
【RK3588 Linux 5.x 内核编程】-内核IO复用与poll
内核IO复用与poll 文章目录 内核IO复用与poll1、IO复用2、Poll的使用2.1 用户空间程序中使用Poll2.2 在内核空间实现Poll3、驱动程序实现4、用户空间程序实现5、验证让我们假设应用程序想要根据其状态读取/写入许多 IO(输入和输出)的情况。 在这种情况下我们该怎么办? 我们必…...
精选9个自动化任务的Python脚本精选
大家好,我是老邓,今天我们来一起学习如何用Python进行一些常见的自动化操作,涉及文件处理、网络交互等实用技巧。即使你没有任何Python基础也没关系,我会用最通俗易懂的语言来讲解。 1. 对目录中的文件进行排序 import osdef so…...
使用JFLASH批量烧录程序导入生产的简易设置
基于上一篇帖子我们可以把任意厂家的MCU导入jflash来使用 首先,我使用的是V699C版本,目前使用了一段时间没有问题 我尝试过换不同的电路板烧录连续烧录,当单片机里没有程序的时候,问题不大,但是一旦单片机里有程序的话…...
计算机体系结构期末复习1:分支预测
目录 一、为什么需要分支预测 1.存在分支的指令 2.控制相关的处理方式一:stall(阻塞)流水线 二、分支预测方法 1.预测正确与预测错误的性能损失 2.减少预测错误的惩罚 3.提高分支预测的准确度 1)编译时(静态方法ÿ…...
获取页面上所有的img,并保存到本地
浏览器的 JavaScript 环境中受限于安全和隐私原因,不允许直接指定下载文件夹或访问本地文件系统。因此,无法通过纯 JavaScript 在浏览器控制台中实现下载图片到指定文件夹的功能。 然而,您可以使用 Web API 提供的文件系统访问 API 进行一定…...
Day56 图论part06
108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…...
深度学习助力股市预测:LSTM、RNN和CNN模型实战解析
作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:众所周知,传统的股票预测模型有着各种各样的局限性。但在我的最新研究中,探索了一些方法来高效预测股市走势,即CNN、RNN和LSTM这些深度学习…...
.NET能做什么?全面解析.NET的应用领域
.NET 是由微软开发的一个开源、跨平台的开发框架。它不仅支持构建各种应用程序,还能运行在不同的操作系统上,包括 Windows、Linux 和 macOS。自从 .NET Core 的推出,.NET 成为了一个现代化的开发平台,能够满足企业和开发者日益多样…...
分布式事务入门 一
分布式事务入门 一 您好,我是今夜写代码,今天学习下分布式事务相关理论,以及常见的解决方案,为后续掌握Seata分布式事务框奠定基础。 为什么需要分布式事务? 分布式事务主要由于存储资源的分布性,通常涉及多个数据库。 分布式…...
华为,新华三,思科网络设备指令
1. 设备信息查看 华为 display version # 查看设备版本信息 display device # 查看设备硬件信息 新华三(H3C) display version # 查看设备版本信息 display device # 查看设备硬件信息 锐捷 show version …...
深入理解HTML页面加载解析和渲染过程(一)
一篇老文章,存在草稿有点可惜 HTML页面呈现通常包括三个主要过程:加载、解析和渲染。让我们详细探讨每个过程。 1. 加载过程 加载过程主要涉及获取页面所需的所有资源。这个过程包括以下步骤: 1.1 URL资源加载 缓存读取:浏览器…...
Odoo 免费开源 ERP:通过 JavaScript 创建对话框窗口的技术实践分享
作者 | 老杨 出品 | 上海开源智造软件有限公司(OSCG) 概述 在本文中,我们将深入研讨如何于 Odoo 18 中构建 JavaScript(JS)对话框或弹出窗口。对话框乃是展现重要讯息、确认用户操作以及警示用户留意警告或错误的行…...
Word批量更改题注
文章目录 批量更改批量去除空格 在写文章的时候,往往对图片题注有着统一的编码要求,例如以【图 1- xx】。一般会点击【引用】->【插入题注】来插入题注,并且在引用的时候,点击【引用】->【交叉引用】,并且在交叉…...
电脑缺失libcurl.dll怎么解决?详解电脑libcurl.dll文件丢失问题
一、libcurl.dll文件丢失的原因 libcurl.dll是一个用于处理URL传输的库文件,广泛应用于各种基于网络的应用程序。当这个文件丢失时,可能会导致相关应用程序无法正常运行。以下是libcurl.dll文件丢失的一些常见原因: 软件安装或卸载不完整&a…...
OpenCV相机标定与3D重建(36)计算两幅图像之间基本矩阵(Fundamental Matrix)的函数findFundamentalMat()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从两幅图像中的对应点计算基本矩阵。 cv::findFundamentalMat 是 OpenCV 中用于计算两幅图像之间基本矩阵(Fundamental Matrix&#…...
JQ中的each()方法与$.each()函数的使用区别
介绍 jquery里的 each() 是一个强大的遍历工具,用于迭代集合中的元素,并为每个元素执行指定的函数。它既可以用于遍历 jQuery对象集合,也可以用于遍历普通的数组或对象。 each()对象遍历 语法: $(selector).each(function(in…...
浅谈下雪花算法的原理,及在项目中使用需要注意哪些事项
目录 背景 雪花算法原理 算法特点 注意事项 总结 背景 雪花算法是一种分布式ID生成算法,由Twitter提出,用于在分布式系统中生成全局唯一的ID。该算法通过将64位的长整型数字分为符号位、时间戳、工作机器ID和序列号四个部分,确保了ID的…...
洛谷P1536 村村通(c嘎嘎)
题目链接:P1536 村村通 - 洛谷 | 计算机科学教育新生态 题目难度:普及/提高 解题思路:本题很明显考察是并查集,并查集之前我的博客介绍过可以看看这篇 洛谷P1551 亲戚(c嘎嘎)-CSDN博客,本题是…...
双指针——查找总价格为目标值的两个商品
一.题目描述 LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode) 二.题目解析 这个题目非常简单,其实就是判断有没有两个数加起来等于target。 三.算法解析 1.暴力解法 暴力解法的话我们可以枚举出所有的情况,然后判…...
智慧园区小程序开发制作功能介绍
智慧园区小程序开发制作功能介绍 智慧园区小程序系统作为一款面向园区企业的一站式线上服务平台,可为企业提供数智化的园区办公服务。智慧园区小程序功能介绍 1、园区公告、政策信息查看足不出户掌握最新动态,“园区公告、政策信息”等信息。首页点击对应…...
【面经】25届 双非本科 字节跳动 北京 四年的总结
点击“硬核王同学”,选择“关注” 福利干货第一时间送达 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 给大家分享一个25届本科大佬的面经,…...
MySql幻读问题
认识具有反复性。 之前以为理解了幻读,最近看黑马的mysql教程以为再次加深了认识。然而现在认为之前的理解都是错误的,而且网上很多关于幻读的解释,都不太准确。 关于幻读的最佳解释还是要看官网mysql官网幻读解释 脏读和不可重复读比较好理…...
欧拉计划启航篇(一)
目录 1.什么是欧拉计划 2.简单介绍 3.访问不上去怎么办 4.第一题的代码编写 5.代码的优化 1.什么是欧拉计划 欧拉计划是和我们的数学知识相关的一个网站,但是这个网站上面的相关的问题需要我们去使用编程的知识去进行解决,因此这个适合对于想要提升…...
Pandas系列|第二期:Pandas中的数据结构
1.Pandas中的数据结构:Series和DataFrame Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。 Series 是一…...
GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)
目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期,许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…...
基于openEuler22.09部署OpenStack Yoga云平台(一)
OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署,三个节点分别是控制节点(controller)、计算节点(compute)、存储节点(storage),其中存储…...
信息安全管理:通用安全管理checklist
通用安全管理checklist是对信息安全管理调查问卷的一个补充,将以前没有包含的检查点纳入进来,算是对这个系列的一个拾遗与结尾。内容包含安全策略与计划、组织和人员安全、安全工程管理、安全产品管理与符合性五部分。 一、安全策略与安全计划 ▼▼安全…...
硬件设计-硬件 EMC 设计规范
目录 引言: 常见原因 总体概念及考虑 布局 屏蔽 滤波 引言: 本规范只简绍 EMC 的主要原则与结论,为硬件工程师们在开发设计中抛砖引玉。 电磁干扰的三要素是干扰源、干扰传输途径、干扰接收器。EMC 就围绕这些 问题进行研究。最基本的…...
【C++】数据结构 单链表的实现(企业存储用户数据的实现)
本篇博客给大家带来的是用C语言来实现数据结构的单链表(企业存储用户数据的实现) 🐟🐟文章专栏:C 🚀🚀若有问题评论区下讨论,我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持…...