当前位置: 首页 > news >正文

建网站公建网站公司天体摄影

建网站公建网站公司,天体摄影,wordpress密码访问,秦皇岛在哪一、引言 在本文中#xff0c;我们将详细介绍如何使用 Python 进行视频的推流操作。我们将通过两个不同的实现方式#xff0c;即单线程推流和多线程推流#xff0c;来展示如何利用 cv2#xff08;OpenCV#xff09;和 subprocess 等库将视频帧推送到指定的 RTMP 地址。这…一、引言 在本文中我们将详细介绍如何使用 Python 进行视频的推流操作。我们将通过两个不同的实现方式即单线程推流和多线程推流来展示如何利用 cv2OpenCV和 subprocess 等库将视频帧推送到指定的 RTMP 地址。这两种方式都涉及到从摄像头读取视频帧以及使用 ffmpeg 命令行工具将视频帧进行编码和推流的过程。 二、单线程推流 以下是单线程推流的代码 import cv2 as cv import subprocess as spdef push_stream():# 视频读取对象cap cv.VideoCapture(0) fps int(cap.get(cv.CAP_PROP_FPS))w int(cap.get(cv.CAP_PROP_FRAME_WIDTH))h int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))ret, frame cap.read()# 推流地址rtmpUrl rtmp://192.168.3.33:1935/live/# 推流参数command [ffmpeg,-y,-f, rawvideo,-vcodec,rawvideo,-pix_fmt, bgr24,-s, {}x{}.format(w, h),-r, str(fps),-i, -,-c:v, libx264,-pix_fmt, yuv420p,-preset, ultrafast,-f, flv, rtmpUrl]# 创建、管理子进程pipe sp.Popen(command, stdinsp.PIPE, bufsize10 ** 8)# 循环读取while cap.isOpened():# 读取一帧ret, frame cap.read()if frame is None:print(read frame err!)continue# 显示一帧cv.imshow(frame, frame)# 按键退出if cv.waitKey(1) 0xFF ord(q):break# 读取尺寸、推流# imgcv.resize(frame,size)pipe.stdin.write(frame) # 关闭窗口cv.destroyAllWindows()# 停止读取cap.release()在这个单线程的实现中我们执行以下步骤 初始化视频读取对象 使用 cv2.VideoCapture(0) 来打开默认的摄像头设备。获取摄像头的帧率 fps、宽度 w 和高度 h 等参数。 设置推流地址和参数 定义 rtmpUrl 作为推流的目标地址。构造 ffmpeg 的命令列表 command该列表包含了一系列的参数如 -y 表示覆盖输出文件、-f rawvideo 表示输入格式为原始视频等。使用 sp.Popen 创建一个子进程将 ffmpeg 命令作为子进程运行并且将其输入管道 stdin 连接到我们的程序。 循环读取和推流 在一个 while 循环中不断读取摄像头的帧。若读取失败打印错误信息并继续。使用 cv2.imshow 显示当前帧同时监听 q 键按下 q 键时退出程序。将读取到的帧通过管道发送给 ffmpeg 进行推流。 三、多线程推流 以下是多线程推流的代码 import queue import threading import cv2 as cv import subprocess as spclass Live(object):def __init__(self):self.frame_queue queue.Queue()self.command # 自行设置self.rtmpUrl self.camera_path def read_frame(self):print(开启推流)cap cv.VideoCapture(self.camera_path)# Get video informationfps int(cap.get(cv.CAP_PROP_FPS))width int(cap.get(cv.CAP_PROP_FRAME_WIDTH))height int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))# ffmpeg commandself.command [ffmpeg,-y,-f, rawvideo,-vcodec,rawvideo,-pix_fmt, bgr24,-s, {}x{}.format(width, height),-r, str(fps),-i, -,-c:v, libx264,-pix_fmt, yuv420p,-preset, ultrafast,-f, flv, self.rtmpUrl]# read webcamerawhile(cap.isOpened()):ret, frame cap.read()if not ret:print(Opening camera is failed)break# put frame into queueself.frame_queue.put(frame)def push_frame(self):# 防止多线程时 command 未被设置while True:if len(self.command) 0:# 管道配置p sp.Popen(self.command, stdinsp.PIPE)breakwhile True:if self.frame_queue.empty()! True:frame self.frame_queue.get()# process frame# 你处理图片的代码# write to pipep.stdin.write(frame.tostring())def run(self):threads [threading.Thread(targetLive.read_frame, args(self,)),threading.Thread(targetLive.push_frame, args(self,))][thread.setDaemon(True) for thread in threads][thread.start() for thread in threads]在这个多线程的实现中我们使用了 threading 和 queue 库 类的初始化 创建一个 Live 类在 __init__ 方法中初始化帧队列 frame_queue、command、rtmpUrl 和 camera_path 等变量。 读取帧的线程方法 read_frame 方法中使用 cv2.VideoCapture(self.camera_path) 打开摄像头。获取摄像头的参数并构造 ffmpeg 命令。不断从摄像头读取帧并将帧放入队列 frame_queue 中。 推流的线程方法 push_frame 方法中等待 command 被设置然后使用 sp.Popen 启动 ffmpeg 子进程。从帧队列中取出帧并将其写入 ffmpeg 的输入管道进行推流。 启动线程 run 方法创建并启动两个线程一个用于读取帧一个用于推流并且将它们设置为守护线程。 四、代码解释和注意事项 单线程推流 这种方式相对简单适合初学者理解。但由于是单线程操作在处理复杂任务时可能会导致性能瓶颈特别是在同时进行视频显示、读取和推流的情况下可能会出现卡顿现象。 多线程推流 利用多线程可以将不同的任务分配给不同的线程提高性能。frame_queue 是一个线程安全的队列用于在两个线程之间传递帧数据避免了数据竞争问题。setDaemon(True) 使得线程在主线程结束时自动终止防止程序无法正常退出。 五、总结 通过上述代码和解释我们可以看到如何使用 Python 进行单线程和多线程的视频推流操作。单线程代码简单明了但性能可能受限多线程代码可以更好地处理高负载但也需要注意线程安全和资源管理等问题。在实际应用中我们可以根据具体的需求和硬件性能来选择合适的推流方式。同时我们可以进一步优化代码例如添加异常处理、优化帧处理逻辑等以提高程序的稳定性和性能。
http://www.hkea.cn/news/14593921/

