海康摄像头 + M7s(Monibuca) + FFmpeg + Python实现多个网络摄像头视频流推流

news/2025/2/27 2:33:54

最近在研究流媒体服务器时,我注意到了一款开源软件——M7s。按照官网的指南部署完成后,我开始进行测试,发现单视频流推送非常顺利,没有任何问题。然而,当我尝试进行多视频流推送时,却发现网上的相关教程寥寥无几,即便找到了一些,也大多与我的需求不完全匹配。面对这种情况,我决定自己动手编写代码来实现多视频流的推送。这样不仅能精准满足我的需求,也能在这个过程中加深对流媒体技术的理解。希望这段探索能为我的项目带来新的突破。
由于python开发脚本方便,便选择了python。视频处理属于CPU密集型任务,使用多进程(multiprocessing)更加匹配任务需求。

一、必要的包

python">import subprocess
import multiprocessing

subprocess 负责调用ffmpeg的shell命令
multiprocessing 负责调用CPU开启多进程,避开GIL锁

二、monibuca视频流格式

根据官网的格式要求,进行ffmpeg命令编写

ffmpeg -i {input_url} -c:v libx264 -c:a aac -f rtsp {output_url}

input_url为你的视频流地址,我的是海康网络摄像头,格式是

rtsp://admin:pwd@摄像头ip/h264/ch1/sub/av_stream

output_url地址按照monibuca官网要求格式为

rtsp://localhost/app_name/ip_name}

app_name 和 ip_name 根据自己要求设置,不能重复

三、核心代码

subprocess部分

python">def push_stream(ip_address,srs_server,app_name,i):
	command = f"ffmpeg -i {input_url} -c:v libx264 -c:a aac -f rtsp {output_url}"
	process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)    
	stdout, stderr = process.communicate()

multiprocessing部分

python">if __name__ == "__main__":
    processes = []
	for i in range(0,len(ip_info)):
	        ip_address = f"{ip_info[i]}"
	        p = multiprocessing.Process(target=push_stream, args=(ip_address,srs_server,app_name,i))
	        processes.append(p)
	        p.start()

四、运行程序

成功,我这只是使用了四个测试摄像头
在这里插入图片描述


http://www.niftyadmin.cn/n/5869392.html

相关文章

利用机器学习实现实时交易欺诈检测

以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…

MySQL 中的事务隔离级别有哪些?MySQL 默认的事务隔离级别是什么?为什么选择这个级别?数据库的脏读、不可重复读和幻读分别是什么?

MySQL 中的事务隔离级别有哪些? 1. 读未提交(Read Uncommitted) 特点:一个事务可以读取另一个事务未提交的数据。如果一个事务对数据进行了修改但尚未提交,其他事务仍能读取到这些未提交的修改。优缺点: …

百度AI:起个大早,赶个晚集?

作为中国最早布局人工智能的互联网巨头,百度曾以“All in AI”的雄心引领行业,却在近年被字节跳动、DeepSeek、阿里巴巴等后来者超越,甚至被调侃“起了大早,赶了晚集”。这一现象背后,既有战略选择的偏差,也…

结构型模式 - 装饰者模式 (Decorator Pattern)

结构型模式 - 装饰者模式 (Decorator Pattern) 在展开讲装饰者模式之前,不得不提一下代理模式,因为这两者在一定的层度上是有相似性的, 通过对比可以让我们更好的理解装饰者. 定义与核心目的 装饰者模式 定义:动态地将责任附加到对象上。若要扩展功能&#xff0c…

江协科技/江科大-51单片机入门教程——P[1-1] 课程简介P[1-2] 开发工具介绍及软件安装

本教程也力求在玩好单片机的同时了解一些计算机的基本概念,了解电脑的一些基本操作,了解电路及其元器件的基本理论,为我们学习更高级的单片机,入门IT和信息技术行业,打下一定的基础。 目录 1.课程简介 2.开发工具及…

SQL: DDL,DML,DCL,DTL,TCL,

Structured Query Language,结构化查询语言, 是一种用于管理和操作关系数据库的标准编程语言。 sql的分类 DQL(Data Query Language):数据查询语言 DDL(Data Definition Language):数据定义语…

构成正方形的数量

构成正方形的数量 真题目录: 点击去查看 E 卷 100分题型 题目描述 输入N个互不相同的二维整数坐标&#xff0c;求这N个坐标可以构成的正方形数量。[内积为零的的两个向量垂直] 输入描述 第一行输入为N&#xff0c;N代表坐标数量&#xff0c;N为正整数。N < 100 之后的 …

前端页面什么是全屏嵌入/什么是局部嵌入

1. 什么是 <div> 容器标签&#xff1f; 通俗来说&#xff0c;<div> 标签就像一个“盒子”&#xff0c;你可以把任何东西放进去&#xff0c;比如文字、图片、按钮等。它是一个非常灵活的标签&#xff0c;用来组织和分隔网页内容。 举个例子&#xff1a; 想象你有…