热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpeg与opencv实现rtsp推流(基于ZLMediaKit实现)

文章目录前言代码总结前言之前记录过,GStreamer与opencv实现rtsp推流实现,这次通过ffmpeg与opencv并且搭配ZLMediaKi


文章目录

  • 前言
  • 代码
  • 总结




前言

之前记录过,GStreamer与opencv实现rtsp推流实现,这次通过ffmpeg与opencv并且搭配ZLMediaKit实现rtsp推流。




代码

import cv2
import time
import subprocess as sp
import multiprocessingclass stream_pusher(object):def __init__(self, rtmp_url=None, raw_frame_q=None): # 类实例化的时候传入rtmp地址和帧传入队列self.rtmp_url = rtmp_urlself.raw_frame_q = raw_frame_qfps = 20 # 设置帧速率# 设置分辨率width = 1920 # 宽height = 1080 # 高# 设置FFmpeg命令文本self.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.rtmp_url]# 向服务器推送def push_frame(self):# 配置向os传递命令的管道p = sp.Popen(self.command, stdin=sp.PIPE)while True:if not self.raw_frame_q.empty(): # 如果输入管道不为空# 把帧和相关信息从输入队列中取出frame = self.raw_frame_q.get()# 把内容放入管道,放入后有os自己去执行p.stdin.write(frame.tostring())else:time.sleep(0.01)# 启动运行def run(self):# 定义一个子进程push_frame_p = multiprocessing.Process(target=self.push_frame, args=())push_frame_p.daemon = True # 把子进程设置为daemon方式push_frame_p.start() # 运行子进程if __name__ == '__main__':cap = cv2.VideoCapture("rtsp://admin:admin110@192.168.2.64:554/main")rtmpUrl = "rtmp://192.168.2.8/live/test666" # 用vcl等直播软件播放时,也用这个地址raw_q = multiprocessing.Queue() # 定义一个向推流对象传入帧及其他信息的队列my_pusher = stream_pusher(rtmp_url=rtmpUrl, raw_frame_q=raw_q) # 实例化一个对象my_pusher.run() # 让这个对象在后台推送视频流while True:_, raw_frame = cap.read()if not raw_q.full(): # 如果队列没满raw_q.put(raw_frame) # 送入队列cv2.waitKey(1)cap.release()print('finish')

效果如下:
在这里插入图片描述




总结

工作中总会遇到各种问题,解决一个记录一个,向着更优秀的程序员迈进!!!继续加油喽!!!
如果阅读本文对你有用,欢迎一键三连呀!!!
2021年8月31日20:38:34
在这里插入图片描述


推荐阅读
author-avatar
mobiledu2502892717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有