相关文章:

  • 北京市企业网站建设免费资源部落wordpress
  • 做国际网站学习网页制作的网站
  • 衣柜推拉门图案设计网站如何维护自己的网站
  • 途牛旅行网网站建设社区子网站群建设
  • 肇庆网站制作系统天津建设工程信息
  • 地产flash网站菏泽做公司简介网站
  • 梧州自助建站seo做网站怎么不被找到
  • 一个网站一年多少钱wordpress live-calendar
  • 爱站seo综合查询华为弹性云服务器创建wordpress
  • 电子商务网站seo湖南郴州市区号
  • 邮箱类网站模板雄安网建 网站建设
  • 织梦网站怎么做404页面wordpress怎么做分页
  • 十堰做网站wordpress课程表单
  • 国内做网站最大的公司有哪些网站作业二级网页
  • 建设银行网站缺点网站开发文档word
  • 网站建设与维护网课wordpress自动上传至cdn
  • 网站注册网站违法吗网站后续建设说明
  • 举报网站建设自查报告wordpress权限问题
  • 网站建设开发设计公司江苏省建设工程安全监督网站
  • 欧美设计网站推荐做运营必知网站
  • 太原网站建设vhuashi济南城市建设学院网站
  • 什么是企业网站营销网页布局类型
  • 建设网站资质查询安徽城乡建设厅网站焊工证查询
  • 网站ip指向列表永修县建设局网站
  • 有自媒体谁还做网站聊城做网站建设
  • 制作一个简单网站的代码wordpress教程安装教程视频教程
  • ps怎么做网站首页和超链接印花图案设计网站
  • 上海网站建设规划手机制作图片软件
  • wordpress手机网站马鞍山建设工程监督站建管处网站
  • 漯河市万金镇网站建设wordpress竞争